싱크를 아래처럼 찍었다고 했을 때

--------------------------------------------------------------------

<BODY>


<SYNC Start=200><P Class=KRCC>
12345
<SYNC Start=300><P Class=KRCC>&nbsp;
<SYNC Start=400><P Class=KRCC>&nbsp;
<SYNC Start=450><P Class=KRCC>&nbsp;

<SYNC Start=500><P Class=KRCC>
12345
<SYNC Start=600><P Class=KRCC>&nbsp;
<SYNC Start=700><P Class=KRCC>&nbsp;
<SYNC Start=750><P Class=KRCC>&nbsp;
<SYNC Start=800><P Class=KRCC>
12345
<SYNC Start=900><P Class=KRCC>&nbsp;
<SYNC Start=1000><P Class=KRCC>&nbsp;
<SYNC Start=1400><P Class=KRCC>&nbsp;

<SYNC Start=1700><P Class=KRCC>
12345
<SYNC Start=1800><P Class=KRCC>&nbsp;
<SYNC Start=1900><P Class=KRCC>&nbsp;
<SYNC Start=1950><P Class=KRCC>&nbsp;

</BODY>
</SAMI>

--------------------------------------------------------------------

종료 싱크 부분을 매크로로 돌려서 지워주는 게...


원하는 결과

--------------------------------------------------------------------

<BODY>

<SYNC Start=200><P Class=KRCC>
12345
<SYNC Start=300><P Class=KRCC>&nbsp;


<SYNC Start=500><P Class=KRCC>

12345
<SYNC Start=600><P Class=KRCC>&nbsp;

<SYNC Start=800><P Class=KRCC>
12345
<SYNC Start=900><P Class=KRCC>&nbsp;


<SYNC Start=1700><P Class=KRCC>
12345
<SYNC Start=1800><P Class=KRCC>&nbsp;


</BODY>
</SAMI>

--------------------------------------------------------------------



물론 가능합니다. 아래와 같이 작성해서 사용하시면 됩니다.


var
  LineSumCount, DelLoop, LoopVar, ReadPos: Integer;
  LineStr, CurrentSyncStr, PrevSyncStr: String;

  BodyStart: Boolean;
  iLoop: Integer;
  EndLine: Integer;
AddnbspCount: integer;

begin

//CCP_SCRIPT := CC_STRINGREPLACE(CCP_SCRIPT, '<P Class=KRCC>'+CRLF+'&nbsp;', '<P Class=KRCC>&nbsp;');

  PrevSyncStr := '';
  CurrentSyncStr := '';
  LineSumCount := 0;
  BodyStart := False;

  EndLine := CC_CURRENTLINECOUNT-1;
  For LoopVar := CC_CURRENTLINECOUNT-1 downto 0 do
  Begin
    If Pos('</body>', LowerCase(CC_GETLINETEXT(LoopVar))) > 0 Then
    Begin
       EndLine := LoopVar-1;
       Break;
    End;
  End;
   For LoopVar := EndLine downto 0 do


  Begin
     LineStr := CC_GETLINETEXT(LoopVar);

     ReadPos := 0;
     For iLoop :=  Length(LineStr) downTo 1 do
     Begin
        If Copy(LineStr, iLoop, 1) = '>' Then
        Begin
           ReadPos := iLoop;
           Break;
        End;
     End;

     CurrentSyncStr := CurrentSyncStr + Trim(Copy(LineStr, ReadPos+1, Length(LineStr)-ReadPos));
     LineSumCount := LineSumCount + 1;

     If CC_ISSYNCLINE(LoopVar) Then
     Begin
        // 마지막으로 이전 출력값이랑 현재 출력값이 둘다 &nbsp 면 이전 싱크를 다 지웁니다.      
        If (PrevSyncStr = '&nbsp;') and (CurrentSyncStr = '&nbsp;') Then
       Begin
           For DelLoop := 1 to LineSumCount do

              CC_DELETELINE(LoopVar+1);

AddnbspCount := AddnbspCount+1;

        End;

        PrevSyncStr := CurrentSyncStr;
        CurrentSyncStr := '';
        LineSumCount := 0;

     End;

  End;

//CCP_SCRIPT := CC_STRINGREPLACE(CCP_SCRIPT, '<P Class=KRCC>&nbsp;', '<P Class=KRCC>'+CRLF+'&nbsp;');

if AddnbspCount > 0 then ShowMessage('총 '+IntToStr(AddnbspCount) + ' 개의 &nbsp; 싱크 줄을 삭제했습니다.');
CCP_CaretX := 0;
//CP_TopLine := CP_TopLine + 1;
//CP_TopLine := CP_TopLine - 1;
End;



<SYNC Start=300><P Class=KRCC>&nbsp;// 이 값이 남길 바랬는데...
<SYNC Start=400><P Class=KRCC>&nbsp;
<SYNC Start=450><P Class=KRCC>&nbsp;// 매크로를 돌리면 이 값이 남네요...


CC_DELETELINE(LoopVar);이 값을


CC_DELETELINE(LoopVar+1); 이렇게 주니 해결됐네요^^


Posted by 투명인간취급
,
<SYNC Start=200><P Class=KRCC>
대사1
<SYNC Start=300><P Class=KRCC>


