예 요번에는 싱크가 있는 줄만 지우는 매크로입니다.
최대한 간단하게 만든거라서 좀 부족하긴 합니다만.. 대부분의 자막에서는 잘 동작할것 같습니다.
핵심은 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]) = ' ' 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; |