<SYNC Start=500><P Class=KRCC>
대사2
<SYNC Start=600><P Class=KRCC>


<SYNC Start=800><P Class=KRCC>
대사3
<SYNC Start=900><P Class=KRCC>


<SYNC Start=1700><P Class=KRCC>
대사4
<SYNC Start=1800><P Class=KRCC>


<SYNC Start=200><P Class=KRCC>
대사1
<SYNC Start=300><P Class=KRCC>
<SYNC Start=500><P Class=KRCC>
대사2
<SYNC Start=600><P Class=KRCC>
<SYNC Start=800><P Class=KRCC>
대사3
<SYNC Start=900><P Class=KRCC>
<SYNC Start=1700><P Class=KRCC>
대사4
<SYNC Start=1800><P Class=KRCC>


========================================================================================================

위에 같은 자막에 &nbsp; 를 일괄적으로 넣어 줄 수 있는 매크로입니다.

이런건 조금 난감한 편인데요

 

어쨌거나 매크로로 안되는건 없으니깐..

아래와 같이 매크로를 만들어주면 됩니다. 주석이나 이런건 지원 안되구요 ^_^;;

 

이 매크로 만들면서 느낀건데 태그 지우는 매크로 명령이 있어야되겠네요.. -_-a; 전에 만들었던거 같은데..

 

var

  LoopVar: Integer;
  LineAddBuf: String;

AddnbspCount: integer;

  lChar: String;
  lLoop: Integer;
  lRLine: String;
  lRStr: String;
  EndLine: Integer;
begin

  EndLine := CC_CURRENTLINECOUNT-1;
  For LoopVar := CC_CURRENTLINECOUNT-1 downto 0 do
  Begin
    If Pos('</body>', LowerCase(CC_GETLINETEXT(LoopVar))) > 0 Then
    Begin
       EndLine := LoopVar-1;
       Break;
    End;
  End;
 
  For LoopVar := EndLine downto 0 do
  Begin

     If CC_ISSYNCLINE(LoopVar) Then
     Begin
        lRLine := Trim(CC_GETLINETEXT(LoopVar));
    lRStr := '';

    For lLoop := Length(lRLine) downto 1 do
    Begin

       lChar := Copy(lRLine, lLoop, 1);
           If lChar = '>' Then Break;
       lRStr := lRStr + lChar;
    End;


     If (Trim(lRStr) = '') and (Trim(LineAddBuf) = '') Then
     begin

           CC_INSERTLINE(LoopVar+1, '&nbsp;');

           AddnbspCount := AddnbspCount+1;
     End;   
        LineAddBuf := '';
        continue;

 End;   
     LineAddBuf := LineAddBuf + TrimW(CC_GETLINETEXT(LoopVar));
  End;
if AddnbspCount > 0 then ShowMessage('총 '+IntToStr(AddnbspCount) + ' 개의 &nbsp; 를 추가했습니다.');
CCP_CaretX := 0;
end;


========================================================================================================

실행 후 결과


<SYNC Start=200><P Class=KRCC>
대사1
<SYNC Start=300><P Class=KRCC>
&nbsp;


<SYNC Start=500><P Class=KRCC>
대사2
<SYNC Start=600><P Class=KRCC>
&nbsp;


<SYNC Start=800><P Class=KRCC>
대사3
<SYNC Start=900><P Class=KRCC>
&nbsp;


<SYNC Start=1700><P Class=KRCC>
대사4
<SYNC Start=1800><P Class=KRCC>
&nbsp;

<SYNC Start=200><P Class=KRCC>
대사1
<SYNC Start=300><P Class=KRCC>
&nbsp;
<SYNC Start=500><P Class=KRCC>
대사2
<SYNC Start=600><P Class=KRCC>
&nbsp;
<SYNC Start=800><P Class=KRCC>
대사3
<SYNC Start=900><P Class=KRCC>
&nbsp;
<SYNC Start=1700><P Class=KRCC>
대사4
<SYNC Start=1800><P Class=KRCC>
&nbsp;


Posted by 투명인간취급
,

문의도 있고 잘 안쓰는 CC_RUNLOWCOMMAND 매크로도 소개할겸사겸사 글을 적어봅니다.

그럼 매크로 나갑니다.

If CC_ISSYNCLINE(CCP_CARETY) Then
Begin
CC_RUNLOWCOMMAND('Menu_DeleteCurrentTime');
CCP_CURRENTLINE := CC_STRINGREPLACE(CCP_CURRENTLINE, '<Sync Start=0><P Class=KRCC>', '');
End;


위와 같습니다.

방식은 이렇습니다.

현재 커서가 있는 줄이 싱크태그가 있는 라인인지 확인 한 뒤, 싱크 태그가 있는 줄이라면

메뉴의 시간 삭제를 실행한 뒤

<sync start 로 시작하는 문자열을 지우는겁니다. (시간 삭제를 하면 Sync Start=0 이 되니까요

만일 직접 태그를 수정하셔서 Sync Start 로 시작하는 구문이 다르다면 볼드 처리된 부분만 고치시면 됩니다.

덤+

CC_RUNLOWCOMMAND 에서 호출가능한 내부 기능들은

키 프리셋 파일인 c4k 파일을 열어보면 그 이름들을 알아낼 수 있습니다.


==============================================================================================================

1. 바로 삭제가 가능하게 할수는 있습니다만.. 여러모로 좋을것 같지는 않습니다;;

아래와 같이 매크로를 작성하시면 됩니다.

(10줄 이상 위로 추적해서 삭제하진 않습니다. 그 이상을 원하시면 -10 을 더 키우시면 됩니다)


var
  LineCheck, MaxLine: Integer;
begin
  MaxLine := CCP_CaretY - 10;
  If MaxLine < 0 Then MaxLine := 0;

  for LineCheck := CCP_CaretY downto MaxLine do
  begin
    If CC_ISSYNCLINE(LineCheck) Then
    Begin
  CCP_CaretY := LineCheck;
  CC_RUNLOWCOMMAND('Menu_DeleteCurrentTime');
  CCP_CURRENTLINE := CC_STRINGREPLACE(CCP_CURRENTLINE, '<Sync Start=0><P Class=KRCC>', '');
    End;
  end;
end;


2. 공백이 안남게 하시려면 요렇게 한줄을 추가해주시면 됩니다.


If CC_ISSYNCLINE(CCP_CARETY) Then
Begin
CC_RUNLOWCOMMAND('Menu_DeleteCurrentTime');
CCP_CURRENTLINE := CC_STRINGREPLACE(CCP_CURRENTLINE, '<Sync Start=0><P Class=KRCC>', '');

If CCP_CURRENTLINE = '' Then CC_DeleteLine(CCP_CARETY); //추가
End;


Posted by 투명인간취급
,

예 요번에는 싱크가 있는 줄만 지우는 매크로입니다.

최대한 간단하게 만든거라서 좀 부족하긴 합니다만.. 대부분의 자막에서는 잘 동작할것 같습니다.


핵심은 CC_IsSyncLine(줄번호) 함수를 써서 해당 줄에 싱크 태그가 있는지 확인하고 있으면

CC_DeleteLine(줄번호) 함수로 해당 줄을 걍 지우는 겁니다.


그럼 바로 매크로 코드 나갑니다.


var
  LineObj: TStringList;
  LineLoop: Integer;
  DelSyncCount: integer;
begin
//가로로 이어 쓰인 싱크에 대사까지 삭제되는 거 방지를 위한 변환 작업
{
CCP_SCRIPT := CC_STRINGREPLACE(CCP_SCRIPT, CC_PTAG+CRLF, CC_PTAG);
CCP_SCRIPT := CC_STRINGREPLACE(CCP_SCRIPT, CC_PTAG, CC_PTAG+CRLF);
}


  LineObj := TStringList.Create;
  Try
    LineObj.Text := CCP_SCRIPT;
    For LineLoop := LineObj.Count -1 downto 0 do
    Begin
       If CC_ISSYNCLINE(LineLoop) Then
       Begin

          CC_DeleteLine(LineLoop);

          DelSyncCount := DelSyncCount+1;
{
end
else
begin
          CC_INSERTLINE(LineLoop, CRLF);
}
       End;
{
       If Trim(LineObj[LineLoop]) = '&nbsp;' Then
       Begin
          CC_DELETELINE(LineLoop);
          CC_INSERTLINE(LineLoop, CRLF);
       end;
}
   

End;

  Finally
    LineObj.Free;
  End;

if DelSyncCount > 0 then ShowMessage('총 '+IntToStr(DelSyncCount) + ' 개의 싱크를 제거했습니다.');
CCP_CaretX := 0;

end;


Posted by 투명인간취급
,

이번엔 공백줄을 지우는 거지요, 역시나 유사합니다. 전체에서 지우는 거라서 약간 달라지긴 합니다만.

일단 매크로 코드는 아래와 같습니다.


var
  LineObj: TStringList;
  LineLoop: Integer;
  DelBlankCount: integer;
  CurrentLine: WideString;
begin
  LineObj := TStringList.Create;
  Try
    LineObj.Text := CCP_SCRIPT;

    For LineLoop := LineObj.Count -1 downto 0 do
    Begin
      // 공백이 아닌 줄은 처리하지 않고 다음 줄로 넘어갑니다..
      If Trim(LineObj[LineLoop]) <> '' Then Continue;

      CC_DELETELINE(LineLoop);
      DelBlankCount := DelBlankCount+1;

    End;

  Finally
    LineObj.Free;
  End;
if DelBlankCount > 0 then ShowMessage('총 '+IntToStr(DelBlankCount) + ' 개의 공백 줄을 제거했습니다.');
CCP_CaretX := 0;
end;


IRC에 비해서 해야할게 적기때문에 줄이 확 줄어듭니다.


Posted by 투명인간취급
,

싱크값 뒷자리 수를 00으로 바꾸기 방법 2가지

<Sync Start=12300><P Class=KRCC> 등으로 뒷자리 수 00으로 끝나게 만들기

1. 방법 : 편집->빠른 싱크 편집->싱크 비율 수정->비율로 수정 



------------------------------------------------------------------------------------------------
<Sync Start=12345><P Class=KRCC>

<Sync Start=12445><P Class=KRCC>
&nbsp;
<Sync Start=12545><P Class=KRCC>

<Sync Start=12645><P Class=KRCC>
&nbsp;
<Sync Start=12745><P Class=KRCC>

<Sync Start=12845><P Class=KRCC>
&nbsp;
<Sync Start=12945><P Class=KRCC>

<Sync Start=13045><P Class=KRCC>
&nbsp;
------------------------------------------------------------------------------------------------
기존 방식으로 찍은 자막에 뒷자리 수 00으로 채우시려면

편집->빠른 싱크 편집->싱크 비율 수정->비율로 수정
------------------------------------------------------------------------------------------------



0.01000 이값을 입력해서 확인 뒤에 2자리를 날려주고
------------------------------------------------------------------------------------------------
<Sync Start=123><P Class=KRCC>

<Sync Start=124><P Class=KRCC>
&nbsp;
<Sync Start=125><P Class=KRCC>

<Sync Start=126><P Class=KRCC>
&nbsp;
<Sync Start=127><P Class=KRCC>

<Sync Start=128><P Class=KRCC>
&nbsp;
<Sync Start=129><P Class=KRCC>

<Sync Start=130><P Class=KRCC>
&nbsp;
------------------------------------------------------------------------------------------------



100.00000 다시 이값을 입력해서 확인 뒤에 00을 채워주시면 됩니다.
------------------------------------------------------------------------------------------------
<Sync Start=12300><P Class=KRCC>

<Sync Start=12400><P Class=KRCC>
&nbsp;
<Sync Start=12500><P Class=KRCC>

<Sync Start=12600><P Class=KRCC>
&nbsp;
<Sync Start=12700><P Class=KRCC>

<Sync Start=12800><P Class=KRCC>
&nbsp;
<Sync Start=12900><P Class=KRCC>

<Sync Start=13000><P Class=KRCC>
&nbsp;

------------------------------------------------------------------------------------------------
또는 싱크 찍으면서 00으로 찍기

2. 방법 : 도구->프로그램 설정->기본 태그 설정->시간 태그 & 공백 태그 추가


------------------------------------------------------------------------------------------------
시간 태그
------------------------------------------------------------------------------------------------

var
ZeroSYNC: Integer; //변수 선언
begin

If CC_ISSYNCLINE(CCP_CaretY) Then
Begin

ZeroSYNC := CC_MEDIACURRENTSYNCTIME*0.01000;

   CCP_CURRENTTIME := ZeroSYNC*100.00000;
   CCP_CaretY := CCP_CaretY + 1;
End
Else
Begin

ZeroSYNC := CC_MEDIACURRENTSYNCTIME*0.01000;

   CC_InsertLine(CCP_CaretY, '<Sync Start='+IntToStr(ZeroSYNC*100.00000)+'>'+CC_PTAG);
   CCP_CaretY := CCP_CaretY + 2;
   CC_MOVETOEDITORCARETBOTTOM;
End;

end;

------------------------------------------------------------------------------------------------
공백 태그
------------------------------------------------------------------------------------------------

var
ZeroSYNC: Integer; //변수 선언
begin

If CC_ISSYNCLINE(CCP_CaretY) Then
Begin

ZeroSYNC := CC_MEDIACURRENTSYNCTIME*0.01000;

   CCP_CURRENTTIME := ZeroSYNC*100.00000;
   CCP_CaretY := CCP_CaretY + 1;
End
Else
Begin

ZeroSYNC := CC_MEDIACURRENTSYNCTIME*0.01000;

CC_InsertLine(CCP_CaretY, '<Sync Start='+IntToStr(ZeroSYNC*100.00000)+'>'+CC_PTAG+CRLF+'&nbsp;');
   CCP_CaretY := CCP_CaretY + 2;
   CC_MOVETOEDITORCARETBOTTOM;
End;

end;

------------------------------------------------------------------------------------------------

Posted by 투명인간취급
,

기본값이 아마 -300일듯한데 이 상태로 쓰시면 좀 싱크가 미세하게 늦게 찍히는 느낌이 날것입니다


처음 사용자한테 권장하는 값은 -500 정도가 가장 찍기 좋게 나올듯합니다.



Posted by 투명인간취급
,

cc4설치폴더->Handler->에 Main.zip , autoComplete.zip 를 압축을 풀어 넣으시면 됩니다.


 Main.zip

 AutoComplete.zip


=====================================================================================================

자동 완성 기능
다듬고 몇 가지 좀 더 추가했습니다.
*추가 방법 cc4설치폴더->Handler->AutoComplete.psc 을 메모장으로 열어 본문 코드를 넣으시던지
아니면 첨부 파일을 저 경로에 압축 풀어 넣으시면 됩니다.

<Font Face="굴림">    tag, <Font Color="blue">    tag,
"굴림"    FACE, "blue"    COLOR
이렇게 해서 더 넣을까 했지만 이렇게까지 쓸 분을 없을 거 같아서 넣었다 빼고,
저렇게 할 분이면 이미 스마트 태그나 컬러 태그 생성기를 쓰시겠지요.
=====================================================================================================


<BR>    tag

&nbsp;    entity


<Font Color="">    tag    13
<Font Face="">    tag    12
<Font Size="">    tag    12
<Font Color="" Face="" Size="">    tag    13
</Font>    tag
<FONT COLOR=""></FONT>    tag    13
<FONT FACE=""></FONT>    tag    12
<FONT SIZE=""></FONT>    tag    12

<Sync Start=>    tag    12
<P Class=>    tag    9
<SYNC START=><P CLASS=>    tag    12

<b>    tag
</b>    tag
<B></B>    tag    3
<i>    tag
</i>    tag
<I></I>    tag    3
<s>    tag
</s>    tag
<S></S>    tag    3
<u>    tag
</u>    tag
<U></U>    tag    3
<p>    tag
</p>    tag
<P></P>    tag    3

<ruby>    tag
<rt>    tag
</rt></ruby>    tag
</rt>    tag
</ruby>    tag
<RUBY><RT></RT></RUBY>    tag    6

<rp>    tag
</rp>    tag
<RP></RP>    tag    4
<rb>    tag
</rb>    tag
<RB></RB>    tag    4

<SAMI>    tag
</SAMI>    tag
<HEAD>    tag
</HEAD>    tag
<Title>    tag
</Title>    tag
<STYLE TYPE="text/css">    tag
</STYLE>    tag
<BODY>    tag
</BODY>    tag


=====================================================================================================

<br>핸들러 파일
지금까지 몇 가지 추가되었던 사항 모두 집어넣은 <br> 핸들러 파일입니다.
*추가 방법 cc4설치폴더->Handler->Main.psc 을 메모장으로 열어 본문 코드를 넣으시던지
아니면 첨부 파일을 저 경로에 압축 풀어 넣으시면 됩니다.

1. <!-- --> 범위 주석체크 해서 <br> 넣지 않기
2. 대사, &nbsp; 아래가 공백이면 <br> 넣지 않기
3. <br>을 몇 개 넣었는지 개수 세기
=====================================================================================================


unit MainHandler;

implementation

procedure SlideView_Handler(TagString: String);
begin
  showMessage(TagString);
end;

procedure AutoBRInsert;
var
  ClearTagFlag: Boolean;
  CommentTagFlag: Boolean; //주석 태그 체크
  PTAGTagFlag: Boolean; //클래스 태그 체크

  StartTagFlag: Boolean;
  LoopVar: Integer; //줄번호
  CurrentLine: WideString; //현재 줄
  NextLine: WideString; //다음 줄

  AddBRCount: Integer; //<br> 추가 개수
begin

  ClearTagFlag := False;
  StartTagFlag := False;
  For LoopVar := 0 To CC_CURRENTLINECOUNT-2 Do
  Begin

     CurrentLine := TrimW(CC_GETLINETEXT(LoopVar));
     NextLine := TrimW(CC_GETLINETEXT(LoopVar+1));

// 싱크 중간 긴 주석문에 <br> 안 들어가게 하는 체크문
     If (CommentTagFlag) and (Pos('-->', CurrentLine) > 0) Then CommentTagFlag := False;
     If (CommentTagFlag) and (Pos('-->', NextLine) > 0) Then CommentTagFlag := False;
// 싱크 중간 추가된 클래스 태그에 <br> 안 들어가게 하는 체크문
     If (PTAGTagFlag) and (Pos('CC>', CurrentLine) > 0) Then PTAGTagFlag := False;
     If (PTAGTagFlag) and (Pos('CC>', NextLine) > 0) Then PTAGTagFlag := False;
//
     If CC_ISSYNCLINE(LoopVar) Then
     Begin
        If Not StartTagFlag Then StartTagFlag := True;
        Continue;
     End;
     
     If Not StartTagFlag Then Continue;

     If CC_ISSYNCLINE(LoopVar+1) Then
        Continue;

// 대사, &nbsp; 아래 라인에 공백일 때 <br> 안 들어가게 하는 if문
     If (CurrentLine = '') or (CurrentLine = '&nbsp;') Then
     Begin
        ClearTagFlag := True;
        Continue;
     End;
     If (NextLine = '') or (NextLine = '&nbsp;') Then //추가
     Begin
        ClearTagFlag := True;
        Continue;
     End;

// 싱크 중간 긴 주석문에 <br> 안 들어가게 하는 체크문
     If (Pos('<!--', CurrentLine) > 0) Then CommentTagFlag := True;
     If (Pos('<!--', NextLine) > 0) Then CommentTagFlag := True;

     If (CommentTagFlag) and (Pos('-->', CurrentLine) > 0) Then CommentTagFlag := False;
     If (CommentTagFlag) and (Pos('-->', NextLine) > 0) Then CommentTagFlag := False;

     If (Pos('-->', CurrentLine) > 0) and (Pos('-->', CurrentLine) > Length(CurrentLine)-3) Then Continue;
     If (Pos('-->', NextLine) > 0) and (Pos('-->', NextLine) > Length(NextLine)-3) Then Continue;

// 싱크 중간 추가된 클래스 태그에 <br> 안 들어가게 하는 체크문
     If (Pos('<P', CurrentLine) > 0) Then PTAGTagFlag := True;
     If (Pos('<P', NextLine) > 0) Then PTAGTagFlag := True;

     If (PTAGTagFlag) and (Pos('CC>', CurrentLine) > 0) Then PTAGTagFlag := False;
     If (PTAGTagFlag) and (Pos('CC>', NextLine) > 0) Then PTAGTagFlag := False;

     If (Pos('CC>', CurrentLine) > 0) and (Pos('CC>', CurrentLine) > Length(CurrentLine)-3) Then Continue;
     If (Pos('CC>', NextLine) > 0) and (Pos('CC>', NextLine) > Length(NextLine)-3) Then Continue;
//

     If (CurrentLine <> '') or (CurrentLine <> '&nbsp;') Then ClearTagFlag := False;
     If (NextLine <> '') or (NextLine <> '&nbsp;') Then ClearTagFlag := False;

     If ClearTagFlag Then Continue;
     If CommentTagFlag Then Continue;
     If PTAGTagFlag Then Continue;

     If (Pos('</BODY', UpperCase(CurrentLine)) <> 0) Then Break;
     If (Pos('</BODY', UpperCase(NextLine)) <> 0) Then Break;

     If UpperCase( Copy(CurrentLine, Length(CurrentLine)-3, 4) ) <> '<BR>' Then
     Begin
        CC_MODIFYLINE(LoopVar, CurrentLine+'<BR>');
        AddBRCount := AddBRCount + 1;
     End;

  End;

//핸들러로 <br> 추가 개수가 1개 이상이면 메시지박스 출력,
//<br> 1개라도 추가한 게 없으면 메세지박스 안 뜨게 했습니다.
if AddBRCount > 0 then ShowMessage('총 '+IntToStr(AddBRCount) + ' 개의 <BR> 태그가 추가되었습니다.');

end;

procedure AutoSyncChangeForBugPMP;
var
  LoopVar: Integer;
  CurrentLine: WideString;    
begin
  For LoopVar := 0 To CC_CURRENTLINECOUNT-1 Do
  Begin
     CurrentLine := TrimW(CC_GETLINETEXT(LoopVar));

     If Pos('<SYNC', UpperCase(CurrentLine)) > 0 Then
     Begin        
        CurrentLine := CC_STRINGREPLACE(CurrentLine, '<SYNC', '<SYNC');
        CC_MODIFYLINE(LoopVar, CurrentLine);
     End;

  End;
end;

end.


=====================================================================================================



Posted by 투명인간취급
,

고급 지능형 싱크는 rc7 버전 이상부터 사용할 수 있습니다


정식 버전에서도 사용 가능합니다.


ccmp 기본 싱크 방식이 고급 지능형 방식과 유사하니
ccmp등을 써보셨던 분이나 cc4로 갈아타려 하시는 분이라면
고급 지능형 싱크 사용을 권합니다.

시간 싱크
*추가 방법은 도구->프로그램 설정->기본 태그 설정->시작 태그



=====================================================================================================


Var
maxline, linecheck: Integer;
LineStr: String;
Begin

If CC_ISSYNCLINE(CCP_CaretY) Then
Begin
  CCP_CURRENTTIME := CC_MEDIACURRENTSYNCTIME;
  CCP_CaretY := CCP_CaretY + 1;

  maxline := CCP_CaretY+10;
  If maxline >= CC_CurrentLineCount then maxline := CC_CurrentLineCount-1;

  for linecheck := CCP_CaretY to maxline do
  begin
    If CC_GetLineText(Linecheck) = '' then break;

    LineStr := UpperCase(Trim(CCP_CurrentLine));

    If Copy(LineStr, Length(LineStr)-3, 4) = '<BR>' Then
    CCP_CaretY := CCP_CaretY + 1;
  end;

If not CC_ISSYNCLINE(CCP_CaretY) Then
begin
CCP_CaretY := CCP_CaretY + 1; //싱크 값만 변경 후 이동시 좀 더 지능적으로 커서 이동
End;
CCP_CaretX := 0;// 다음에 찍을 대사에서 커서를 제일 좌측으로 이동
  CC_MOVETOEDITORCARETBOTTOM;
End
Else
Begin

  CC_InsertLine(CCP_CaretY, '<Sync Start='+IntToStr(CC_MEDIACURRENTSYNCTIME)+'>'+CC_PTAG);
  CCP_CaretY := CCP_CaretY + 1;

  maxline := CCP_CaretY+10;
  If maxline >= CC_CurrentLineCount then maxline := CC_CurrentLineCount-1;

  for linecheck := CCP_CaretY to maxline do
  begin
    If CC_GetLineText(Linecheck) = '' then break;

    LineStr := UpperCase(Trim(CCP_CurrentLine));

    If Copy(LineStr, Length(LineStr)-3, 4) = '<BR>' Then
    CCP_CaretY := CCP_CaretY + 1;
  end;
{
If CC_GetLineCount-1 <= CCP_CaretY Then
Begin
CC_InsertLine(CCP_CaretY+1, CRLF); //마지막 대사 아래에 엔터값 생성
end;
}
CCP_CaretY := CCP_CaretY + 1;

//CP_TopLine := CCP_CaretY - 35; // 자동스크롤 기능 숫자 값 조정하시면 새로 스크롤 위치 조정됩니다.
CCP_CaretX := 0;// 다음에 찍을 대사에서 커서를 제일 좌측으로 이동
 CC_MOVETOEDITORCARETBOTTOM;
End;

End;


=====================================================================================================
*시간 태그 수정사항
위 태그는 오른쪽 끝에 <br>태그가 있으면 알아서 판단해서 커서가 이동됩니다.

예전 거는 31대사<br>32대사<br>33대사<br> 이런 식으로 겹겹이 있는 건 <br> 판단을 잘 못 했지만
이번에 수정한 방식은 <br> 태그가 가로 새로 혼용에도 좀 더 지능적으로 대응하게 했습니다.
예전 거보다 더 똑똑해졌습니다

아래처럼 <br>이 여러 개가 있어도 자동적으로 판단해서 1~10칸까지 이동 됩니다.

10칸 이상 이동이 필요하신분은 maxline := CCP_CaretY+10; 숫자 10에 값을 조정 하시면 됩니다.

1대사<br>2대사
3대사<br>4대사
5대사<br>
6대사
7대사<br>
8대사
9대사<br>10대사<br>11대사
12대사<br>13대사<br>
14대사
15대사<br>16대사<br>17대사
18대사<br>19대사<br>
20대사
21대사<br>22대사<br>
23대사<br>24대사<br>
25대사<br>26대사
27대사<br>28대사<br>
29대사<br>30대사
31대사<br>32대사<br>33대사<br>
34대사<br>35대사<br>36대사<br>
37대사<br>38대사<br>39대사<br>
40대사<br>41대사<br>42대사
43대사<br>44대사<br>45대사<br>
46대사<br>47대사<br>48대사<br>
49대사<br>50대사<br>51대사

=====================================================================================================
공백 싱크
*추가 방법은 도구->프로그램 설정->기본 태그 설정->공백 태그



=====================================================================================================


Var
maxline, linecheck: Integer;
Begin

If CC_ISSYNCLINE(CCP_CaretY) Then
Begin
   CCP_CURRENTTIME := CC_MEDIACURRENTSYNCTIME;
   CCP_CaretY := CCP_CaretY + 1;

If not CC_ISSYNCLINE(CCP_CaretY) Then
begin
CCP_CaretY := CCP_CaretY + 1; //싱크 값만 변경 후 이동시 좀 더 지능적으로 커서 이동
End;

  maxline := CCP_CaretY+10;
  If maxline >= CC_CurrentLineCount then maxline := CC_CurrentLineCount-1;

  for linecheck := CCP_CaretY to maxline do
  begin
    If CC_GetLineText(Linecheck) <> '' then break;
    CCP_CaretY := CCP_CaretY + 1;
  end;
CCP_CaretX := 0;// 다음에 찍을 대사에서 커서를 제일 좌측으로 이동
  CC_MOVETOEDITORCARETBOTTOM;
End
Else
Begin
{
If CC_GetLineCount-1 <= CCP_CaretY Then
Begin
CC_InsertLine(CCP_CaretY+1, CRLF); //마지막 대사 아래에 엔터값 생성
end;
}
  CC_InsertLine(CCP_CaretY, '<Sync Start='+IntToStr(CC_MEDIACURRENTSYNCTIME)+'>'+CC_PTAG+CRLF+'&nbsp;');
  CCP_CaretY := CCP_CaretY + 1;
CCP_CaretY := CCP_CaretY + 1;

  maxline := CCP_CaretY+10;
  If maxline >= CC_CurrentLineCount then maxline := CC_CurrentLineCount-1;

  for linecheck := CCP_CaretY to maxline do
  begin
    If CC_GetLineText(Linecheck) <> '' then break;
    CCP_CaretY := CCP_CaretY + 1;
  end;

//CP_TopLine := CCP_CaretY - 35; // 자동스크롤 기능 숫자 값 조정하시면 새로 스크롤 위치 조정됩니다.
CCP_CaretX := 0;// 다음에 찍을 대사에서 커서를 제일 좌측으로 이동
  CC_MOVETOEDITORCARETBOTTOM;
End;

End;


=====================================================================================================
*공백 태그 수정사항
기능이 뭐가 다른가 하면.. 관리자님 글 긁어왔습니다...

(번역문) ----------------------------------
안녕하세요





네, 안녕하세요
------------------------------------------


(사용형태) --------------------------------
<Sync Start=0><P Class=KRCC>
안녕하세요
<Sync Start=0><P Class=KRCC>
&nbsp;





<Sync Start=0><P Class=KRCC>
네, 안녕하세요
<Sync Start=0><P Class=KRCC>
&nbsp;
------------------------------------------

제 경우엔 구별이 필요한 부분은 중간에 엔터로 띄워 놓는 편인데요

이런 식으로 대사간의 간격을 보기 편하게 하려고 띄워 놓은 대사의 경우
안녕하세요의 바로 밑에서 클리어 태그를 찍으면

네, 안녕하세요 까지 자동으로 커서 이동을 해줍니다.
궁금하신 분은 시험 삼아 사용자 정의 태그나 매크로에 넣고 한번 돌려 보시면 알 겁니다.

자동적으로 판단해서 1~10칸 까지 이동 되게 수정해봤습니다.
10칸 이상 필요하신분은 maxline := CCP_CaretY+10; 숫자 10에 값을 조정 하시면 됩니다.
=====================================================================================================
*시간, 공백 공통 수정사항

대본이 아래처럼 찍혔을때 예전 싱크 방식은 4대사 아래 공백이 없으면 1~4대사 위에까지 싱크를 찍고
싱크를 계속 찍어도 계속 4대사 위에만 싱크 태그가 들어갔는데요
-----------------------------------------------
1대사
2대사
3대사
4대사(아래 공백없음)
-----------------------------------------------
-----------------------------------------------
1대사
2대사
3대사
4대사(아래 공백없음)
-----------------------------------------------
아래 if문
{
If CC_GetLineCount-1 <= CCP_CaretY Then
Begin
CC_InsertLine(CCP_CaretY+1, CRLF);
end;
}


//if문을 넣어서 1~4대사 위에까지는 기본방식으로 찍히고
4대사에서 아래 공백이 없으면 엔터값을 생성해서
4대사 아래로도 계속 싱크 값을 찍을 수 있게 바꿨습니다.

정식 버전과 호환을 위해서 일단 주석처리 됐으니

rc7버전에서 써보실 분은 코드 앞뒤에 { } 만 지워주시면 됩니다.


그리고 싱크가 아래처럼 찍혀있을 때 시간 값만 바꿀 경우
-----------------------------------------------
<Sync Start=0><P Class=KRCC>1대사<BR>1
<Sync Start=100><P Class=KRCC>&nbsp;
<Sync Start=200><P Class=KRCC>2대사<BR>
2
<Sync Start=300><P Class=KRCC>&nbsp;
<Sync Start=400><P Class=KRCC>
3대사<BR>3
<Sync Start=500><P Class=KRCC>
&nbsp;
<Sync Start=600><P Class=KRCC>
4대사<BR>
4
<Sync Start=700><P Class=KRCC>
&nbsp;
<Sync Start=800><P Class=KRCC>5대사<BR>
5<BR>
5
<Sync Start=900><P Class=KRCC>&nbsp;
<Sync Start=1000><P Class=KRCC>6대사<BR>6<BR>6
<Sync Start=1100><P Class=KRCC>&nbsp;
<Sync Start=1200><P Class=KRCC>
7대사<BR>7<BR>7
<Sync Start=1300><P Class=KRCC>
&nbsp;
<Sync Start=1400><P Class=KRCC>
8대사<BR>
8<BR>
8
<Sync Start=1500><P Class=KRCC>
&nbsp;
-----------------------------------------------
If not CC_ISSYNCLINE(CCP_CaretY) Then
begin
CCP_CaretY := CCP_CaretY + 1;
End;
//이 if문을 넣어서 불규칙한 싱크 형태에도 시간 값만 바꾸고 새로 커서가
1칸인지 2칸인지 알아서 좀 더 지능적으로 판단하도록 했습니다.


CP_TopLine := CCP_CaretY - 35; //을 넣어 싱크를 찍을 때 다음 대사들이
좀 넉넉히 보이는 곳에서 편집창이 스크롤 되게 했습니다.
스크롤 제어 부분은 불편하실 분도 있을 거 같아, 일단 주석처리 됐으니 쓰실 분은
//CP_TopLine := 코드 앞에 // 만 지워주시면 됩니다.


CCP_CaretX := 0; //넣어서 싱크를 찍고 다음에 찍을 대사에서 커서를 제일 좌측에 가게 했습니다.

=====================================================================================================

Posted by 투명인간취급
,

관리자입니다.

Kaspersky 의 'Heur.Trojan.Generic' 진단은

Heuristic detection(패턴에 없는 바이러스를 자동으로 찾아내기 위한 기술 http://arrestlove.tistory.com/350, http://wezard4u.tistory.com/1148, http://wezard4u.tistory.com/2575)
로 인한 오진이므로 안심하시고 사용하셔도 좋습니다 ^^; 

(Generic 뒤에 진단명이 붙지 않는 경우 이런 경우가 있습니다.

http://www.viruslist.com/en/search?VN=Heur.Trojan.Generic&referer=kav
링크를 보시면 알게 되시겠지만 이런 바이러스는 존재하지 않습니다.)

이와 같은 경고가 뜨는것은 CC의 KMP 브리지 기능이 프로그램을 원격에서 조정하는것으로
바이러스의 원격 조작과 방식이 비슷할수 있기 때문인것으로 사료됩니다. 


https://www.virustotal.com/ko/file/f0edd747fab15359857cbc40e4b8f309eab55281f1ccbc1540146cc68229c6b8/analysis/1427787014/


https://www.virustotal.com/ko/file/f956874f71f9b3ea77ccb9f2fd350cc3aeeef9d311479d5f82a76d535a11b6c7/analysis/1427787167/


NS는 2001년도부터 모든 개발 환경, 프로세스에서 최신 버전의 V3및를 통한 정밀 검사를 항상 수행하고 있습니다 ^^;
추가정보
2010년 부터는 Kaspersky, V3, 모두에서 점검을 수행하고 있습니다.
2011년 부터는 Kaspersky, MSSE, V3 에서 진단을 수행하고 있습니다.

2012년 부터는 MSSE, V3 에서 진단을 수행하고 있습니다. (KAV는 하도 바이러스로 간주하는게 열받아서 서비스 중지 했습니다 하하 오탐 처리도 안받고 -_-)


제가 모든 백신을 설치해서 확인하고 오진 신고 할 수도 없으니

쓰시는 백신에서 만약 검출된다면 오진 신고 부탁합니다.


이래도 불안하시다면 다른 자막프로그램 쓰시면 됩니다.

http://mcmx.tistory.com/130 자막제작프로그램은 많습니다.



KMPBridge 오진 해결


PS: 카스퍼스키 오진을 해결하니 이제 다른 백신 오진이 문제네...

Posted by 투명인간취급
,