├── .gitignore ├── AboutFormUnit.dfm ├── AboutFormUnit.pas ├── BgThreadTaskUnit.pas ├── Copying.txt ├── CursorManager.pas ├── DelayFormUnit.dfm ├── DelayFormUnit.pas ├── DetachedVideoFormUnit.dfm ├── DetachedVideoFormUnit.pas ├── Diff.pas ├── DiffSubsFormUnit.dfm ├── DiffSubsFormUnit.pas ├── DirectVobsubInterface.pas ├── DynamicPageProcessorUnit.pas ├── ErrorReportFormUnit.dfm ├── ErrorReportFormUnit.pas ├── FLVFile.pas ├── FileReaderUnit.pas ├── FindFormUnit.dfm ├── FindFormUnit.pas ├── Global.inc ├── GlobalUnit.pas ├── GotoFormUnit.dfm ├── GotoFormUnit.pas ├── HashUnit.pas ├── JavaScriptPluginUnit.pas ├── LavAudioSettingsInterface.pas ├── LavSplitterSettingsInterface.pas ├── LavVideoSettingsInterface.pas ├── LibHunspellUnit.pas ├── LogWindowFormUnit.dfm ├── LogWindowFormUnit.pas ├── LogWriterIntf.pas ├── MP4File.pas ├── MRUListUnit.pas ├── MatroskaHelper.pas ├── MediaInfoDLL.pas ├── MediaInfoLib ├── Project │ └── Delphi │ │ ├── Example │ │ ├── HowToUse_Dll.bdsproj │ │ ├── HowToUse_Dll.dof │ │ ├── HowToUse_Dll.dpr │ │ ├── HowToUse_Dll.exe │ │ ├── HowToUse_Dll.res │ │ ├── HowToUse_Dll_.dfm │ │ ├── HowToUse_Dll_.pas │ │ └── MediaInfo.dll │ │ └── MediaInfoLib_Delphi.bdsgroup └── Source │ └── MediaInfoDLL │ └── MediaInfoDLL.pas ├── MiniScrollBarUnit.pas ├── MiscToolsUnit.pas ├── PageProcessorUnit.pas ├── PeakCreationProgressFormUnit.dfm ├── PeakCreationProgressFormUnit.pas ├── PopupTrackbarUnit.pas ├── PreferencesFormUnit.dfm ├── PreferencesFormUnit.pas ├── ProjectUnit.dfm ├── ProjectUnit.pas ├── README.md ├── Readme_Sources.txt ├── Renderer.pas ├── Resources ├── CheckError.bmp ├── Close.bmp ├── Delay.bmp ├── Doc.ico ├── Doc16.png ├── Doc16.psd ├── Doc16_b.png ├── Doc32.png ├── Doc32.psd ├── Doc32_b.png ├── Doc48.png ├── Doc48.psd ├── Doc48_b.png ├── Doc_b.ico ├── EmptyDoc.ico ├── EmptyDoc16.png ├── EmptyDoc32.png ├── EmptyDoc48.png ├── EmptyDocFull.ico ├── ErrorChecking.bmp ├── Exit.bmp ├── Find.bmp ├── FindNext.bmp ├── Goto.bmp ├── Help.bmp ├── IDEA.BMP ├── InsertTextFile.bmp ├── Loop.bmp ├── LoopEnd.bmp ├── LoopStart.bmp ├── Move All Left1.bmp ├── Move All Right1.bmp ├── Move Left.bmp ├── Move Right.bmp ├── New.bmp ├── Next.bmp ├── Open.bmp ├── Pause.bmp ├── Play.bmp ├── PlayEnd.bmp ├── PlayStart.bmp ├── PlayToEnd.bmp ├── Preferences.bmp ├── Previous.bmp ├── ProjectProp.bmp ├── RT-DelPoS.bmp ├── RT-Reset.bmp ├── RT-SetPoS.bmp ├── Redo.bmp ├── Report.bmp ├── Save.bmp ├── SaveAll.bmp ├── SaveAs.bmp ├── SceneChange.psd ├── ShowCursorFrame.bmp ├── ShowStartFrame.bmp ├── ShowStopFrame.bmp ├── ShowVideo.bmp ├── Slack.bmp ├── Stop.bmp ├── Thumbs.db ├── Undo.bmp ├── VSS-Subtitle.ico ├── VSS.ico ├── Web.bmp ├── ZoomAll.bmp ├── ZoomAll2.bmp ├── ZoomIn.bmp ├── ZoomIn2.bmp ├── ZoomOut.bmp ├── ZoomOut2.bmp ├── ZoomSel.bmp ├── ZoomSel2.bmp ├── ZoomVertical.bmp ├── ZoomVertical2.bmp ├── ZoomVertical2_b.bmp ├── _CompileRes.bat ├── bold.bmp ├── bookmark-new.bmp ├── color.bmp ├── dictionary.bmp ├── favicon.ico ├── format-indent-less.bmp ├── format-indent-more.bmp ├── gears_settings_utilities_execute-16.bmp ├── githhub.ico ├── go-first.bmp ├── go-last.bmp ├── help-browser.bmp ├── help │ ├── Mouse.psd │ ├── MouseMini.psd │ ├── SSDetailsPage.psd │ ├── SSExtractWAV.psd │ ├── SSHomePage.psd │ ├── SSMainDialog.psd │ ├── SSMainDialog2.psd │ └── SSNewProject.psd ├── ico16.png ├── ico16.psd ├── ico24.psd ├── ico32.psd ├── ico64.png ├── ico64.psd ├── icons.png ├── italic.bmp ├── itasa.bmp ├── mkv.bmp ├── mkv.ico ├── noicon.bmp ├── resources.RES ├── resources.rc ├── size.bmp ├── tab-new.bmp ├── thesaurus.bmp ├── underline.bmp └── vss.png ├── ResynchToolFormUnit.dfm ├── ResynchToolFormUnit.pas ├── SRTParserUnit.pas ├── SSAParserUnit.pas ├── SceneChangeUnit.pas ├── ServerUnit.pas ├── SilentZoneFormUnit.dfm ├── SilentZoneFormUnit.pas ├── SourceFileOperationCancel.dfm ├── SourceFileOperationCancel.pas ├── SpellCheckFormUnit.dfm ├── SpellCheckFormUnit.pas ├── StyleFormUnit.dfm ├── StyleFormUnit.pas ├── SubStructUnit.pas ├── SubtitleModel.pas ├── SubtitleTimingFormUnit.dfm ├── SubtitleTimingFormUnit.pas ├── SuggestionFormUnit.dfm ├── SuggestionFormUnit.pas ├── ThirdParty ├── DSiWin32.pas ├── DeCAL │ ├── DeCAL.pas │ └── mwFixedRecSort.pas ├── DirectX-2012 │ ├── D3DX8.pas │ ├── D3DX9.pas │ ├── DX7toDX8.pas │ ├── DXErr9.pas │ ├── DXFile.pas │ ├── DXTypes.pas │ ├── Direct3D.pas │ ├── Direct3D8.pas │ ├── Direct3D9.pas │ ├── DirectDraw.pas │ ├── DirectInput.pas │ ├── DirectMusic.pas │ ├── DirectPlay8.pas │ ├── DirectSetup.pas │ ├── DirectShow9.pas │ ├── DirectSound.pas │ ├── DirectX.inc │ ├── DxDiag.pas │ ├── Jedi.inc │ ├── X3DAudio.pas │ ├── XInput.pas │ ├── dxerr8.pas │ └── xact.pas ├── EZCrypt.pas ├── FastMM │ ├── FastMM4.pas │ ├── FastMM4Messages.pas │ ├── FastMM4Options.inc │ ├── FastMMUsageTracker.dfm │ └── FastMMUsageTracker.pas ├── FastcodePatch.pas ├── KAZip │ ├── KAZip.dcr │ ├── KAZip.pas │ ├── KAZipListView.pas │ ├── KAZipListViewRC.RES │ ├── KAZipListViewRC.rc │ └── KAZipTreeView.pas ├── MD5.pas ├── RGBHSLColorUnit.pas ├── RegExpr.pas ├── RtlVclOptimize.pas ├── SevenZipVCL.pas ├── Synapse │ ├── blcksock.pas │ ├── httpsend.pas │ ├── sswin32.inc │ ├── synachar.pas │ ├── synacode.pas │ ├── synafpc.pas │ ├── synaicnv.pas │ ├── synaip.pas │ ├── synautil.pas │ └── synsock.pas ├── TntIniFiles.pas ├── TntIniFilesEx.pas ├── TntNativeHintWindow.pas ├── VCLFixPack.pas ├── VfW.pas ├── WinSock2 │ ├── WinSock2.pas │ ├── info.txt │ ├── svcguid.pas │ ├── ws2atm.inc │ ├── ws2tcpip.inc │ ├── wsipx.inc │ ├── wsnetbs.inc │ └── wsnwlink.inc ├── jcl │ ├── ExceptDlg.dfm │ └── ExceptDlg.pas ├── jsbridge │ ├── delphi.inc │ ├── js15decl.pas │ ├── jsbridge.pas │ ├── jsbridge_pvt.pas │ ├── jsconfig.inc │ ├── jsdebugger_win.dfm │ ├── jsdebugger_win.pas │ ├── jsintf.pas │ ├── jsintf_bridge.pas │ ├── namedarray.pas │ ├── ptrarray.pas │ └── readme.txt ├── makevssportable.sln ├── makevssportable │ ├── ICSharpCode.SharpZipLib.dll │ ├── Program.cs │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ ├── Resources.resx │ │ ├── Settings.Designer.cs │ │ └── Settings.settings │ ├── Resources │ │ ├── Thumbs.db │ │ └── test_vss.png │ ├── app.config │ ├── frmAbout.Designer.cs │ ├── frmAbout.cs │ ├── frmAbout.resx │ ├── frmMain.Designer.cs │ ├── frmMain.cs │ ├── frmMain.resx │ ├── icon.ico │ ├── makevssportable.csproj │ └── makevssportable.csproj.user ├── richole.pas ├── uLkJSON.pas └── vsfilter │ ├── Icon_147.ico │ ├── License.txt │ ├── VSS_Custom_VSFilter.diff │ └── changes.txt ├── TntRichEditCustomUndoUnit.pas ├── TranslateFormUnit.dfm ├── TranslateFormUnit.pas ├── UndoableSubTaskUnit.pas ├── UndoableTaskUnit.pas ├── VSSClipboardUnit.pas ├── VSSProjectGroup.bpg ├── VerticalScalingFormUnit.dfm ├── VerticalScalingFormUnit.pas ├── VistaAltFixD7 ├── VistaAltFixD7.dof ├── VistaAltFixD7.dpk ├── VistaAltFixD7.res └── VistaAltFixUnit.pas ├── VisualSubSync.dof ├── VisualSubSync.dpr ├── VisualSubSync.nsi ├── VisualSubSync.res ├── VisualSubSyncEnh.dof ├── VisualSubSyncEnh.dpr ├── VisualSubSyncEnh.res ├── WAVDisplayerUnit.pas ├── WAVExtractFormUnit.dfm ├── WAVExtractFormUnit.pas ├── WAVFileUnit.pas ├── WavWriter ├── CircBuff.h ├── IWavWriter.h ├── WAVFile.cpp ├── WAVFile.h ├── WavWriter.cpp ├── WavWriter.def ├── WavWriter.dsp ├── WavWriter.dsw ├── WavWriter.h ├── WavWriter.rc ├── WavWriterUIDs.h └── resource.h ├── clean.bat ├── dcu └── Delphi compiled unit folder.txt ├── dunit ├── JavaScriptPluginUnitTests.pas ├── MiscToolsUnitTests.pas ├── SubtitleModelTests.pas ├── VisualSubSyncTests.dof ├── VisualSubSyncTests.dpr ├── VisualSubSyncTests.res └── dunit.ini ├── main.dfm ├── main.pas ├── samples └── UnicodeSample.srt ├── tom_TLB.pas └── vss-innosetup ├── VisualSubSyncEnh.iss ├── jsplugin ├── common │ ├── itasa.js │ └── tools.js ├── duration.js ├── flashing.js ├── general │ ├── action_itasa.js │ ├── action_nixxo.js │ ├── action_quick_stats.js │ └── general_plugin.js ├── greek_typo.js ├── itasa_typos_kickaha.js ├── itasa_zplit_kickaha.js ├── overlapping.js ├── readme.txt ├── speed.js ├── too_long_line.js ├── too_many_lines.js └── un-closed_tags.js └── vss-innosetup.zip /.gitignore: -------------------------------------------------------------------------------- 1 | # Uncomment these types if you want even more clean repository. But be careful. 2 | # It can make harm to an existing project source. Read explanations below. 3 | # 4 | # Resource files are binaries containing manifest, project icon and version info. 5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. 6 | #*.res 7 | # 8 | # Type library file (binary). In old Delphi versions it should be stored. 9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored. 10 | #*.tlb 11 | # 12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7. 13 | # Uncomment this if you are not using diagrams or use newer Delphi version. 14 | #*.ddp 15 | # 16 | # Visual LiveBindings file. Added in Delphi XE2. 17 | # Uncomment this if you are not using LiveBindings Designer. 18 | #*.vlb 19 | # 20 | # Deployment Manager configuration file for your project. Added in Delphi XE2. 21 | # Uncomment this if it is not mobile development and you do not use remote debug feature. 22 | #*.deployproj 23 | # 24 | # C++ object files produced when C/C++ Output file generation is configured. 25 | # Uncomment this if you are not using external objects (zlib library for example). 26 | #*.obj 27 | # 28 | 29 | # Delphi compiler-generated binaries (safe to delete) 30 | #*.exe 31 | #*.dll 32 | *.bpl 33 | *.bpi 34 | *.dcp 35 | *.so 36 | *.apk 37 | *.drc 38 | *.map 39 | *.dres 40 | *.rsm 41 | *.tds 42 | *.dcu 43 | *.lib 44 | *.a 45 | *.o 46 | *.ocx 47 | 48 | # Delphi autogenerated files (duplicated info) 49 | *.cfg 50 | *.hpp 51 | *Resource.rc 52 | *.ddp 53 | 54 | # Delphi local files (user-specific info) 55 | *.local 56 | *.identcache 57 | *.projdata 58 | *.tvsconfig 59 | *.dsk 60 | *.dex 61 | 62 | # Delphi history and backups 63 | __history/ 64 | __recovery/ 65 | *.~* 66 | 67 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi) 68 | *.stat -------------------------------------------------------------------------------- /AboutFormUnit.pas: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2003-2009 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | 22 | unit AboutFormUnit; 23 | 24 | interface 25 | 26 | uses 27 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 28 | Dialogs, StdCtrls, TntStdCtrls, ExtCtrls; 29 | 30 | type 31 | TAboutForm = class(TForm) 32 | TntLabel1: TTntLabel; 33 | Bevel1: TBevel; 34 | bttOk: TTntButton; 35 | TntLabel2: TTntLabel; 36 | TntLabel3: TTntLabel; 37 | LabelVersion: TTntLabel; 38 | Bevel2: TBevel; 39 | TntLabel4: TTntLabel; 40 | lblVTV: TTntLabel; 41 | TntLabel6: TTntLabel; 42 | lblJS: TTntLabel; 43 | TntLabel8: TTntLabel; 44 | TntLabel5: TTntLabel; 45 | TntLabel9: TTntLabel; 46 | TntLabel11: TTntLabel; 47 | TntLabel10: TTntLabel; 48 | TntLabel12: TTntLabel; 49 | TntLabel13: TTntLabel; 50 | TntLabel14: TTntLabel; 51 | TntLabel15: TTntLabel; 52 | TntLabel16: TTntLabel; 53 | TntLabel17: TTntLabel; 54 | Label19: TTntLabel; 55 | TntLabel18: TTntLabel; 56 | TntLabel19: TTntLabel; 57 | TntLabel7: TTntLabel; 58 | procedure bttOkClick(Sender: TObject); 59 | procedure FormCreate(Sender: TObject); 60 | procedure TntLabel3Click(Sender: TObject); 61 | procedure TntLabel1Click(Sender: TObject); 62 | procedure panelCrashTestClick(Sender: TObject); 63 | procedure FormKeyDown(Sender: TObject; var Key: Word; 64 | Shift: TShiftState); 65 | private 66 | { Private declarations } 67 | public 68 | { Public declarations } 69 | end; 70 | 71 | 72 | implementation 73 | 74 | uses ShellAPI, MiscToolsUnit, GlobalUnit, js15decl, VirtualTrees; 75 | 76 | {$R *.dfm} 77 | 78 | procedure TAboutForm.bttOkClick(Sender: TObject); 79 | begin 80 | ModalResult := mrOK; 81 | end; 82 | 83 | procedure TAboutForm.FormCreate(Sender: TObject); 84 | begin 85 | LabelVersion.Caption := 'Version : ' + g_ApplicationVersion.VersionString; 86 | lblVTV.Hint := VTVersion; 87 | lblVTV.ShowHint := True; 88 | lblJS.Hint := JS_GetImplementationVersion; 89 | lblJS.ShowHint := True; 90 | end; 91 | 92 | procedure TAboutForm.TntLabel3Click(Sender: TObject); 93 | var s : string; 94 | begin 95 | s := 'mailto:' + 96 | 'christophe.paris' + 97 | '@free.fr?' + 98 | 'subject=' + 99 | ApplicationName + 100 | ' ' + 101 | LabelVersion.Caption; 102 | ShellExecute(Handle, 'open', PAnsiChar(s), '', '', SW_SHOWNORMAL); 103 | end; 104 | 105 | procedure TAboutForm.TntLabel1Click(Sender: TObject); 106 | var s : string; 107 | begin 108 | if Sender = TntLabel1 then 109 | s := 'http://www.visualsubsync.org' 110 | else 111 | s := TTntLabel(Sender).Caption; 112 | ShellExecute(Handle, 'open', PAnsiChar(s), '', '', SW_SHOWNORMAL); 113 | end; 114 | 115 | procedure TAboutForm.panelCrashTestClick(Sender: TObject); 116 | var DummyPointer : PInteger; 117 | begin 118 | // To test the exception hook 119 | DummyPointer := nil; 120 | DummyPointer^ := 0; 121 | end; 122 | 123 | procedure TAboutForm.FormKeyDown(Sender: TObject; var Key: Word; 124 | Shift: TShiftState); 125 | begin 126 | if (Key = VK_ESCAPE) then 127 | begin 128 | Close; 129 | end; 130 | end; 131 | 132 | end. 133 | -------------------------------------------------------------------------------- /BgThreadTaskUnit.pas: -------------------------------------------------------------------------------- 1 | unit BgThreadTaskUnit; 2 | 3 | interface 4 | 5 | uses Classes; 6 | 7 | type 8 | TBgThreadTask = class(TThread) 9 | private 10 | FOnExecute : TNotifyEvent; 11 | FParam : Integer; 12 | public 13 | constructor Create(CreateSuspended : Boolean; ThreadPriority : TThreadPriority); overload; 14 | procedure Execute; override; 15 | property OnExecute : TNotifyEvent read FOnExecute write FOnExecute; 16 | property Param : Integer read FParam write FParam; 17 | end; 18 | 19 | implementation 20 | 21 | constructor TBgThreadTask.Create(CreateSuspended : Boolean; ThreadPriority : TThreadPriority); 22 | begin 23 | inherited Create(CreateSuspended); 24 | Self.Priority := ThreadPriority; 25 | end; 26 | 27 | procedure TBgThreadTask.Execute; 28 | begin 29 | try 30 | if Assigned(FOnExecute) then 31 | FOnExecute(Self); 32 | finally 33 | end; 34 | end; 35 | 36 | 37 | end. 38 | -------------------------------------------------------------------------------- /CursorManager.pas: -------------------------------------------------------------------------------- 1 | unit CursorManager; 2 | 3 | interface 4 | 5 | uses Controls; 6 | 7 | type 8 | ICursorManager = interface 9 | ['{333A50A2-A6CE-447E-BC20-83BAE8948054}'] 10 | end; 11 | 12 | TCursorManager = class(TInterfacedObject, ICursorManager) 13 | private 14 | FOldCursor : TCursor; 15 | public 16 | constructor Create; overload; 17 | constructor Create(NewCursor : TCursor); overload; 18 | destructor Destroy; override; 19 | end; 20 | 21 | implementation 22 | 23 | uses Forms; 24 | 25 | constructor TCursorManager.Create; 26 | begin 27 | inherited Create; 28 | FOldCursor := Screen.Cursor; 29 | end; 30 | 31 | constructor TCursorManager.Create(NewCursor : TCursor); 32 | begin 33 | inherited Create; 34 | FOldCursor := Screen.Cursor; 35 | Screen.Cursor := NewCursor; 36 | end; 37 | 38 | destructor TCursorManager.Destroy; 39 | begin 40 | Screen.Cursor := FOldCursor; 41 | inherited; 42 | end; 43 | 44 | end. 45 | -------------------------------------------------------------------------------- /DelayFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object DelayForm: TDelayForm 2 | Left = 378 3 | Top = 223 4 | BorderIcons = [biSystemMenu, biMinimize] 5 | BorderStyle = bsSingle 6 | BorderWidth = 6 7 | Caption = 'Delay' 8 | ClientHeight = 289 9 | ClientWidth = 193 10 | Color = clBtnFace 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Microsoft Sans Serif' 15 | Font.Style = [] 16 | KeyPreview = True 17 | OldCreateOrder = False 18 | Position = poOwnerFormCenter 19 | OnKeyUp = FormKeyUp 20 | PixelsPerInch = 96 21 | TextHeight = 13 22 | object meDelay: TMaskEdit 23 | Left = 0 24 | Top = 52 25 | Width = 193 26 | Height = 21 27 | EditMask = '!99:99:99.999;1;0' 28 | MaxLength = 12 29 | TabOrder = 0 30 | Text = ' : : . ' 31 | end 32 | object rgApplyTo: TTntRadioGroup 33 | Left = 0 34 | Top = 80 35 | Width = 193 36 | Height = 81 37 | Caption = ' Apply to ' 38 | ItemIndex = 0 39 | Items.Strings = ( 40 | 'All subtitles' 41 | 'Selected subtitles' 42 | 'All subtitles from cursor to end') 43 | TabOrder = 1 44 | end 45 | object rgType: TTntRadioGroup 46 | Left = 0 47 | Top = 0 48 | Width = 193 49 | Height = 41 50 | Caption = ' Type : ' 51 | Columns = 2 52 | ItemIndex = 0 53 | Items.Strings = ( 54 | 'Positive (+)' 55 | 'Negative (-)') 56 | TabOrder = 2 57 | end 58 | object bttApply: TTntButton 59 | Left = 8 60 | Top = 264 61 | Width = 81 62 | Height = 25 63 | Caption = 'Apply' 64 | TabOrder = 3 65 | OnClick = bttApplyClick 66 | end 67 | object bttCancel: TTntButton 68 | Left = 104 69 | Top = 264 70 | Width = 83 71 | Height = 25 72 | Caption = 'Cancel' 73 | TabOrder = 4 74 | OnClick = bttCancelClick 75 | end 76 | object rgShift: TTntRadioGroup 77 | Left = 0 78 | Top = 168 79 | Width = 193 80 | Height = 81 81 | Caption = ' Shift ' 82 | ItemIndex = 0 83 | Items.Strings = ( 84 | 'Start and end time' 85 | 'Start time only' 86 | 'End time only') 87 | TabOrder = 5 88 | end 89 | end 90 | -------------------------------------------------------------------------------- /DetachedVideoFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object DetachedVideoForm: TDetachedVideoForm 2 | Left = 487 3 | Top = 263 4 | BorderStyle = bsNone 5 | Caption = 'Video' 6 | ClientHeight = 240 7 | ClientWidth = 320 8 | Color = clBlack 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'Microsoft Sans Serif' 13 | Font.Style = [] 14 | FormStyle = fsStayOnTop 15 | OldCreateOrder = False 16 | PopupMenu = VideoPopupMenu 17 | Position = poDefaultPosOnly 18 | OnDblClick = FormDblClick 19 | PixelsPerInch = 96 20 | TextHeight = 13 21 | object VideoPopupMenu: TTntPopupMenu 22 | OnPopup = VideoPopupMenuPopup 23 | Left = 32 24 | Top = 8 25 | object pmiVideoFullscreen: TTntMenuItem 26 | Caption = 'Fullscreen' 27 | GroupIndex = 1 28 | RadioItem = True 29 | OnClick = pmiVideoFullscreenClick 30 | end 31 | object pmiVideoNormalSize: TTntMenuItem 32 | Caption = 'Normal size' 33 | GroupIndex = 1 34 | RadioItem = True 35 | OnClick = pmiVideoNormalSizeClick 36 | end 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /Diff.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Diff.pas -------------------------------------------------------------------------------- /DiffSubsFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object DiffSubsForm: TDiffSubsForm 2 | Left = 190 3 | Top = 219 4 | Width = 944 5 | Height = 557 6 | BorderIcons = [biSystemMenu] 7 | Caption = 'VisualSubSync Diff file' 8 | Color = clBtnFace 9 | Font.Charset = ANSI_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -12 12 | Font.Name = 'Arial' 13 | Font.Style = [] 14 | Menu = MainMenu 15 | OldCreateOrder = False 16 | Position = poDefault 17 | OnActivate = FormActivate 18 | OnCreate = FormCreate 19 | OnDestroy = FormDestroy 20 | OnResize = FormResize 21 | PixelsPerInch = 96 22 | TextHeight = 15 23 | object Panel1: TPanel 24 | Left = 0 25 | Top = 0 26 | Width = 928 27 | Height = 23 28 | Align = alTop 29 | BevelOuter = bvNone 30 | TabOrder = 0 31 | object lblFile1: TLabel 32 | Left = 0 33 | Top = 5 34 | Width = 33 35 | Height = 15 36 | Caption = ' Text : ' 37 | end 38 | object lblFile2: TLabel 39 | Left = 381 40 | Top = 5 41 | Width = 58 42 | Height = 15 43 | Caption = ' VO/Other: ' 44 | end 45 | end 46 | object StatusBar1: TStatusBar 47 | Left = 0 48 | Top = 479 49 | Width = 928 50 | Height = 19 51 | Panels = < 52 | item 53 | Width = 100 54 | end 55 | item 56 | Width = 100 57 | end 58 | item 59 | Width = 100 60 | end 61 | item 62 | Width = 100 63 | end> 64 | end 65 | object ResultGrid: TStringGrid 66 | Left = 0 67 | Top = 23 68 | Width = 928 69 | Height = 456 70 | Align = alClient 71 | ColCount = 4 72 | DefaultRowHeight = 17 73 | DefaultDrawing = False 74 | FixedCols = 0 75 | RowCount = 1 76 | FixedRows = 0 77 | Font.Charset = ANSI_CHARSET 78 | Font.Color = clWindowText 79 | Font.Height = -12 80 | Font.Name = 'Courier New' 81 | Font.Style = [] 82 | GridLineWidth = 0 83 | Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect] 84 | ParentFont = False 85 | TabOrder = 2 86 | OnDrawCell = ResultGridDrawCell 87 | end 88 | object MainMenu: TMainMenu 89 | Left = 96 90 | Top = 73 91 | object File1: TMenuItem 92 | Caption = '&File' 93 | object Exit1: TTntMenuItem 94 | Caption = 'E&xit' 95 | OnClick = Exit1Click 96 | end 97 | end 98 | object mnuView: TMenuItem 99 | Caption = '&View' 100 | Enabled = False 101 | object PreviousChanges1: TTntMenuItem 102 | Caption = '&Previous Changes' 103 | ShortCut = 16464 104 | OnClick = PreviousChanges1Click 105 | end 106 | object NextChanges1: TTntMenuItem 107 | Caption = '&Next Changes' 108 | ShortCut = 16462 109 | OnClick = NextChanges1Click 110 | end 111 | end 112 | object Options1: TMenuItem 113 | Caption = '&Options' 114 | object mnuIgnoreCase: TMenuItem 115 | Caption = 'Ignore &Case' 116 | OnClick = mnuIgnoreCaseClick 117 | end 118 | object mnuIgnoreWhiteSpace: TMenuItem 119 | Caption = 'Ignore &White Space' 120 | OnClick = mnuIgnoreWhiteSpaceClick 121 | end 122 | end 123 | end 124 | object OpenDialog: TOpenDialog 125 | Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing] 126 | Left = 183 127 | Top = 79 128 | end 129 | end 130 | -------------------------------------------------------------------------------- /ErrorReportFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object ErrorReportForm: TErrorReportForm 2 | Left = 427 3 | Top = 255 4 | Width = 321 5 | Height = 425 6 | BorderStyle = bsSizeToolWin 7 | Caption = 'Error report' 8 | Color = clBtnFace 9 | Constraints.MinHeight = 100 10 | Constraints.MinWidth = 100 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Microsoft Sans Serif' 15 | Font.Style = [] 16 | FormStyle = fsStayOnTop 17 | KeyPreview = True 18 | Menu = TntMainMenu1 19 | OldCreateOrder = False 20 | OnCreate = FormCreate 21 | OnDestroy = FormDestroy 22 | OnKeyDown = FormKeyDown 23 | PixelsPerInch = 96 24 | TextHeight = 13 25 | object vtvErrorList: TVirtualDrawTree 26 | Left = 0 27 | Top = 0 28 | Width = 305 29 | Height = 345 30 | Align = alClient 31 | Header.AutoSizeIndex = 0 32 | Header.Font.Charset = DEFAULT_CHARSET 33 | Header.Font.Color = clWindowText 34 | Header.Font.Height = -11 35 | Header.Font.Name = 'Microsoft Sans Serif' 36 | Header.Font.Style = [] 37 | Header.MainColumn = -1 38 | Header.Options = [hoColumnResize, hoDrag] 39 | PopupMenu = ErrorListPopupMenu 40 | TabOrder = 0 41 | TreeOptions.SelectionOptions = [toMultiSelect] 42 | OnDrawNode = vtvErrorListDrawNode 43 | OnFocusChanged = vtvErrorListFocusChanged 44 | Columns = <> 45 | end 46 | object TntStatusBar1: TTntStatusBar 47 | Left = 0 48 | Top = 345 49 | Width = 305 50 | Height = 21 51 | Panels = < 52 | item 53 | Width = 50 54 | end> 55 | end 56 | object ErrorListPopupMenu: TTntPopupMenu 57 | OnPopup = ErrorListPopupMenuPopup 58 | Left = 16 59 | Top = 48 60 | object pmiFixError: TTntMenuItem 61 | Action = MainForm.ActionFixSelectedErrors 62 | end 63 | object pmiFixAllXXX: TTntMenuItem 64 | Caption = 'Fix all errors of same type (color)' 65 | OnClick = pmiFixAllXXXClick 66 | end 67 | object pmiFixAllYYY: TTntMenuItem 68 | Caption = 'Fix all errors with same error msg' 69 | OnClick = pmiFixAllYYYClick 70 | end 71 | object N3: TTntMenuItem 72 | Caption = '-' 73 | end 74 | object pmiSelectAllXXX: TTntMenuItem 75 | Caption = 'Select all errors of same type (color)' 76 | OnClick = pmiSelectAllXXXClick 77 | end 78 | object pmiSelectAllYYY: TTntMenuItem 79 | Caption = 'Select all errors with same error msg' 80 | OnClick = pmiSelectAllYYYClick 81 | end 82 | object N5: TTntMenuItem 83 | Caption = '-' 84 | end 85 | object miClearAndSkip: TTntMenuItem 86 | Caption = 'Clear && Forget' 87 | OnClick = miClearAndSkipClick 88 | end 89 | object N4: TTntMenuItem 90 | Caption = '-' 91 | end 92 | object miClear: TTntMenuItem 93 | Caption = 'Clear' 94 | OnClick = miClearClick 95 | end 96 | object pmiClearAllYYY: TTntMenuItem 97 | Caption = 'Clear all errors with different error msg' 98 | OnClick = pmiClearAllYYYClick 99 | end 100 | object pmiClearAllXXX: TTntMenuItem 101 | Caption = 'Clear all errors with same error msg' 102 | OnClick = pmiClearAllXXXClick 103 | end 104 | object pmiClearAll: TTntMenuItem 105 | Caption = 'Clear all' 106 | OnClick = pmiClearAllClick 107 | end 108 | end 109 | object TntMainMenu1: TTntMainMenu 110 | Left = 16 111 | Top = 16 112 | object miFile: TTntMenuItem 113 | Caption = 'File' 114 | SubMenuImages = MainForm.ImageList1 115 | object miRecheck: TTntMenuItem 116 | Action = MainForm.ActionCheckErrors 117 | end 118 | object miClearAll: TTntMenuItem 119 | Caption = 'Clear all' 120 | OnClick = miClearAllClick 121 | end 122 | object miExportToHTML: TTntMenuItem 123 | Caption = 'Export to HTML...' 124 | OnClick = miExportToHTMLClick 125 | end 126 | object N2: TTntMenuItem 127 | Caption = '-' 128 | end 129 | object miPreferences: TTntMenuItem 130 | Action = MainForm.ActionErrorPreferences 131 | end 132 | object N1: TTntMenuItem 133 | Caption = '-' 134 | end 135 | object miClose: TTntMenuItem 136 | Caption = 'Close' 137 | OnClick = miCloseClick 138 | end 139 | end 140 | end 141 | object TntSaveDialog1: TTntSaveDialog 142 | Left = 16 143 | Top = 80 144 | end 145 | end 146 | -------------------------------------------------------------------------------- /FLVFile.pas: -------------------------------------------------------------------------------- 1 | {FLV_parser 2 | 3 | this is a basic file parser that only extract keyframes. 4 | 5 | written by nixxo 6 | c.nixxo@hush.ai 7 | } 8 | 9 | unit FLVFile; 10 | 11 | interface 12 | 13 | uses Windows, SysUtils, Classes, StrUtils; 14 | 15 | type 16 | FLV = class 17 | private 18 | flv_file : THandle; 19 | flv_fp : Integer; 20 | 21 | flv_header : array[1..9] of byte; 22 | flv_tag : array[1..11] of byte; 23 | type_v:Boolean; 24 | tag_time : Integer; 25 | flv_next : Integer; 26 | 27 | procedure parseTag; 28 | function isKeyframe : Boolean; 29 | public 30 | constructor Create(filename : WideString); 31 | procedure Free; 32 | function isValid : Boolean; 33 | function nextKeyframe : Integer; 34 | end; 35 | 36 | implementation 37 | 38 | constructor FLV.Create(filename : WideString); 39 | begin 40 | flv_file := CreateFileW(PWideChar(filename), GENERIC_READ, 41 | FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); 42 | end; 43 | 44 | procedure FLV.Free; 45 | begin 46 | if (flv_file <> INVALID_HANDLE_VALUE) then 47 | CloseHandle(flv_file); 48 | flv_file := INVALID_HANDLE_VALUE; 49 | end; 50 | 51 | function FLV.isValid : Boolean; 52 | var 53 | dwNumberOfBytesRead : DWORD; 54 | begin 55 | Result:=False; 56 | if (flv_file <> INVALID_HANDLE_VALUE) then 57 | begin 58 | SetFilePointer(flv_file, 0, nil, 0); 59 | if not ReadFile(flv_file, flv_header, 9, dwNumberOfBytesRead, nil) then 60 | Exit; 61 | if (dwNumberOfBytesRead = 9) then 62 | begin 63 | if (flv_header[1] = 70) and 64 | (flv_header[2] = 76) and 65 | (flv_header[3] = 86) then 66 | Result:=True; 67 | flv_next := 13; 68 | end; 69 | end; 70 | end; 71 | 72 | procedure FLV.parseTag; 73 | var bodylength : Integer; 74 | dwNumberOfBytesRead : DWORD; 75 | begin 76 | flv_next :=-1; 77 | if (flv_file <> INVALID_HANDLE_VALUE) then 78 | begin 79 | SetFilePointer(flv_file, flv_fp, nil, 0); 80 | if not ReadFile(flv_file, flv_tag, 11, dwNumberOfBytesRead, nil) then 81 | Exit; 82 | if (dwNumberOfBytesRead = 11) then 83 | begin 84 | type_v:=False; 85 | if flv_tag[1] = 9 then 86 | begin 87 | type_v := True; 88 | tag_time := flv_tag[5]; 89 | tag_time := tag_time*256 + flv_tag[6]; 90 | tag_time := tag_time*256 + flv_tag[7]; 91 | end; 92 | 93 | bodylength := flv_tag[2]; 94 | bodylength := bodylength*256 + flv_tag[3]; 95 | bodylength := bodylength*256 + flv_tag[4]; 96 | flv_next := flv_fp+11+bodylength+4; 97 | end; 98 | end; 99 | end; 100 | 101 | function FLV.isKeyframe : Boolean; 102 | var temp : Byte; 103 | dwNumberOfBytesRead : DWORD; 104 | begin 105 | Result := False; 106 | if (flv_file <> INVALID_HANDLE_VALUE) then 107 | begin 108 | SetFilePointer(flv_file, flv_fp+11, nil, 0); 109 | if not ReadFile(flv_file, temp, 1, dwNumberOfBytesRead, nil) then 110 | Exit; 111 | if (dwNumberOfBytesRead = 1) then 112 | begin 113 | temp := (temp and $00FF) shr 4; 114 | if temp = 1 then 115 | Result:= True; 116 | end; 117 | end; 118 | end; 119 | 120 | function FLV.nextKeyframe : Integer; 121 | begin 122 | flv_fp := flv_next; 123 | parseTag; 124 | if type_v then 125 | if isKeyframe then 126 | begin 127 | Result := tag_time; 128 | Exit; 129 | end; 130 | if flv_next > 0 then 131 | Result := nextKeyframe 132 | else 133 | Result := -1; 134 | end; 135 | 136 | end. 137 | -------------------------------------------------------------------------------- /FileReaderUnit.pas: -------------------------------------------------------------------------------- 1 | unit FileReaderUnit; 2 | 3 | interface 4 | 5 | uses Classes; 6 | 7 | type 8 | TFileReader = class 9 | private 10 | FFileHandle : THandle; 11 | public 12 | constructor Create(const Filename : WideString); 13 | destructor Destroy; override; 14 | function Read(var Buffer; const Count: Longint) : Longint; 15 | function Seek(const Offset: Int64; const Origin: TSeekOrigin): Int64; 16 | function Tell : Int64; 17 | function Size : Int64; 18 | end; 19 | 20 | implementation 21 | 22 | uses Windows, SysUtils; 23 | 24 | // ============================================================================= 25 | 26 | 27 | constructor TFileReader.Create(const Filename : WideString); 28 | begin 29 | FFileHandle := CreateFileW(PWideChar(Filename), GENERIC_READ, 30 | FILE_SHARE_READ+FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); 31 | 32 | if FFileHandle = INVALID_HANDLE_VALUE then 33 | raise Exception.CreateFmt('Can''t open file %s',[Filename]); 34 | end; 35 | 36 | // ----------------------------------------------------------------------------- 37 | 38 | function TFileReader.Read(var Buffer; const Count: Longint) : Longint; 39 | var dwNumberOfBytesRead : DWORD; 40 | begin 41 | Result := 0; 42 | dwNumberOfBytesRead := 0; 43 | if not ReadFile(FFileHandle, Buffer, Count, dwNumberOfBytesRead, nil) then 44 | Exit; 45 | Result := dwNumberOfBytesRead; 46 | end; 47 | 48 | // ----------------------------------------------------------------------------- 49 | 50 | function TFileReader.Seek(const Offset: Int64; const Origin: TSeekOrigin): Int64; 51 | var 52 | LIOffset : LARGE_INTEGER; 53 | begin 54 | LIOffset.QuadPart := Offset; 55 | LIOffset.LowPart := SetFilePointer (FFileHandle, LIOffset.LowPart, 56 | @LIOffset.HighPart, Ord(Origin)); 57 | if ((LIOffset.LowPart = INVALID_HANDLE_VALUE) and (GetLastError <> NO_ERROR)) then 58 | LIOffset.QuadPart := -1; 59 | Result := LIOffset.QuadPart; 60 | end; 61 | 62 | // ----------------------------------------------------------------------------- 63 | 64 | function TFileReader.Tell : Int64; 65 | var 66 | LIOffset : LARGE_INTEGER; 67 | begin 68 | LIOffset.QuadPart := 0; 69 | LIOffset.LowPart := SetFilePointer (FFileHandle, 0, @LIOffset.HighPart, FILE_CURRENT); 70 | if ((LIOffset.LowPart = INVALID_HANDLE_VALUE) and (GetLastError <> NO_ERROR)) then 71 | LIOffset.QuadPart := -1; 72 | Result := LIOffset.QuadPart; 73 | end; 74 | 75 | // ----------------------------------------------------------------------------- 76 | 77 | function TFileReader.Size : Int64; 78 | var 79 | FileSize: array[0..1] of Cardinal absolute Result; 80 | begin 81 | Result := -1; 82 | FileSize[0] := GetFileSize(FFileHandle, @FileSize[1]); 83 | if (FileSize[0] = INVALID_HANDLE_VALUE) then 84 | Result := -1; 85 | end; 86 | 87 | // ----------------------------------------------------------------------------- 88 | 89 | destructor TFileReader.Destroy; 90 | begin 91 | if (FFileHandle <> INVALID_HANDLE_VALUE) then 92 | CloseHandle(FFileHandle); 93 | FFileHandle := INVALID_HANDLE_VALUE; 94 | end; 95 | 96 | // ============================================================================= 97 | 98 | 99 | end. 100 | -------------------------------------------------------------------------------- /FindFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object FindForm: TFindForm 2 | Left = 253 3 | Top = 448 4 | AutoSize = True 5 | BorderIcons = [biSystemMenu, biMinimize] 6 | BorderStyle = bsSingle 7 | BorderWidth = 4 8 | Caption = 'Find' 9 | ClientHeight = 185 10 | ClientWidth = 339 11 | Color = clBtnFace 12 | Constraints.MinWidth = 350 13 | Font.Charset = DEFAULT_CHARSET 14 | Font.Color = clWindowText 15 | Font.Height = -11 16 | Font.Name = 'Microsoft Sans Serif' 17 | Font.Style = [] 18 | FormStyle = fsStayOnTop 19 | KeyPreview = True 20 | OldCreateOrder = False 21 | Position = poDefault 22 | OnActivate = FormActivate 23 | OnClose = FormClose 24 | OnKeyUp = FormKeyUp 25 | OnShow = FormShow 26 | PixelsPerInch = 96 27 | TextHeight = 13 28 | object TntLabel1: TTntLabel 29 | Left = 0 30 | Top = 4 31 | Width = 23 32 | Height = 13 33 | Caption = 'Find:' 34 | Font.Charset = DEFAULT_CHARSET 35 | Font.Color = clWindowText 36 | Font.Height = -11 37 | Font.Name = 'Microsoft Sans Serif' 38 | Font.Style = [] 39 | ParentFont = False 40 | end 41 | object TntLabel2: TTntLabel 42 | Left = 0 43 | Top = 28 44 | Width = 65 45 | Height = 13 46 | Caption = 'Replace with:' 47 | end 48 | object cbFind: TTntComboBox 49 | Left = 72 50 | Top = 0 51 | Width = 265 52 | Height = 21 53 | ItemHeight = 13 54 | TabOrder = 0 55 | OnChange = cbFindChange 56 | OnKeyDown = cbFindKeyDown 57 | end 58 | object cbReplaceWith: TTntComboBox 59 | Left = 72 60 | Top = 24 61 | Width = 265 62 | Height = 21 63 | ItemHeight = 13 64 | TabOrder = 1 65 | OnKeyDown = cbFindKeyDown 66 | end 67 | object TntGroupBox1: TTntGroupBox 68 | Left = 0 69 | Top = 56 70 | Width = 153 71 | Height = 129 72 | Caption = 'Options' 73 | TabOrder = 2 74 | object chkMatchCase: TTntCheckBox 75 | Left = 8 76 | Top = 24 77 | Width = 97 78 | Height = 17 79 | Caption = 'Case sensitive' 80 | TabOrder = 0 81 | OnClick = chkMatchCaseClick 82 | end 83 | object chkFromCursor: TCheckBox 84 | Left = 8 85 | Top = 40 86 | Width = 81 87 | Height = 17 88 | Caption = 'From cursor' 89 | TabOrder = 1 90 | end 91 | object chkMatchingOnly: TTntCheckBox 92 | Left = 8 93 | Top = 91 94 | Width = 137 95 | Height = 17 96 | Caption = 'Show matching sub only' 97 | TabOrder = 4 98 | OnClick = chkMatchingOnlyClick 99 | end 100 | object chkRegExp: TTntCheckBox 101 | Left = 8 102 | Top = 72 103 | Width = 121 104 | Height = 17 105 | Caption = 'Regular Expression' 106 | TabOrder = 3 107 | OnClick = chkRegExpClick 108 | end 109 | object chkWholeWord: TCheckBox 110 | Left = 8 111 | Top = 56 112 | Width = 97 113 | Height = 17 114 | Caption = 'Whole Word' 115 | TabOrder = 2 116 | end 117 | object chkDisableVOSearch: TTntCheckBox 118 | Left = 7 119 | Top = 109 120 | Width = 137 121 | Height = 17 122 | Caption = 'Disable VO search' 123 | Checked = True 124 | State = cbChecked 125 | TabOrder = 5 126 | OnClick = chkMatchingOnlyClick 127 | end 128 | end 129 | object Panel1: TPanel 130 | Left = 160 131 | Top = 56 132 | Width = 177 133 | Height = 73 134 | BevelOuter = bvNone 135 | TabOrder = 3 136 | object bttFind: TTntButton 137 | Left = 8 138 | Top = 8 139 | Width = 81 140 | Height = 25 141 | Caption = 'Find' 142 | TabOrder = 0 143 | OnClick = bttFindClick 144 | end 145 | object bttReplaceFind: TTntButton 146 | Left = 96 147 | Top = 8 148 | Width = 81 149 | Height = 25 150 | Caption = 'Replace/Find' 151 | Enabled = False 152 | TabOrder = 1 153 | OnClick = bttReplaceFindClick 154 | end 155 | object bttReplace: TTntButton 156 | Left = 8 157 | Top = 38 158 | Width = 81 159 | Height = 25 160 | Caption = 'Replace' 161 | Enabled = False 162 | TabOrder = 2 163 | OnClick = bttReplaceClick 164 | end 165 | object bttReplaceAll: TTntButton 166 | Left = 96 167 | Top = 38 168 | Width = 81 169 | Height = 25 170 | Caption = 'Replace All' 171 | TabOrder = 3 172 | OnClick = bttReplaceAllClick 173 | end 174 | end 175 | object bttClose: TTntButton 176 | Left = 256 177 | Top = 160 178 | Width = 83 179 | Height = 25 180 | Caption = 'Close' 181 | TabOrder = 4 182 | OnClick = bttCloseClick 183 | end 184 | end 185 | -------------------------------------------------------------------------------- /Global.inc: -------------------------------------------------------------------------------- 1 | unit Global; 2 | 3 | const 4 | ApplicationName : string = 'VisualSubSync'; 5 | -------------------------------------------------------------------------------- /GotoFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object GotoForm: TGotoForm 2 | Left = 187 3 | Top = 257 4 | BorderIcons = [biSystemMenu, biMinimize] 5 | BorderStyle = bsSingle 6 | BorderWidth = 4 7 | Caption = 'Go to' 8 | ClientHeight = 121 9 | ClientWidth = 217 10 | Color = clBtnFace 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Microsoft Sans Serif' 15 | Font.Style = [] 16 | KeyPreview = True 17 | OldCreateOrder = False 18 | Position = poOwnerFormCenter 19 | OnActivate = FormActivate 20 | OnKeyDown = FormKeyDown 21 | PixelsPerInch = 96 22 | TextHeight = 13 23 | object Panel1: TPanel 24 | Left = 0 25 | Top = 0 26 | Width = 217 27 | Height = 89 28 | BevelOuter = bvLowered 29 | TabOrder = 0 30 | object rbGotoLine: TTntRadioButton 31 | Left = 16 32 | Top = 18 33 | Width = 57 34 | Height = 17 35 | Caption = 'Line :' 36 | Checked = True 37 | TabOrder = 0 38 | TabStop = True 39 | end 40 | object rbGotoTime: TTntRadioButton 41 | Left = 16 42 | Top = 50 43 | Width = 57 44 | Height = 17 45 | Caption = 'Time :' 46 | TabOrder = 2 47 | end 48 | object EditLine: TEdit 49 | Left = 80 50 | Top = 16 51 | Width = 121 52 | Height = 21 53 | TabOrder = 1 54 | Text = '1' 55 | OnChange = EditLineChange 56 | end 57 | object MaskEditTime: TMaskEdit 58 | Left = 80 59 | Top = 48 60 | Width = 120 61 | Height = 21 62 | EditMask = '!99:99:99.999;1;0' 63 | MaxLength = 12 64 | TabOrder = 3 65 | Text = ' : : . ' 66 | OnChange = MaskEditTimeChange 67 | end 68 | end 69 | object bttGo: TTntButton 70 | Left = 16 71 | Top = 96 72 | Width = 89 73 | Height = 25 74 | Caption = 'Go' 75 | TabOrder = 1 76 | OnClick = bttGoClick 77 | end 78 | object bttCancel: TTntButton 79 | Left = 120 80 | Top = 96 81 | Width = 83 82 | Height = 25 83 | Caption = 'Cancel' 84 | TabOrder = 2 85 | OnClick = bttCancelClick 86 | end 87 | end 88 | -------------------------------------------------------------------------------- /GotoFormUnit.pas: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2003 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | 22 | unit GotoFormUnit; 23 | 24 | interface 25 | 26 | uses 27 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 28 | Dialogs, Mask, StdCtrls, TntStdCtrls, ExtCtrls; 29 | 30 | type 31 | TGotoForm = class(TForm) 32 | Panel1: TPanel; 33 | bttGo: TTntButton; 34 | bttCancel: TTntButton; 35 | rbGotoLine: TTntRadioButton; 36 | rbGotoTime: TTntRadioButton; 37 | EditLine: TEdit; 38 | MaskEditTime: TMaskEdit; 39 | procedure bttGoClick(Sender: TObject); 40 | procedure bttCancelClick(Sender: TObject); 41 | procedure FormActivate(Sender: TObject); 42 | procedure FormKeyDown(Sender: TObject; var Key: Word; 43 | Shift: TShiftState); 44 | procedure MaskEditTimeChange(Sender: TObject); 45 | procedure EditLineChange(Sender: TObject); 46 | private 47 | { Private declarations } 48 | public 49 | { Public declarations } 50 | end; 51 | 52 | var 53 | GotoForm: TGotoForm; 54 | 55 | implementation 56 | 57 | {$R *.dfm} 58 | 59 | procedure TGotoForm.bttGoClick(Sender: TObject); 60 | begin 61 | ModalResult := mrOk; 62 | end; 63 | 64 | procedure TGotoForm.bttCancelClick(Sender: TObject); 65 | begin 66 | ModalResult := mrCancel; 67 | end; 68 | 69 | procedure TGotoForm.FormActivate(Sender: TObject); 70 | begin 71 | EditLine.SetFocus; 72 | end; 73 | 74 | procedure TGotoForm.FormKeyDown(Sender: TObject; var Key: Word; 75 | Shift: TShiftState); 76 | begin 77 | if (Key = VK_RETURN) then 78 | ModalResult := mrOk 79 | else if (Key = VK_ESCAPE) then 80 | Close 81 | end; 82 | 83 | procedure TGotoForm.MaskEditTimeChange(Sender: TObject); 84 | begin 85 | rbGotoTime.Checked := True; 86 | end; 87 | 88 | procedure TGotoForm.EditLineChange(Sender: TObject); 89 | begin 90 | rbGotoLine.Checked := True; 91 | end; 92 | 93 | end. 94 | -------------------------------------------------------------------------------- /HashUnit.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/HashUnit.pas -------------------------------------------------------------------------------- /LibHunspellUnit.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/LibHunspellUnit.pas -------------------------------------------------------------------------------- /LogWindowFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object LogForm: TLogForm 2 | Left = 204 3 | Top = 103 4 | Width = 505 5 | Height = 167 6 | BorderStyle = bsSizeToolWin 7 | Caption = 'Log window' 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'Microsoft Sans Serif' 13 | Font.Style = [] 14 | FormStyle = fsStayOnTop 15 | Menu = MainMenu1 16 | OldCreateOrder = False 17 | PixelsPerInch = 96 18 | TextHeight = 13 19 | object MemoLog: TTntMemo 20 | Left = 0 21 | Top = 0 22 | Width = 489 23 | Height = 108 24 | Align = alClient 25 | Font.Charset = DEFAULT_CHARSET 26 | Font.Color = clWindowText 27 | Font.Height = -11 28 | Font.Name = 'Courier New' 29 | Font.Style = [] 30 | ParentFont = False 31 | ScrollBars = ssVertical 32 | TabOrder = 0 33 | end 34 | object MainMenu1: TMainMenu 35 | Left = 8 36 | Top = 8 37 | object Window1: TMenuItem 38 | Caption = 'Window' 39 | object miClear: TMenuItem 40 | Caption = 'Clear' 41 | OnClick = miClearClick 42 | end 43 | object miStayHidden: TMenuItem 44 | AutoCheck = True 45 | Caption = 'Stay hidden' 46 | OnClick = miStayHiddenClick 47 | end 48 | object miClose: TMenuItem 49 | Caption = 'Close' 50 | OnClick = miCloseClick 51 | end 52 | end 53 | object Debug: TMenuItem 54 | Caption = 'Debug' 55 | object ListDirectShowfilters1: TMenuItem 56 | Caption = 'List used DirectShow filters' 57 | OnClick = ListDirectShowfilters1Click 58 | end 59 | end 60 | end 61 | end 62 | -------------------------------------------------------------------------------- /LogWindowFormUnit.pas: -------------------------------------------------------------------------------- 1 | unit LogWindowFormUnit; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, Menus, TntStdCtrls; 8 | 9 | type 10 | TLogForm = class(TForm) 11 | MainMenu1: TMainMenu; 12 | Window1: TMenuItem; 13 | miStayHidden: TMenuItem; 14 | miClose: TMenuItem; 15 | miClear: TMenuItem; 16 | MemoLog: TTntMemo; 17 | Debug: TMenuItem; 18 | ListDirectShowfilters1: TMenuItem; 19 | procedure miCloseClick(Sender: TObject); 20 | procedure miStayHiddenClick(Sender: TObject); 21 | procedure miClearClick(Sender: TObject); 22 | procedure ListDirectShowfilters1Click(Sender: TObject); 23 | private 24 | { Private declarations } 25 | public 26 | { Public declarations } 27 | procedure LogMsg(const Msg : WideString); 28 | procedure SilentLogMsg(const Msg : WideString); 29 | procedure Clear; 30 | end; 31 | 32 | var 33 | LogForm: TLogForm; 34 | 35 | implementation 36 | 37 | uses Main; 38 | 39 | {$R *.dfm} 40 | 41 | procedure TLogForm.miCloseClick(Sender: TObject); 42 | begin 43 | Visible := False; 44 | end; 45 | 46 | procedure TLogForm.LogMsg(const Msg : WideString); 47 | begin 48 | MemoLog.Lines.Add(Msg); 49 | if (not miStayHidden.Checked) and (Visible = False) then 50 | Visible := True; 51 | end; 52 | 53 | procedure TLogForm.SilentLogMsg(const Msg : WideString); 54 | begin 55 | MemoLog.Lines.Add(Msg); 56 | end; 57 | 58 | procedure TLogForm.miStayHiddenClick(Sender: TObject); 59 | begin 60 | Visible := False; 61 | end; 62 | 63 | procedure TLogForm.miClearClick(Sender: TObject); 64 | begin 65 | Clear; 66 | end; 67 | 68 | procedure TLogForm.Clear; 69 | begin 70 | MemoLog.Clear; 71 | end; 72 | 73 | procedure TLogForm.ListDirectShowfilters1Click(Sender: TObject); 74 | var slist : TStringList; 75 | begin 76 | MemoLog.Lines.Add('--- Start of filters list --->'); 77 | slist := TStringList.Create; 78 | MainForm.GetVideoRendererFiltersList(slist); 79 | MemoLog.Lines.AddStrings(slist); 80 | slist.Free; 81 | MemoLog.Lines.Add('<--- End of filters list ---'); 82 | end; 83 | 84 | end. 85 | -------------------------------------------------------------------------------- /LogWriterIntf.pas: -------------------------------------------------------------------------------- 1 | unit LogWriterIntf; 2 | 3 | interface 4 | 5 | type 6 | TLogWriterIntf = class 7 | public 8 | procedure AddTextLine(AText : string); virtual; abstract; 9 | procedure AddPair(AKey,AValue : string); virtual; abstract; 10 | end; 11 | 12 | TLogWriterNull = class(TLogWriterIntf) 13 | public 14 | procedure AddTextLine(AText : string); override; 15 | procedure AddPair(AKey,AValue : string); override; 16 | end; 17 | 18 | implementation 19 | 20 | procedure TLogWriterNull.AddTextLine(AText : string); 21 | begin 22 | // Do nothing 23 | end; 24 | 25 | procedure TLogWriterNull.AddPair(AKey,AValue : string); 26 | begin 27 | // Do nothing 28 | end; 29 | 30 | end. 31 | -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/HowToUse_Dll.dof: -------------------------------------------------------------------------------- 1 | [FileVersion] 2 | Version=7.0 3 | [Compiler] 4 | A=8 5 | B=0 6 | C=1 7 | D=1 8 | E=0 9 | F=0 10 | G=1 11 | H=1 12 | I=1 13 | J=0 14 | K=0 15 | L=1 16 | M=0 17 | N=1 18 | O=1 19 | P=1 20 | Q=0 21 | R=0 22 | S=0 23 | T=0 24 | U=0 25 | V=1 26 | W=0 27 | X=1 28 | Y=1 29 | Z=1 30 | ShowHints=1 31 | ShowWarnings=1 32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; 33 | NamespacePrefix= 34 | SymbolDeprecated=1 35 | SymbolLibrary=1 36 | SymbolPlatform=1 37 | UnitLibrary=1 38 | UnitPlatform=1 39 | UnitDeprecated=1 40 | HResultCompat=1 41 | HidingMember=1 42 | HiddenVirtual=1 43 | Garbage=1 44 | BoundsError=1 45 | ZeroNilCompat=1 46 | StringConstTruncated=1 47 | ForLoopVarVarPar=1 48 | TypedConstVarPar=1 49 | AsgToTypedConst=1 50 | CaseLabelRange=1 51 | ForVariable=1 52 | ConstructingAbstract=1 53 | ComparisonFalse=1 54 | ComparisonTrue=1 55 | ComparingSignedUnsigned=1 56 | CombiningSignedUnsigned=1 57 | UnsupportedConstruct=1 58 | FileOpen=1 59 | FileOpenUnitSrc=1 60 | BadGlobalSymbol=1 61 | DuplicateConstructorDestructor=1 62 | InvalidDirective=1 63 | PackageNoLink=1 64 | PackageThreadVar=1 65 | ImplicitImport=1 66 | HPPEMITIgnored=1 67 | NoRetVal=1 68 | UseBeforeDef=1 69 | ForLoopVarUndef=1 70 | UnitNameMismatch=1 71 | NoCFGFileFound=1 72 | MessageDirective=1 73 | ImplicitVariants=1 74 | UnicodeToLocale=1 75 | LocaleToUnicode=1 76 | ImagebaseMultiple=1 77 | SuspiciousTypecast=1 78 | PrivatePropAccessor=1 79 | UnsafeType=0 80 | UnsafeCode=0 81 | UnsafeCast=0 82 | [Linker] 83 | MapFile=0 84 | OutputObjs=0 85 | ConsoleApp=1 86 | DebugInfo=0 87 | RemoteSymbols=0 88 | MinStackSize=16384 89 | MaxStackSize=1048576 90 | ImageBase=4194304 91 | ExeDescription= 92 | [Directories] 93 | OutputDir= 94 | UnitOutputDir= 95 | PackageDLLOutputDir= 96 | PackageDCPOutputDir= 97 | SearchPath= 98 | Packages= 99 | Conditionals= 100 | DebugSourceDirs= 101 | UsePackages=0 102 | [Parameters] 103 | RunParams= 104 | HostApplication= 105 | Launcher= 106 | UseLauncher=0 107 | DebugCWD= 108 | [Language] 109 | ActiveLang= 110 | ProjectLang= 111 | RootDir= 112 | [Version Info] 113 | IncludeVerInfo=0 114 | AutoIncBuild=0 115 | MajorVer=1 116 | MinorVer=0 117 | Release=0 118 | Build=0 119 | Debug=0 120 | PreRelease=0 121 | Special=0 122 | Private=0 123 | DLL=0 124 | Locale=1040 125 | CodePage=1252 126 | [Version Info Keys] 127 | CompanyName= 128 | FileDescription= 129 | FileVersion=1.0.0.0 130 | InternalName= 131 | LegalCopyright= 132 | LegalTrademarks= 133 | OriginalFilename= 134 | ProductName= 135 | ProductVersion=1.0.0.0 136 | Comments= 137 | -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/HowToUse_Dll.dpr: -------------------------------------------------------------------------------- 1 | program HowToUse_Dll; 2 | 3 | uses 4 | Forms, 5 | MediaInfoDLL in '..\..\..\Source\MediaInfoDLL\MediaInfoDLL.pas', 6 | HowToUse_Dll_ in 'HowToUse_Dll_.pas' {Form1}; 7 | 8 | {$R HowToUse_Dll.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TForm1, Form1); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/HowToUse_Dll.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/MediaInfoLib/Project/Delphi/Example/HowToUse_Dll.exe -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/HowToUse_Dll.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/MediaInfoLib/Project/Delphi/Example/HowToUse_Dll.res -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/HowToUse_Dll_.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 282 3 | Top = 214 4 | Width = 795 5 | Height = 562 6 | BorderIcons = [biSystemMenu, biMinimize] 7 | Caption = 'MediaInfo.Dll Example' 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'MS Sans Serif' 13 | Font.Style = [] 14 | OldCreateOrder = False 15 | OnCreate = FormCreate 16 | PixelsPerInch = 96 17 | TextHeight = 13 18 | object Memo1: TMemo 19 | Left = 0 20 | Top = 0 21 | Width = 761 22 | Height = 513 23 | Font.Charset = DEFAULT_CHARSET 24 | Font.Color = clWindowText 25 | Font.Height = -11 26 | Font.Name = 'System' 27 | Font.Style = [] 28 | ParentFont = False 29 | ScrollBars = ssVertical 30 | TabOrder = 0 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/HowToUse_Dll_.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/MediaInfoLib/Project/Delphi/Example/HowToUse_Dll_.pas -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/Example/MediaInfo.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/MediaInfoLib/Project/Delphi/Example/MediaInfo.dll -------------------------------------------------------------------------------- /MediaInfoLib/Project/Delphi/MediaInfoLib_Delphi.bdsgroup: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Example\HowToUse_Dll.bdsproj 15 | HowToUse_Dll.exe 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /PeakCreationProgressFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object PeakCreationProgressForm: TPeakCreationProgressForm 2 | Left = 334 3 | Top = 168 4 | AutoSize = True 5 | BorderIcons = [biSystemMenu, biMinimize] 6 | BorderStyle = bsSingle 7 | BorderWidth = 4 8 | Caption = 'Creating peak file...' 9 | ClientHeight = 25 10 | ClientWidth = 261 11 | Color = clBtnFace 12 | Font.Charset = DEFAULT_CHARSET 13 | Font.Color = clWindowText 14 | Font.Height = -11 15 | Font.Name = 'Microsoft Sans Serif' 16 | Font.Style = [] 17 | FormStyle = fsStayOnTop 18 | OldCreateOrder = False 19 | Position = poMainFormCenter 20 | OnCloseQuery = FormCloseQuery 21 | PixelsPerInch = 96 22 | TextHeight = 13 23 | object ProgressBar1: TProgressBar 24 | Left = 0 25 | Top = 0 26 | Width = 261 27 | Height = 25 28 | TabOrder = 0 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /PeakCreationProgressFormUnit.pas: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2003 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | 22 | unit PeakCreationProgressFormUnit; 23 | 24 | interface 25 | 26 | uses 27 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 28 | Dialogs, ComCtrls; 29 | 30 | type 31 | TPeakCreationProgressForm = class(TForm) 32 | ProgressBar1: TProgressBar; 33 | procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 34 | protected 35 | procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; 36 | private 37 | { Private declarations } 38 | public 39 | { Public declarations } 40 | procedure SetProgress(Value : Integer); 41 | end; 42 | 43 | implementation 44 | 45 | {$R *.dfm} 46 | 47 | // ----------------------------------------------------------------------------- 48 | 49 | procedure TPeakCreationProgressForm.SetProgress(Value : Integer); 50 | begin 51 | ProgressBar1.Position := Value; 52 | end; 53 | 54 | // ----------------------------------------------------------------------------- 55 | 56 | procedure TPeakCreationProgressForm.FormCloseQuery(Sender: TObject; 57 | var CanClose: Boolean); 58 | begin 59 | CanClose := False; 60 | end; 61 | 62 | // ----------------------------------------------------------------------------- 63 | 64 | procedure TPeakCreationProgressForm.WMSysCommand(var Msg: TWMSysCommand); 65 | begin 66 | if Msg.CmdType = sc_minimize then 67 | begin 68 | Application.Minimize; 69 | end; 70 | inherited; 71 | end; 72 | 73 | // ----------------------------------------------------------------------------- 74 | end. 75 | // ----------------------------------------------------------------------------- 76 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VisualSubSync-Enhanced 2 | The Visualsubsync enhanced version 3 | 4 | The natural enhanced extension of the awesome ToffParis project at https://sourceforge.net/projects/visualsubsync/ 5 | 6 | It includes new functions like a complete internal filter graph support via mpc-home cinema and lav codecs, online dictionary 7 | automatic search (Italian language), new tools for resync, a new tool for progressive desync issues, new updated vsfilter for 8 | improved subtitles quality and much more... 9 | 10 | Starting from release 1.0.2.3 the english, french and german dictionaries are included into setup and 11 | now it support Thesaurus (MyThes format). 12 | 13 | Visualsubsync Enhanced is fully compatible with Windows Xp, Windows Vista, Windows 7, Windows 8/8.1 and now for Windows 10 and Windows 10 S 14 | 15 | Download here https://github.com/Red5goahead/VisualSubSync-Enhanced/releases the installation/setup. 16 | 17 | The Wikipage is here https://github.com/Red5goahead/VisualSubSync-Enhanced/wiki 18 | 19 | The Issues & Support page is here https://github.com/Red5goahead/VisualSubSync-Enhanced/issues 20 | 21 | It is also on **Windows Universal Platform** as Desktop Bridge application. 22 | 23 | Visit Microsoft Store here https://www.microsoft.com/store/apps/9nblggh4401s 24 | 25 | Please, read the privacy policy [here](http://myapppolicy.com/app/visualsubsync_enhanced) 26 | -------------------------------------------------------------------------------- /Readme_Sources.txt: -------------------------------------------------------------------------------- 1 | VisualSubSync sources for Delphi 7.0 2 | 3 | Needed third party components : 4 | 5 | Virtual Treeview by Mike Lischke 6 | http://www.soft-gems.net/ 7 | 8 | TNT Unicode by Troy Wolbrink 9 | http://www.tntware.com/delphicontrols/unicode/ 10 | 11 | -------------------------------------------------------------------------------- /Resources/CheckError.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/CheckError.bmp -------------------------------------------------------------------------------- /Resources/Close.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Close.bmp -------------------------------------------------------------------------------- /Resources/Delay.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Delay.bmp -------------------------------------------------------------------------------- /Resources/Doc.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc.ico -------------------------------------------------------------------------------- /Resources/Doc16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc16.png -------------------------------------------------------------------------------- /Resources/Doc16.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc16.psd -------------------------------------------------------------------------------- /Resources/Doc16_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc16_b.png -------------------------------------------------------------------------------- /Resources/Doc32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc32.png -------------------------------------------------------------------------------- /Resources/Doc32.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc32.psd -------------------------------------------------------------------------------- /Resources/Doc32_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc32_b.png -------------------------------------------------------------------------------- /Resources/Doc48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc48.png -------------------------------------------------------------------------------- /Resources/Doc48.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc48.psd -------------------------------------------------------------------------------- /Resources/Doc48_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc48_b.png -------------------------------------------------------------------------------- /Resources/Doc_b.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Doc_b.ico -------------------------------------------------------------------------------- /Resources/EmptyDoc.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/EmptyDoc.ico -------------------------------------------------------------------------------- /Resources/EmptyDoc16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/EmptyDoc16.png -------------------------------------------------------------------------------- /Resources/EmptyDoc32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/EmptyDoc32.png -------------------------------------------------------------------------------- /Resources/EmptyDoc48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/EmptyDoc48.png -------------------------------------------------------------------------------- /Resources/EmptyDocFull.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/EmptyDocFull.ico -------------------------------------------------------------------------------- /Resources/ErrorChecking.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ErrorChecking.bmp -------------------------------------------------------------------------------- /Resources/Exit.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Exit.bmp -------------------------------------------------------------------------------- /Resources/Find.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Find.bmp -------------------------------------------------------------------------------- /Resources/FindNext.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/FindNext.bmp -------------------------------------------------------------------------------- /Resources/Goto.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Goto.bmp -------------------------------------------------------------------------------- /Resources/Help.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Help.bmp -------------------------------------------------------------------------------- /Resources/IDEA.BMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/IDEA.BMP -------------------------------------------------------------------------------- /Resources/InsertTextFile.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/InsertTextFile.bmp -------------------------------------------------------------------------------- /Resources/Loop.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Loop.bmp -------------------------------------------------------------------------------- /Resources/LoopEnd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/LoopEnd.bmp -------------------------------------------------------------------------------- /Resources/LoopStart.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/LoopStart.bmp -------------------------------------------------------------------------------- /Resources/Move All Left1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Move All Left1.bmp -------------------------------------------------------------------------------- /Resources/Move All Right1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Move All Right1.bmp -------------------------------------------------------------------------------- /Resources/Move Left.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Move Left.bmp -------------------------------------------------------------------------------- /Resources/Move Right.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Move Right.bmp -------------------------------------------------------------------------------- /Resources/New.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/New.bmp -------------------------------------------------------------------------------- /Resources/Next.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Next.bmp -------------------------------------------------------------------------------- /Resources/Open.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Open.bmp -------------------------------------------------------------------------------- /Resources/Pause.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Pause.bmp -------------------------------------------------------------------------------- /Resources/Play.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Play.bmp -------------------------------------------------------------------------------- /Resources/PlayEnd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/PlayEnd.bmp -------------------------------------------------------------------------------- /Resources/PlayStart.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/PlayStart.bmp -------------------------------------------------------------------------------- /Resources/PlayToEnd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/PlayToEnd.bmp -------------------------------------------------------------------------------- /Resources/Preferences.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Preferences.bmp -------------------------------------------------------------------------------- /Resources/Previous.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Previous.bmp -------------------------------------------------------------------------------- /Resources/ProjectProp.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ProjectProp.bmp -------------------------------------------------------------------------------- /Resources/RT-DelPoS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/RT-DelPoS.bmp -------------------------------------------------------------------------------- /Resources/RT-Reset.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/RT-Reset.bmp -------------------------------------------------------------------------------- /Resources/RT-SetPoS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/RT-SetPoS.bmp -------------------------------------------------------------------------------- /Resources/Redo.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Redo.bmp -------------------------------------------------------------------------------- /Resources/Report.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Report.bmp -------------------------------------------------------------------------------- /Resources/Save.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Save.bmp -------------------------------------------------------------------------------- /Resources/SaveAll.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/SaveAll.bmp -------------------------------------------------------------------------------- /Resources/SaveAs.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/SaveAs.bmp -------------------------------------------------------------------------------- /Resources/SceneChange.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/SceneChange.psd -------------------------------------------------------------------------------- /Resources/ShowCursorFrame.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ShowCursorFrame.bmp -------------------------------------------------------------------------------- /Resources/ShowStartFrame.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ShowStartFrame.bmp -------------------------------------------------------------------------------- /Resources/ShowStopFrame.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ShowStopFrame.bmp -------------------------------------------------------------------------------- /Resources/ShowVideo.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ShowVideo.bmp -------------------------------------------------------------------------------- /Resources/Slack.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Slack.bmp -------------------------------------------------------------------------------- /Resources/Stop.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Stop.bmp -------------------------------------------------------------------------------- /Resources/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Thumbs.db -------------------------------------------------------------------------------- /Resources/Undo.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Undo.bmp -------------------------------------------------------------------------------- /Resources/VSS-Subtitle.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/VSS-Subtitle.ico -------------------------------------------------------------------------------- /Resources/VSS.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/VSS.ico -------------------------------------------------------------------------------- /Resources/Web.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/Web.bmp -------------------------------------------------------------------------------- /Resources/ZoomAll.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomAll.bmp -------------------------------------------------------------------------------- /Resources/ZoomAll2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomAll2.bmp -------------------------------------------------------------------------------- /Resources/ZoomIn.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomIn.bmp -------------------------------------------------------------------------------- /Resources/ZoomIn2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomIn2.bmp -------------------------------------------------------------------------------- /Resources/ZoomOut.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomOut.bmp -------------------------------------------------------------------------------- /Resources/ZoomOut2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomOut2.bmp -------------------------------------------------------------------------------- /Resources/ZoomSel.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomSel.bmp -------------------------------------------------------------------------------- /Resources/ZoomSel2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomSel2.bmp -------------------------------------------------------------------------------- /Resources/ZoomVertical.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomVertical.bmp -------------------------------------------------------------------------------- /Resources/ZoomVertical2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomVertical2.bmp -------------------------------------------------------------------------------- /Resources/ZoomVertical2_b.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ZoomVertical2_b.bmp -------------------------------------------------------------------------------- /Resources/_CompileRes.bat: -------------------------------------------------------------------------------- 1 | brcc32.exe resources.rc 2 | pause -------------------------------------------------------------------------------- /Resources/bold.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/bold.bmp -------------------------------------------------------------------------------- /Resources/bookmark-new.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/bookmark-new.bmp -------------------------------------------------------------------------------- /Resources/color.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/color.bmp -------------------------------------------------------------------------------- /Resources/dictionary.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/dictionary.bmp -------------------------------------------------------------------------------- /Resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/favicon.ico -------------------------------------------------------------------------------- /Resources/format-indent-less.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/format-indent-less.bmp -------------------------------------------------------------------------------- /Resources/format-indent-more.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/format-indent-more.bmp -------------------------------------------------------------------------------- /Resources/gears_settings_utilities_execute-16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/gears_settings_utilities_execute-16.bmp -------------------------------------------------------------------------------- /Resources/githhub.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/githhub.ico -------------------------------------------------------------------------------- /Resources/go-first.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/go-first.bmp -------------------------------------------------------------------------------- /Resources/go-last.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/go-last.bmp -------------------------------------------------------------------------------- /Resources/help-browser.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help-browser.bmp -------------------------------------------------------------------------------- /Resources/help/Mouse.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/Mouse.psd -------------------------------------------------------------------------------- /Resources/help/MouseMini.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/MouseMini.psd -------------------------------------------------------------------------------- /Resources/help/SSDetailsPage.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/SSDetailsPage.psd -------------------------------------------------------------------------------- /Resources/help/SSExtractWAV.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/SSExtractWAV.psd -------------------------------------------------------------------------------- /Resources/help/SSHomePage.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/SSHomePage.psd -------------------------------------------------------------------------------- /Resources/help/SSMainDialog.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/SSMainDialog.psd -------------------------------------------------------------------------------- /Resources/help/SSMainDialog2.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/SSMainDialog2.psd -------------------------------------------------------------------------------- /Resources/help/SSNewProject.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/help/SSNewProject.psd -------------------------------------------------------------------------------- /Resources/ico16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ico16.png -------------------------------------------------------------------------------- /Resources/ico16.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ico16.psd -------------------------------------------------------------------------------- /Resources/ico24.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ico24.psd -------------------------------------------------------------------------------- /Resources/ico32.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ico32.psd -------------------------------------------------------------------------------- /Resources/ico64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ico64.png -------------------------------------------------------------------------------- /Resources/ico64.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/ico64.psd -------------------------------------------------------------------------------- /Resources/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/icons.png -------------------------------------------------------------------------------- /Resources/italic.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/italic.bmp -------------------------------------------------------------------------------- /Resources/itasa.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/itasa.bmp -------------------------------------------------------------------------------- /Resources/mkv.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/mkv.bmp -------------------------------------------------------------------------------- /Resources/mkv.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/mkv.ico -------------------------------------------------------------------------------- /Resources/noicon.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/noicon.bmp -------------------------------------------------------------------------------- /Resources/resources.RES: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/resources.RES -------------------------------------------------------------------------------- /Resources/resources.rc: -------------------------------------------------------------------------------- 1 | MAINICON2 ICON DISCARDABLE "Doc.ico" 2 | MAINICON3 ICON DISCARDABLE "Doc_b.ico" -------------------------------------------------------------------------------- /Resources/size.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/size.bmp -------------------------------------------------------------------------------- /Resources/tab-new.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/tab-new.bmp -------------------------------------------------------------------------------- /Resources/thesaurus.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/thesaurus.bmp -------------------------------------------------------------------------------- /Resources/underline.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/underline.bmp -------------------------------------------------------------------------------- /Resources/vss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/Resources/vss.png -------------------------------------------------------------------------------- /ResynchToolFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object ResynchToolForm: TResynchToolForm 2 | Left = 516 3 | Top = 332 4 | BorderStyle = bsToolWindow 5 | Caption = 'Desynch Tool' 6 | ClientHeight = 381 7 | ClientWidth = 345 8 | Color = clBtnFace 9 | Constraints.MinHeight = 150 10 | Constraints.MinWidth = 240 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Microsoft Sans Serif' 15 | Font.Style = [] 16 | FormStyle = fsStayOnTop 17 | KeyPreview = True 18 | OldCreateOrder = False 19 | OnCreate = FormCreate 20 | OnDestroy = FormDestroy 21 | OnDeactivate = FormDeactivate 22 | PixelsPerInch = 96 23 | TextHeight = 13 24 | object vtvPoSList: TVirtualDrawTree 25 | Left = 0 26 | Top = 0 27 | Width = 345 28 | Height = 335 29 | Align = alClient 30 | Constraints.MinHeight = 50 31 | Header.AutoSizeIndex = 0 32 | Header.Font.Charset = DEFAULT_CHARSET 33 | Header.Font.Color = clWindowText 34 | Header.Font.Height = -11 35 | Header.Font.Name = 'Microsoft Sans Serif' 36 | Header.Font.Style = [] 37 | Header.MainColumn = -1 38 | Header.Options = [hoColumnResize, hoDrag] 39 | PopupMenu = RTPopupMenu 40 | ScrollBarOptions.AlwaysVisible = True 41 | ScrollBarOptions.ScrollBars = ssVertical 42 | TabOrder = 0 43 | OnCompareNodes = vtvPoSListCompareNodes 44 | OnDblClick = vtvPoSListDblClick 45 | OnDrawNode = vtvPoSListDrawNode 46 | OnFocusChanged = vtvPoSListFocusChanged 47 | Columns = <> 48 | end 49 | object TntStatusBar1: TTntStatusBar 50 | Left = 0 51 | Top = 360 52 | Width = 345 53 | Height = 21 54 | Panels = < 55 | item 56 | Width = 50 57 | end> 58 | end 59 | object Panel1: TPanel 60 | Left = 0 61 | Top = 335 62 | Width = 345 63 | Height = 25 64 | Align = alBottom 65 | TabOrder = 2 66 | object GotoSelectedNodeButton: TButton 67 | Left = 3 68 | Top = 0 69 | Width = 160 70 | Height = 25 71 | Caption = 'Go to the selected sub' 72 | TabOrder = 0 73 | OnClick = GotoSelectedNodeButtonClick 74 | end 75 | object GotoSuggestedNodeButton: TButton 76 | Left = 165 77 | Top = 0 78 | Width = 160 79 | Height = 25 80 | Caption = 'Go to the suggested sub' 81 | Enabled = False 82 | TabOrder = 1 83 | OnClick = GotoSuggestedNodeButtonClick 84 | end 85 | end 86 | object RTPopupMenu: TTntPopupMenu 87 | Left = 16 88 | Top = 192 89 | object DeleteselectedPoS1: TTntMenuItem 90 | Caption = 'Delete selected PoS' 91 | OnClick = DeleteselectedPoS1Click 92 | end 93 | end 94 | end 95 | -------------------------------------------------------------------------------- /SRTParserUnit.pas: -------------------------------------------------------------------------------- 1 | unit SRTParserUnit; 2 | 3 | interface 4 | 5 | uses Classes, Contnrs, TntClasses; 6 | 7 | type 8 | TSRTSubtitle = class 9 | Start, Stop : Integer; 10 | Text : WideString; 11 | end; 12 | 13 | TSRTParser = class 14 | private 15 | FIsUTF8 : Boolean; 16 | FAutoCorrectedFile : Boolean; 17 | FSubList : TObjectList; 18 | public 19 | constructor Create; 20 | destructor Destroy; override; 21 | 22 | function Load(Stream : TStream) : Integer; overload; 23 | function Load(Source : TTntStrings) : Integer; overload; 24 | function Load(Filename : WideString) : Integer; overload; 25 | 26 | function GetCount : Integer; 27 | function GetAt(Index : Integer) : TSRTSubtitle; 28 | published 29 | property IsUTF8 : Boolean read FIsUTF8; 30 | property AutoCorrectedFile : Boolean read FAutoCorrectedFile; 31 | end; 32 | 33 | implementation 34 | 35 | uses MiscToolsUnit, SysUtils, TntSysUtils; 36 | 37 | constructor TSRTParser.Create; 38 | begin 39 | FSubList := TObjectList.Create(True); 40 | FIsUTF8 := False; 41 | FAutoCorrectedFile := False; 42 | end; 43 | 44 | destructor TSRTParser.Destroy; 45 | begin 46 | inherited; 47 | FreeAndNil(FSubList); 48 | end; 49 | 50 | function TSRTParser.GetCount : Integer; 51 | begin 52 | Result := FSubList.Count; 53 | end; 54 | 55 | function TSRTParser.GetAt(Index : Integer) : TSRTSubtitle; 56 | begin 57 | Result := TSRTSubtitle(FSubList[Index]); 58 | end; 59 | 60 | function TSRTParser.Load(Stream : TStream) : Integer; 61 | var Source : TTntStringList; 62 | begin 63 | Source := MyTTntStringList.Create; 64 | Source.LoadFromStream(Stream); 65 | Result := Load(Source); 66 | Source.Free; 67 | end; 68 | 69 | function TSRTParser.Load(Source : TTntStrings) : Integer; 70 | var i, lineIndex : integer; 71 | Start, Stop, NextStart, NextStop : Integer; 72 | S, SubText : WideString; 73 | Sub : TSRTSubtitle; 74 | begin 75 | FIsUTF8 := (Source.LastFileCharSet <> csAnsi); 76 | FAutoCorrectedFile := False; 77 | lineIndex := 0; 78 | 79 | // Add a blank line because TTntStringList is eating the last line 80 | // if it's blank. This is safe because we will trim the text later anyway. 81 | Source.Add(''); 82 | 83 | // Skip lines until a timestamps line 84 | while (lineIndex < Source.Count) do 85 | begin 86 | S := Source[lineIndex]; 87 | Inc(lineIndex); 88 | if IsTimeStampsLine(S, Start, Stop) then 89 | Break; 90 | end; 91 | 92 | while (lineIndex < Source.Count) do 93 | begin 94 | // Copy text until a timestamps line 95 | SubText := ''; 96 | while (lineIndex < Source.Count) do 97 | begin 98 | S := Source[lineIndex]; 99 | Inc(lineIndex); 100 | if IsTimeStampsLine(S, NextStart, NextStop) then 101 | Break; 102 | SubText := SubText + Trim(S) + CRLF; 103 | end; 104 | SubText := TrimRight(SubText); 105 | if (Start <> -1) and (Stop <> -1) then 106 | begin 107 | // Auto fix timestamp if this subtitle stop time is equal 108 | // to next subtitle start time 109 | if (Stop = NextStart) then 110 | begin 111 | FAutoCorrectedFile := True; 112 | Dec(Stop); 113 | end; 114 | // Remove the index line if any 115 | i := RPos(CRLF, SubText); 116 | if ((i > 0) and (StrToIntDef(Copy(SubText, i+2, MaxInt), -1) <> -1) and (lineIndex < Source.Count)) then 117 | begin 118 | Delete(SubText, i, MaxInt); 119 | end; 120 | Sub := TSRTSubtitle.Create; 121 | Sub.Start := Start; 122 | Sub.Stop := Stop; 123 | Sub.Text := Trim(SubText); 124 | 125 | FSubList.Add(Sub); 126 | end; 127 | Start := NextStart; 128 | Stop := NextStop; 129 | end; 130 | 131 | Result := FSubList.Count; 132 | end; 133 | 134 | function TSRTParser.Load(Filename : WideString) : Integer; 135 | var Source : TTntStringList; 136 | begin 137 | Source := MyTTntStringList.Create; 138 | Source.LoadFromFile(Filename); 139 | Result := Load(Source); 140 | Source.Free; 141 | end; 142 | 143 | end. 144 | -------------------------------------------------------------------------------- /SilentZoneFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object SilentZoneForm: TSilentZoneForm 2 | Left = 246 3 | Top = 77 4 | Width = 314 5 | Height = 331 6 | BorderStyle = bsSizeToolWin 7 | BorderWidth = 4 8 | Caption = 'Silent zones' 9 | Color = clBtnFace 10 | Font.Charset = DEFAULT_CHARSET 11 | Font.Color = clWindowText 12 | Font.Height = -11 13 | Font.Name = 'Microsoft Sans Serif' 14 | Font.Style = [] 15 | FormStyle = fsStayOnTop 16 | KeyPreview = True 17 | OldCreateOrder = False 18 | OnClose = FormClose 19 | OnDestroy = FormDestroy 20 | OnKeyDown = FormKeyDown 21 | PixelsPerInch = 96 22 | TextHeight = 13 23 | object TntBevel1: TTntBevel 24 | Left = 0 25 | Top = 49 26 | Width = 290 27 | Height = 4 28 | Align = alTop 29 | Shape = bsSpacer 30 | end 31 | object lbSilentZones: TTntListBox 32 | Left = 0 33 | Top = 53 34 | Width = 290 35 | Height = 231 36 | Align = alClient 37 | ItemHeight = 13 38 | TabOrder = 0 39 | OnDblClick = lbSilentZonesDblClick 40 | end 41 | object TntGroupBox1: TTntGroupBox 42 | Left = 0 43 | Top = 0 44 | Width = 290 45 | Height = 49 46 | Align = alTop 47 | Caption = ' Settings ' 48 | TabOrder = 1 49 | DesignSize = ( 50 | 290 51 | 49) 52 | object TntLabel1: TTntLabel 53 | Left = 8 54 | Top = 20 55 | Width = 50 56 | Height = 13 57 | Caption = 'Threshold:' 58 | end 59 | object TntLabel2: TTntLabel 60 | Left = 128 61 | Top = 20 62 | Width = 43 63 | Height = 13 64 | Caption = 'Duration:' 65 | end 66 | object edThreshold: TTntEdit 67 | Left = 64 68 | Top = 16 69 | Width = 41 70 | Height = 21 71 | Hint = 'Threshold between 0 and 32767' 72 | ParentShowHint = False 73 | ShowHint = True 74 | TabOrder = 0 75 | Text = '100' 76 | end 77 | object edDuration: TTntEdit 78 | Left = 176 79 | Top = 16 80 | Width = 41 81 | Height = 21 82 | Hint = 'Minimum duration of the silent zone in ms (100..9999)' 83 | ParentShowHint = False 84 | ShowHint = True 85 | TabOrder = 1 86 | Text = '500' 87 | end 88 | object udDuration: TTntUpDown 89 | Left = 217 90 | Top = 16 91 | Width = 15 92 | Height = 21 93 | Associate = edDuration 94 | Min = 100 95 | Max = 9999 96 | Increment = 100 97 | Position = 500 98 | TabOrder = 2 99 | end 100 | object udThreshold: TTntUpDown 101 | Left = 105 102 | Top = 16 103 | Width = 15 104 | Height = 21 105 | Associate = edThreshold 106 | Max = 32767 107 | Increment = 10 108 | Position = 100 109 | TabOrder = 3 110 | end 111 | object bttUpdate: TTntButton 112 | Left = 240 113 | Top = 16 114 | Width = 47 115 | Height = 25 116 | Anchors = [akTop, akRight] 117 | Caption = 'Update' 118 | TabOrder = 4 119 | OnClick = bttUpdateClick 120 | end 121 | end 122 | end 123 | -------------------------------------------------------------------------------- /SilentZoneFormUnit.pas: -------------------------------------------------------------------------------- 1 | unit SilentZoneFormUnit; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, TntStdCtrls, ExtCtrls, TntExtCtrls, Contnrs, WAVDisplayerUnit, 8 | ComCtrls, TntComCtrls; 9 | 10 | type 11 | TSilentZoneForm = class(TForm) 12 | lbSilentZones: TTntListBox; 13 | TntGroupBox1: TTntGroupBox; 14 | edThreshold: TTntEdit; 15 | TntLabel1: TTntLabel; 16 | TntBevel1: TTntBevel; 17 | TntLabel2: TTntLabel; 18 | edDuration: TTntEdit; 19 | udDuration: TTntUpDown; 20 | udThreshold: TTntUpDown; 21 | bttUpdate: TTntButton; 22 | procedure lbSilentZonesDblClick(Sender: TObject); 23 | procedure bttUpdateClick(Sender: TObject); 24 | procedure FormDestroy(Sender: TObject); 25 | procedure FormKeyDown(Sender: TObject; var Key: Word; 26 | Shift: TShiftState); 27 | procedure FormClose(Sender: TObject; var Action: TCloseAction); 28 | private 29 | { Private declarations } 30 | FWAVDisplayer : TWAVDisplayer; 31 | FZoneList : TObjectList; 32 | 33 | procedure FillZone(ZoneList : TList); 34 | public 35 | { Public declarations } 36 | constructor Create(AOwner: TComponent; WAVDisplayer : TWAVDisplayer); reintroduce; 37 | 38 | procedure Clear; 39 | function GetThreshold : Integer; 40 | function GetDuration : Integer; 41 | procedure UpdateData; 42 | 43 | end; 44 | 45 | var 46 | SilentZoneForm: TSilentZoneForm; 47 | 48 | implementation 49 | 50 | uses MiscToolsUnit, main; 51 | 52 | {$R *.dfm} 53 | 54 | constructor TSilentZoneForm.Create(AOwner: TComponent; 55 | WAVDisplayer : TWAVDisplayer); 56 | begin 57 | inherited Create(AOwner); 58 | FWAVDisplayer := WAVDisplayer; 59 | FZoneList := TObjectList.Create(True); 60 | end; 61 | 62 | procedure TSilentZoneForm.FormDestroy(Sender: TObject); 63 | begin 64 | FreeAndNil(FZoneList); 65 | end; 66 | 67 | procedure TSilentZoneForm.Clear; 68 | begin 69 | lbSilentZones.Clear; 70 | FZoneList.Clear; 71 | end; 72 | 73 | procedure TSilentZoneForm.FillZone(ZoneList : TList); 74 | var i : Integer; 75 | SilentRange : TSilentRangeInfo; 76 | Str : WideString; 77 | SilentDuration, MinDuration : Integer; 78 | begin 79 | MinDuration := GetDuration; 80 | lbSilentZones.Items.BeginUpdate; 81 | for i:=0 to ZoneList.Count-1 do 82 | begin 83 | SilentRange := TSilentRangeInfo(ZoneList[i]); 84 | SilentDuration := SilentRange.Stop - SilentRange.Start; 85 | if (SilentDuration >= MinDuration) then 86 | begin 87 | Str := Format('%s -> %s (%.1f)', [TimeMsToString(SilentRange.Start), 88 | TimeMsToString(SilentRange.Stop), 89 | (SilentRange.RmsSum / SilentRange.RmsCount)]); 90 | lbSilentZones.Items.AddObject(Str, SilentRange); 91 | end; 92 | end; 93 | lbSilentZones.Items.EndUpdate; 94 | end; 95 | 96 | procedure TSilentZoneForm.lbSilentZonesDblClick(Sender: TObject); 97 | var SilentRange : TSilentRangeInfo; 98 | begin 99 | if (lbSilentZones.ItemIndex <> -1) then 100 | begin 101 | SilentRange := TSilentRangeInfo(lbSilentZones.Items.Objects[lbSilentZones.ItemIndex]); 102 | MainForm.SetSelection(SilentRange.Start, SilentRange.Stop); 103 | end; 104 | end; 105 | 106 | function TSilentZoneForm.GetThreshold : Integer; 107 | begin 108 | Result := udThreshold.Position; 109 | end; 110 | 111 | function TSilentZoneForm.GetDuration : Integer; 112 | begin 113 | Result := udDuration.Position; 114 | end; 115 | 116 | procedure TSilentZoneForm.bttUpdateClick(Sender: TObject); 117 | begin 118 | UpdateData; 119 | end; 120 | 121 | procedure TSilentZoneForm.UpdateData; 122 | begin 123 | Clear; 124 | FWAVDisplayer.DetectSilentZone(FZoneList, GetThreshold, 100); 125 | SilentZoneForm.FillZone(FZoneList); 126 | end; 127 | 128 | procedure TSilentZoneForm.FormKeyDown(Sender: TObject; var Key: Word; 129 | Shift: TShiftState); 130 | begin 131 | if (Key = VK_ESCAPE) then 132 | begin 133 | Close; 134 | end; 135 | end; 136 | 137 | procedure TSilentZoneForm.FormClose(Sender: TObject; 138 | var Action: TCloseAction); 139 | begin 140 | MainForm.ConfigObject.SilentZoneDuration := SilentZoneForm.udDuration.Position; 141 | MainForm.ConfigObject.SilentZoneThreshold := SilentZoneForm.udThreshold.Position; 142 | end; 143 | 144 | end. 145 | -------------------------------------------------------------------------------- /SourceFileOperationCancel.dfm: -------------------------------------------------------------------------------- 1 | object SourceFileOperationCancel: TSourceFileOperationCancel 2 | Left = 471 3 | Top = 345 4 | BorderIcons = [] 5 | BorderStyle = bsSingle 6 | BorderWidth = 4 7 | Caption = 'Operation on video source file' 8 | ClientHeight = 84 9 | ClientWidth = 518 10 | Color = clBtnFace 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'MS Sans Serif' 15 | Font.Style = [] 16 | OldCreateOrder = False 17 | Position = poMainFormCenter 18 | OnClose = FormClose 19 | PixelsPerInch = 96 20 | TextHeight = 13 21 | object FFMpegOutputMessage: TLabel 22 | Left = 4 23 | Top = 34 24 | Width = 509 25 | Height = 13 26 | AutoSize = False 27 | Font.Charset = DEFAULT_CHARSET 28 | Font.Color = clBlack 29 | Font.Height = -11 30 | Font.Name = 'MS Sans Serif' 31 | Font.Style = [] 32 | ParentFont = False 33 | end 34 | object VideoSourceOperationExecuteCancel: TTntButton 35 | Left = 0 36 | Top = 56 37 | Width = 513 38 | Height = 24 39 | Caption = 'Cancel' 40 | TabOrder = 0 41 | OnClick = VideoSourceOperationExecuteCancelClick 42 | end 43 | object FFMpegOutputProgressBar: TTntProgressBar 44 | Left = 3 45 | Top = 2 46 | Width = 510 47 | Height = 27 48 | Smooth = True 49 | Step = 5 50 | TabOrder = 1 51 | end 52 | object FakeWavDisplayerPanel: TPanel 53 | Left = 472 54 | Top = 37 55 | Width = 33 56 | Height = 15 57 | Color = clSkyBlue 58 | TabOrder = 2 59 | Visible = False 60 | end 61 | object StartTimer: TTimer 62 | Interval = 500 63 | OnTimer = StartTimerTimer 64 | Left = 424 65 | Top = 24 66 | end 67 | end 68 | -------------------------------------------------------------------------------- /SubtitleTimingFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object SubtitleTimingForm: TSubtitleTimingForm 2 | Left = 433 3 | Top = 338 4 | ActiveControl = edTime 5 | BorderIcons = [biSystemMenu] 6 | BorderStyle = bsSingle 7 | Caption = 'Change subtitle timing...' 8 | ClientHeight = 85 9 | ClientWidth = 301 10 | Color = clBtnFace 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Microsoft Sans Serif' 15 | Font.Style = [] 16 | FormStyle = fsStayOnTop 17 | OldCreateOrder = False 18 | OnClose = FormClose 19 | PixelsPerInch = 96 20 | TextHeight = 13 21 | object bttClose: TTntButton 22 | Left = 158 23 | Top = 48 24 | Width = 83 25 | Height = 25 26 | Caption = 'Close' 27 | ModalResult = 2 28 | TabOrder = 2 29 | OnClick = bttCloseClick 30 | end 31 | object brrOk: TTntButton 32 | Left = 62 33 | Top = 48 34 | Width = 83 35 | Height = 25 36 | Caption = 'Ok' 37 | ModalResult = 1 38 | TabOrder = 1 39 | end 40 | object edTime: TMaskEdit 41 | Left = 103 42 | Top = 9 43 | Width = 91 44 | Height = 24 45 | EditMask = '!99:99:99.999;1;0' 46 | Font.Charset = DEFAULT_CHARSET 47 | Font.Color = clWindowText 48 | Font.Height = -13 49 | Font.Name = 'Microsoft Sans Serif' 50 | Font.Style = [fsBold] 51 | MaxLength = 12 52 | ParentFont = False 53 | TabOrder = 0 54 | Text = ' : : . ' 55 | end 56 | end 57 | -------------------------------------------------------------------------------- /SubtitleTimingFormUnit.pas: -------------------------------------------------------------------------------- 1 | unit SubtitleTimingFormUnit; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, ComCtrls, StdCtrls, Mask, TntStdCtrls; 8 | 9 | type 10 | TSubtitleTimingForm = class(TForm) 11 | bttClose: TTntButton; 12 | brrOk: TTntButton; 13 | edTime: TMaskEdit; 14 | procedure FormClose(Sender: TObject; var Action: TCloseAction); 15 | procedure bttCloseClick(Sender: TObject); 16 | private 17 | { Private declarations } 18 | public 19 | { Public declarations } 20 | end; 21 | 22 | var 23 | SubtitleTimingForm: TSubtitleTimingForm; 24 | 25 | implementation 26 | 27 | {$R *.dfm} 28 | 29 | procedure TSubtitleTimingForm.FormClose(Sender: TObject; 30 | var Action: TCloseAction); 31 | begin 32 | Action := caFree; 33 | end; 34 | 35 | procedure TSubtitleTimingForm.bttCloseClick(Sender: TObject); 36 | begin 37 | Close; 38 | end; 39 | 40 | end. 41 | -------------------------------------------------------------------------------- /SuggestionFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object SuggestionForm: TSuggestionForm 2 | Left = 209 3 | Top = 115 4 | Width = 273 5 | Height = 436 6 | BorderIcons = [biSystemMenu, biMinimize] 7 | BorderStyle = bsSizeToolWin 8 | BorderWidth = 4 9 | Caption = 'Suggestions' 10 | Color = clBtnFace 11 | Constraints.MinHeight = 200 12 | Constraints.MinWidth = 100 13 | Font.Charset = DEFAULT_CHARSET 14 | Font.Color = clWindowText 15 | Font.Height = -11 16 | Font.Name = 'Microsoft Sans Serif' 17 | Font.Style = [] 18 | FormStyle = fsStayOnTop 19 | KeyPreview = True 20 | OldCreateOrder = False 21 | OnCreate = FormCreate 22 | OnDestroy = FormDestroy 23 | OnKeyDown = FormKeyDown 24 | DesignSize = ( 25 | 249 26 | 389) 27 | PixelsPerInch = 96 28 | TextHeight = 13 29 | object vtvSuggestionsLst: TVirtualDrawTree 30 | Left = 0 31 | Top = 0 32 | Width = 257 33 | Height = 321 34 | Anchors = [akLeft, akTop, akRight, akBottom] 35 | Font.Charset = ANSI_CHARSET 36 | Font.Color = clWindowText 37 | Font.Height = -11 38 | Font.Name = 'Arial' 39 | Font.Style = [] 40 | Header.AutoSizeIndex = 0 41 | Header.Font.Charset = ANSI_CHARSET 42 | Header.Font.Color = clWindowText 43 | Header.Font.Height = -11 44 | Header.Font.Name = '@Arial Unicode MS' 45 | Header.Font.Style = [] 46 | Header.MainColumn = -1 47 | Header.Options = [hoColumnResize, hoDrag] 48 | ParentFont = False 49 | PopupMenu = TntPopupMenu1 50 | TabOrder = 0 51 | TreeOptions.SelectionOptions = [toMultiSelect] 52 | OnDblClick = vtvSuggestionsLstDblClick 53 | OnDrawNode = vtvSuggestionsLstDrawNode 54 | OnFocusChanged = vtvSuggestionsLstFocusChanged 55 | Columns = <> 56 | end 57 | object MemoSuggPreview: TTntMemo 58 | Left = 0 59 | Top = 328 60 | Width = 257 61 | Height = 73 62 | Anchors = [akLeft, akRight, akBottom] 63 | Font.Charset = ANSI_CHARSET 64 | Font.Color = clWindowText 65 | Font.Height = -11 66 | Font.Name = 'Arial' 67 | Font.Style = [fsBold] 68 | ParentFont = False 69 | ReadOnly = True 70 | TabOrder = 1 71 | end 72 | object TntPopupMenu1: TTntPopupMenu 73 | Left = 8 74 | Top = 8 75 | object pmiClearSelected: TTntMenuItem 76 | Caption = 'Clear selected' 77 | OnClick = pmiClearSelectedClick 78 | end 79 | object pmiClearAll: TTntMenuItem 80 | Caption = 'Clear all' 81 | OnClick = pmiClearAllClick 82 | end 83 | end 84 | end 85 | -------------------------------------------------------------------------------- /ThirdParty/DirectX-2012/D3DX8.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/DirectX-2012/D3DX8.pas -------------------------------------------------------------------------------- /ThirdParty/DirectX-2012/DX7toDX8.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/DirectX-2012/DX7toDX8.pas -------------------------------------------------------------------------------- /ThirdParty/DirectX-2012/DirectShow9.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/DirectX-2012/DirectShow9.pas -------------------------------------------------------------------------------- /ThirdParty/DirectX-2012/DirectX.inc: -------------------------------------------------------------------------------- 1 | {******************************************************************************} 2 | { } 3 | { The contents of this file are subject to the Mozilla Public License Version } 4 | { 1.1 (the "License"); you may not use this file except in compliance with the } 5 | { License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ } 6 | { } 7 | { Software distributed under the License is distributed on an "AS IS" basis, } 8 | { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } 9 | { the specific language governing rights and limitations under the License. } 10 | { } 11 | { The Original Code is DirectX.inc. } 12 | { } 13 | {******************************************************************************} 14 | {$IFNDEF __TMT__} 15 | {$IFNDEF FPC} 16 | 17 | // *** Borland compilers support *** 18 | {$INCLUDE Jedi.inc} 19 | 20 | {$DEFINE BORLAND} 21 | {$DEFINE TYPE_IDENTITY} 22 | {$DEFINE SUPPORTS_EXCEPTIONS} 23 | {$IFDEF COMPILER6_UP} 24 | {$DEFINE SUPPORTS_EXPL_ENUMS} // Enumerated types with explicitly assigned ordinality 25 | {$IFNDEF BCB6_UP} 26 | // C++Builder6 hack: Delphi 6-7 compilers have bugged .HPP generation for 27 | // enums in some cases (and D6 compiler is included with BCB6) 28 | {$DEFINE SUPPORTS_EXPL_ENUMS_except_BCB6} 29 | {$ENDIF} 30 | {$ENDIF} 31 | 32 | // Additional settings 33 | {$BOOLEVAL OFF} 34 | {$MINENUMSIZE 4} 35 | {$ALIGN ON} 36 | 37 | {$IFDEF COMPILER7_UP} 38 | {$WARN UNSAFE_CODE OFF} 39 | {$WARN UNSAFE_TYPE OFF} 40 | {$WARN UNSAFE_CAST OFF} 41 | {$ENDIF} 42 | 43 | {$IFDEF COMPILER9_UP} 44 | {$IFDEF DEBUG} 45 | {$INLINE OFF} 46 | {$ELSE} 47 | {$INLINE ON} 48 | {$ENDIF} 49 | {$ENDIF} 50 | {$ELSE} 51 | 52 | // *** FreePascal compiler support *** 53 | {$INCLUDE Jedi.inc} 54 | 55 | {$APPTYPE GUI} 56 | 57 | // Additional settings 58 | {$H+} // Long Strings 59 | {$BOOLEVAL OFF} 60 | {$MINENUMSIZE 4} 61 | {$ALIGN ON} 62 | {$PACKRECORDS 8} 63 | {$INLINE ON} 64 | 65 | {$UNDEF TYPE_IDENTITY} 66 | {$DEFINE SUPPORTS_EXCEPTIONS} 67 | {$DEFINE SUPPORTS_INLINE} 68 | {$DEFINE COMPILER5_UP} // Specially for DirectDraw.pas 69 | 70 | {$ENDIF} 71 | {$ELSE} 72 | // *** TMT Pascal compiler support *** 73 | {.$I TMT.inc} 74 | 75 | // TMT compiler support 76 | {$IFNDEF __TMT__} 77 | TMT pascal compiler required here 78 | {$ENDIF} 79 | 80 | // ADD IFOPT for TMT 81 | 82 | {$DEFINE TMT} 83 | 84 | {$IFDEF __WIN32__} 85 | {$DEFINE WIN32} 86 | {$ENDIF} 87 | 88 | {$IFDEF __VER5__} 89 | {$DEFINE TMT5} 90 | {$DEFINE TMT5_UP} 91 | {$DEFINE TMT4_UP} 92 | {$DEFINE TMT3_UP} 93 | {$ENDIF} 94 | 95 | {$IFDEF __VER4__} 96 | {$DEFINE TMT4} 97 | {$DEFINE TMT4_UP} 98 | {$DEFINE TMT3_UP} 99 | {$ENDIF} 100 | 101 | {$IFDEF __VER3__} 102 | {$DEFINE TMT3} 103 | {$DEFINE TMT3_UP} 104 | {$ENDIF} 105 | 106 | {$IFDEF TMT4_UP} 107 | {$DEFINE SUPPORTS_INTERFACE} 108 | {$ENDIF} 109 | 110 | // Additional settings 111 | {$A+} // Word alignment data 112 | {$OA+} // Objects and structures align 113 | {$Z4} // Set minimum size of enumerated type to 4 114 | {$ENDIF} 115 | 116 | 117 | // By default use most recent DirectX sub-version 118 | 119 | {$IFNDEF DX81} 120 | {$IFNDEF DX80} 121 | {$DEFINE DX81} 122 | {$ENDIF} 123 | {$ENDIF} 124 | 125 | 126 | {$IFNDEF DX92} 127 | {$IFNDEF DX91} 128 | {$IFNDEF DX90} 129 | {$DEFINE DX92} 130 | {$ENDIF} 131 | {$ENDIF} 132 | {$ENDIF} 133 | 134 | -------------------------------------------------------------------------------- /ThirdParty/EZCrypt.pas: -------------------------------------------------------------------------------- 1 | unit EZCrypt; 2 | 3 | {modeled by Ben Hochstrasser(bhoc@surfeu.ch) after some code snippet from borland} 4 | 5 | interface 6 | 7 | uses Windows, Classes; 8 | 9 | type 10 | TWordTriple = Array[0..2] of Word; 11 | 12 | function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean; 13 | function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean; 14 | function TextEncrypt(const s: string; Key: TWordTriple): string; 15 | function TextDecrypt(const s: string; Key: TWordTriple): string; 16 | function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean; 17 | function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean; 18 | 19 | implementation 20 | 21 | function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean; 22 | var 23 | pIn, pOut: ^byte; 24 | i : Cardinal; 25 | begin 26 | if SrcSize = TargetSize then 27 | begin 28 | pIn := Src; 29 | pOut := Target; 30 | for i := 1 to SrcSize do 31 | begin 32 | pOut^ := pIn^ xor (Key[2] shr 8); 33 | Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1]; 34 | inc(pIn); 35 | inc(pOut); 36 | end; 37 | Result := True; 38 | end else 39 | Result := False; 40 | end; 41 | 42 | function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean; 43 | var 44 | pIn, pOut: ^byte; 45 | i : Cardinal; 46 | begin 47 | if SrcSize = TargetSize then 48 | begin 49 | pIn := Src; 50 | pOut := Target; 51 | for i := 1 to SrcSize do 52 | begin 53 | pOut^ := pIn^ xor (Key[2] shr 8); 54 | Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1]; 55 | inc(pIn); 56 | inc(pOut); 57 | end; 58 | Result := True; 59 | end else 60 | Result := False; 61 | end; 62 | 63 | function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string; 64 | var 65 | bOK: Boolean; 66 | begin 67 | SetLength(Result, Length(s)); 68 | if Encrypt then 69 | bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key) 70 | else 71 | bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key); 72 | if not bOK then Result := ''; 73 | end; 74 | 75 | function FileCrypt(InFile, OutFile: String; Key: TWordTriple; Encrypt: Boolean): boolean; 76 | var 77 | MIn, MOut: TMemoryStream; 78 | begin 79 | MIn := TMemoryStream.Create; 80 | MOut := TMemoryStream.Create; 81 | Try 82 | MIn.LoadFromFile(InFile); 83 | MOut.SetSize(MIn.Size); 84 | if Encrypt then 85 | Result := MemoryEncrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key) 86 | else 87 | Result := MemoryDecrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key); 88 | MOut.SaveToFile(OutFile); 89 | finally 90 | MOut.Free; 91 | MIn.Free; 92 | end; 93 | end; 94 | 95 | function TextEncrypt(const s: string; Key: TWordTriple): string; 96 | begin 97 | Result := TextCrypt(s, Key, True); 98 | end; 99 | 100 | function TextDecrypt(const s: string; Key: TWordTriple): string; 101 | begin 102 | Result := TextCrypt(s, Key, False); 103 | end; 104 | 105 | function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean; 106 | begin 107 | Result := FileCrypt(InFile, OutFile, Key, True); 108 | end; 109 | 110 | function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean; 111 | begin 112 | Result := FileCrypt(InFile, OutFile, Key, False); 113 | end; 114 | 115 | end. -------------------------------------------------------------------------------- /ThirdParty/FastMM/FastMM4.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/FastMM/FastMM4.pas -------------------------------------------------------------------------------- /ThirdParty/FastMM/FastMM4Messages.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/FastMM/FastMM4Messages.pas -------------------------------------------------------------------------------- /ThirdParty/FastcodePatch.pas: -------------------------------------------------------------------------------- 1 | unit FastcodePatch; 2 | 3 | (* ***** BEGIN LICENSE BLOCK ***** 4 | * Version: MPL 1.1 5 | * 6 | * The contents of this file are subject to the Mozilla Public License Version 7 | * 1.1 (the "License"); you may not use this file except in compliance with 8 | * the License. You may obtain a copy of the License at 9 | * http://www.mozilla.org/MPL/ 10 | * 11 | * Software distributed under the License is distributed on an "AS IS" basis, 12 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 13 | * for the specific language governing rights and limitations under the 14 | * License. 15 | * 16 | * The Original Code is Fastcode 17 | * 18 | * The Initial Developer of the Original Code is Fastcode 19 | * 20 | * Portions created by the Initial Developer are Copyright (C) 2002-2005 21 | * the Initial Developer. All Rights Reserved. 22 | * 23 | * Contributor(s): 24 | * Charalabos Michael 25 | * 26 | * ***** END LICENSE BLOCK ***** *) 27 | 28 | interface 29 | 30 | function FastcodeGetAddress(AStub: Pointer): Pointer; 31 | procedure FastcodeAddressPatch(const ASource, ADestination: Pointer); 32 | 33 | implementation 34 | 35 | uses 36 | Windows; 37 | 38 | type 39 | PJump = ^TJump; 40 | TJump = packed record 41 | OpCode: Byte; 42 | Distance: Pointer; 43 | end; 44 | 45 | function FastcodeGetAddress(AStub: Pointer): Pointer; 46 | begin 47 | if PBYTE(AStub)^ = $E8 then 48 | begin 49 | Inc(Integer(AStub)); 50 | Result := Pointer(Integer(AStub) + SizeOf(Pointer) + PInteger(AStub)^); 51 | end 52 | else 53 | Result := nil; 54 | end; 55 | 56 | procedure FastcodeAddressPatch(const ASource, ADestination: Pointer); 57 | const 58 | Size = SizeOf(TJump); 59 | var 60 | NewJump: PJump; 61 | OldProtect: Cardinal; 62 | begin 63 | if VirtualProtect(ASource, Size, PAGE_EXECUTE_READWRITE, OldProtect) then 64 | begin 65 | NewJump := PJump(ASource); 66 | NewJump.OpCode := $E9; 67 | NewJump.Distance := Pointer(Integer(ADestination) - Integer(ASource) - 5); 68 | 69 | FlushInstructionCache(GetCurrentProcess, ASource, SizeOf(TJump)); 70 | VirtualProtect(ASource, Size, OldProtect, @OldProtect); 71 | end; 72 | end; 73 | 74 | end. 75 | -------------------------------------------------------------------------------- /ThirdParty/KAZip/KAZip.dcr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/KAZip/KAZip.dcr -------------------------------------------------------------------------------- /ThirdParty/KAZip/KAZipListViewRC.RES: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/KAZip/KAZipListViewRC.RES -------------------------------------------------------------------------------- /ThirdParty/KAZip/KAZipListViewRC.rc: -------------------------------------------------------------------------------- 1 | LVUP BITMAP DISCARDABLE "lvup.bmp" 2 | LVDOWN BITMAP DISCARDABLE "lvdown.bmp" 3 | FOLDER_SMALL BITMAP DISCARDABLE "FOLDER_SMALL.bmp" 4 | FOLDER_BIG BITMAP DISCARDABLE "FOLDER_BIG.bmp" 5 | -------------------------------------------------------------------------------- /ThirdParty/RegExpr.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/RegExpr.pas -------------------------------------------------------------------------------- /ThirdParty/Synapse/synautil.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/Synapse/synautil.pas -------------------------------------------------------------------------------- /ThirdParty/Synapse/synsock.pas: -------------------------------------------------------------------------------- 1 | {==============================================================================| 2 | | Project : Ararat Synapse | 005.002.003 | 3 | |==============================================================================| 4 | | Content: Socket Independent Platform Layer | 5 | |==============================================================================| 6 | | Copyright (c)1999-2013, Lukas Gebauer | 7 | | All rights reserved. | 8 | | | 9 | | Redistribution and use in source and binary forms, with or without | 10 | | modification, are permitted provided that the following conditions are met: | 11 | | | 12 | | Redistributions of source code must retain the above copyright notice, this | 13 | | list of conditions and the following disclaimer. | 14 | | | 15 | | Redistributions in binary form must reproduce the above copyright notice, | 16 | | this list of conditions and the following disclaimer in the documentation | 17 | | and/or other materials provided with the distribution. | 18 | | | 19 | | Neither the name of Lukas Gebauer nor the names of its contributors may | 20 | | be used to endorse or promote products derived from this software without | 21 | | specific prior written permission. | 22 | | | 23 | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 24 | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 25 | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 26 | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | 27 | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 28 | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | 29 | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | 30 | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 31 | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 32 | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | 33 | | DAMAGE. | 34 | |==============================================================================| 35 | | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| 36 | | Portions created by Lukas Gebauer are Copyright (c)2001-2013. | 37 | | All Rights Reserved. | 38 | |==============================================================================| 39 | | Contributor(s): | 40 | | Tomas Hajny (OS2 support) | 41 | |==============================================================================| 42 | | History: see HISTORY.HTM from distribution package | 43 | | (Found at URL: http://www.ararat.cz/synapse/) | 44 | |==============================================================================} 45 | 46 | {:@exclude} 47 | 48 | unit synsock; 49 | 50 | {$MINENUMSIZE 4} 51 | 52 | //old Delphi does not have MSWINDOWS define. 53 | {$IFDEF WIN32} 54 | {$IFNDEF MSWINDOWS} 55 | {$DEFINE MSWINDOWS} 56 | {$ENDIF} 57 | {$ENDIF} 58 | 59 | {$IFDEF CIL} 60 | {$I ssdotnet.inc} 61 | {$ELSE} 62 | {$IFDEF MSWINDOWS} 63 | {$I sswin32.inc} 64 | {$ELSE} 65 | {$IFDEF WINCE} 66 | {$I sswin32.inc} //not complete yet! 67 | {$ELSE} 68 | {$IFDEF FPC} 69 | {$IFDEF OS2} 70 | {$I ssos2ws1.inc} 71 | {$ELSE OS2} 72 | {$I ssfpc.inc} 73 | {$ENDIF OS2} 74 | {$ELSE} 75 | {$I sslinux.inc} 76 | {$ENDIF} 77 | {$ENDIF} 78 | {$ENDIF} 79 | {$ENDIF} 80 | {$IFDEF POSIX} 81 | //Posix.SysSocket 82 | {$I ssposix.inc} //experimental! 83 | {$ENDIF} 84 | 85 | end. 86 | 87 | -------------------------------------------------------------------------------- /ThirdParty/VCLFixPack.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/VCLFixPack.pas -------------------------------------------------------------------------------- /ThirdParty/WinSock2/info.txt: -------------------------------------------------------------------------------- 1 | [API] 2 | Name=WinSock2 3 | Version=2.2.x (corresponds to specification in MSDN Jan 2000) 4 | Date=05 Jan 2000 5 | Originated=Windows Sockets Version 2 6 | URL=mdsn.microsoft.com 7 | Description=Version 2 of Winsock API 8 | 9 | [CONVERSION] 10 | FileName=winsock2.pas 11 | FileDate=Feb 1998 12 | Status=READY-FOR-TESTING 13 | Version=2 14 | LastModify=03 Apr 2000 15 | OriginalFile=winsock2.h 16 | 17 | [CONVERSION] 18 | FileName=ws2tcpip.inc 19 | FileDate=Feb 2000 20 | Status=READY-FOR-TESTING 21 | Version=1 22 | LastModify=04 Mar 2000 23 | OriginalFile=ws2tcpip.h 24 | 25 | [CONVERSION] 26 | FileName=wsipx.inc 27 | FileDate=Feb 2000 28 | Status=READY-FOR-TESTING 29 | Version=1 30 | LastModify=02 Mar 2000 31 | OriginalFile=wsipx.h 32 | 33 | [CONVERSION] 34 | FileName=wsnwlink.inc 35 | FileDate=Feb 2000 36 | Status=READY-FOR-TESTING 37 | Version=1 38 | LastModify=05 Mar 2000 39 | OriginalFile=wsnwlink.h 40 | 41 | [CONVERSION] 42 | FileName=wsnetbs.inc 43 | FileDate=Feb 2000 44 | Status=READY-FOR-TESTING 45 | Version=1 46 | LastModify=09 Mar 2000 47 | OriginalFile=wsnetbs.h 48 | 49 | [CONVERSION] 50 | FileName=svcguid.pas 51 | FileDate=Feb 2000 52 | Status=READY-FOR-TESTING 53 | Version=1 54 | LastModify=04 Mar 2000 55 | OriginalFile=svcguid.h 56 | 57 | [Platform] 58 | Win31=NO 59 | Win95=YES 60 | Win98=YES 61 | Win2000=YES 62 | WinNT3=YES 63 | WinNT4=YES 64 | 65 | [Requirements] 66 | Req1=Windows95: Requires Windows Sockets 2 SDK for Windows 95 67 | 68 | [Captain] 69 | Name=Alex Konshin 70 | Email=alexk@mtgroup.ru 71 | 72 | [Converters] 73 | Converter1=Alex Konshin;alexk@mtgroup.ru;http://www.mtgroup.ru/~alexk/ 74 | 75 | [Testers] 76 | 77 | -------------------------------------------------------------------------------- /ThirdParty/WinSock2/ws2atm.inc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/WinSock2/ws2atm.inc -------------------------------------------------------------------------------- /ThirdParty/WinSock2/wsipx.inc: -------------------------------------------------------------------------------- 1 | { 2 | wsipx.h 3 | 4 | Microsoft Windows 5 | Copyright (C) Microsoft Corporation, 1992-1999. 6 | 7 | Windows Sockets include file for IPX/SPX. This file contains all 8 | standardized IPX/SPX information. Include this header file after 9 | winsock.h. 10 | 11 | To open an IPX socket, call socket() with an address family of 12 | AF_IPX, a socket type of SOCK_DGRAM, and protocol NSPROTO_IPX. 13 | Note that the protocol value must be specified, it cannot be 0. 14 | All IPX packets are sent with the packet type field of the IPX 15 | header set to 0. 16 | 17 | To open an SPX or SPXII socket, call socket() with an address 18 | family of AF_IPX, socket type of SOCK_SEQPACKET or SOCK_STREAM, 19 | and protocol of NSPROTO_SPX or NSPROTO_SPXII. If SOCK_SEQPACKET 20 | is specified, then the end of message bit is respected, and 21 | recv() calls are not completed until a packet is received with 22 | the end of message bit set. If SOCK_STREAM is specified, then 23 | the end of message bit is not respected, and recv() completes 24 | as soon as any data is received, regardless of the setting of the 25 | end of message bit. Send coalescing is never performed, and sends 26 | smaller than a single packet are always sent with the end of 27 | message bit set. Sends larger than a single packet are packetized 28 | with the end of message bit set on only the last packet of the 29 | send. 30 | } 31 | 32 | 33 | // This is the structure of the SOCKADDR structure for IPX and SPX. 34 | 35 | type 36 | 37 | SOCKADDR_IPX = packed record 38 | sa_family : u_short; 39 | sa_netnum : Array [0..3] of Char; 40 | sa_nodenum : Array [0..5] of Char; 41 | sa_socket : u_short; 42 | end; 43 | TSOCKADDR_IPX = SOCKADDR_IPX; 44 | TSockAddrIPX = SOCKADDR_IPX; 45 | PSOCKADDR_IPX = ^SOCKADDR_IPX; 46 | PSockAddrIPX = ^SOCKADDR_IPX; 47 | LPSOCKADDR_IPX = ^SOCKADDR_IPX; 48 | 49 | // Protocol families used in the "protocol" parameter of the socket() API. 50 | 51 | const 52 | NSPROTO_IPX = 1000; 53 | NSPROTO_SPX = 1256; 54 | NSPROTO_SPXII = 1257; 55 | 56 | -------------------------------------------------------------------------------- /ThirdParty/WinSock2/wsnetbs.inc: -------------------------------------------------------------------------------- 1 | // wsnetbs.h 2 | // Copyright (c) 1994-1999, Microsoft Corp. All rights reserved. 3 | // 4 | // Windows Sockets include file for NETBIOS. This file contains all 5 | // standardized NETBIOS information. Include this header file after 6 | // winsock.h. 7 | 8 | // To open a NetBIOS socket, call the socket() function as follows: 9 | // 10 | // s = socket( AF_NETBIOS, {SOCK_SEQPACKET|SOCK_DGRAM}, -Lana ); 11 | // 12 | // where Lana is the NetBIOS Lana number of interest. For example, to 13 | // open a socket for Lana 2, specify -2 as the "protocol" parameter 14 | // to the socket() function. 15 | 16 | 17 | // This is the structure of the SOCKADDR structure for NETBIOS. 18 | 19 | const 20 | NETBIOS_NAME_LENGTH = 16; 21 | 22 | type 23 | SOCKADDR_NB = packed record 24 | snb_family : Smallint; 25 | snb_type : u_short; 26 | snb_name : array[0..NETBIOS_NAME_LENGTH-1] of Char; 27 | end; 28 | TSockAddrNB = SOCKADDR_NB; 29 | PSockAddrNB = ^SOCKADDR_NB; 30 | LPSOCKADDR_NB = ^SOCKADDR_NB; 31 | 32 | // Bit values for the snb_type field of SOCKADDR_NB. 33 | const 34 | NETBIOS_UNIQUE_NAME = $0000; 35 | NETBIOS_GROUP_NAME = $0001; 36 | NETBIOS_TYPE_QUICK_UNIQUE = $0002; 37 | NETBIOS_TYPE_QUICK_GROUP = $0003; 38 | 39 | // A macro convenient for setting up NETBIOS SOCKADDRs. 40 | procedure SET_NETBIOS_SOCKADDR( snb : PSockAddrNB; const SnbType : Word; const Name : PChar; const Port : Char ); 41 | 42 | -------------------------------------------------------------------------------- /ThirdParty/jcl/ExceptDlg.dfm: -------------------------------------------------------------------------------- 1 | object ExceptionDialog: TExceptionDialog 2 | Left = 310 3 | Top = 255 4 | AutoScroll = False 5 | BorderIcons = [biSystemMenu] 6 | Caption = 'ExceptionDialog' 7 | ClientHeight = 315 8 | ClientWidth = 483 9 | Color = clBtnFace 10 | Constraints.MinWidth = 200 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'MS Sans Serif' 15 | Font.Style = [] 16 | KeyPreview = True 17 | OldCreateOrder = False 18 | Position = poScreenCenter 19 | ShowHint = True 20 | OnCreate = FormCreate 21 | OnDestroy = FormDestroy 22 | OnKeyDown = FormKeyDown 23 | OnPaint = FormPaint 24 | OnResize = FormResize 25 | OnShow = FormShow 26 | DesignSize = ( 27 | 483 28 | 315) 29 | PixelsPerInch = 96 30 | TextHeight = 13 31 | object BevelDetails: TBevel 32 | Left = 3 33 | Top = 131 34 | Width = 473 35 | Height = 9 36 | Anchors = [akLeft, akTop, akRight] 37 | Shape = bsTopLine 38 | end 39 | object SendBtn: TButton 40 | Left = 403 41 | Top = 69 42 | Width = 75 43 | Height = 25 44 | Hint = 'Create an email using default mail client' 45 | Anchors = [akTop, akRight] 46 | Caption = '&Create email' 47 | TabOrder = 0 48 | OnClick = SendBtnClick 49 | end 50 | object TextMemo: TMemo 51 | Left = 56 52 | Top = 8 53 | Width = 332 54 | Height = 115 55 | Hint = 'Use Ctrl+C to copy the report to the clipboard' 56 | Anchors = [akLeft, akTop, akRight] 57 | BorderStyle = bsNone 58 | Ctl3D = True 59 | ParentColor = True 60 | ParentCtl3D = False 61 | ReadOnly = True 62 | TabOrder = 1 63 | WantReturns = False 64 | end 65 | object OkBtn: TButton 66 | Left = 403 67 | Top = 4 68 | Width = 75 69 | Height = 25 70 | Anchors = [akTop, akRight] 71 | Caption = '&OK' 72 | Default = True 73 | ModalResult = 1 74 | TabOrder = 2 75 | end 76 | object DetailsBtn: TButton 77 | Left = 403 78 | Top = 100 79 | Width = 75 80 | Height = 25 81 | Hint = 'Show or hide additional information|' 82 | Anchors = [akTop, akRight] 83 | Caption = '&Details' 84 | Enabled = False 85 | TabOrder = 3 86 | OnClick = DetailsBtnClick 87 | end 88 | object DetailsMemo: TMemo 89 | Left = 4 90 | Top = 141 91 | Width = 472 92 | Height = 167 93 | Anchors = [akLeft, akTop, akRight, akBottom] 94 | Font.Charset = DEFAULT_CHARSET 95 | Font.Color = clWindowText 96 | Font.Height = -11 97 | Font.Name = 'Courier New' 98 | Font.Style = [] 99 | ParentColor = True 100 | ParentFont = False 101 | ReadOnly = True 102 | ScrollBars = ssBoth 103 | TabOrder = 4 104 | WantReturns = False 105 | WordWrap = False 106 | end 107 | end 108 | -------------------------------------------------------------------------------- /ThirdParty/jsbridge/delphi.inc: -------------------------------------------------------------------------------- 1 | {$IFDEF VER140} // For Delphi 6 2 | {$DEFINE D6OR7} 3 | {$ENDIF} 4 | {$IFDEF VER150} // For Delphi 7 5 | {$DEFINE D6OR7} 6 | {$ENDIF} 7 | -------------------------------------------------------------------------------- /ThirdParty/jsbridge/jsconfig.inc: -------------------------------------------------------------------------------- 1 | (* 2 | * Some conditional defines: 3 | * 4 | * JSUnicode 5 | * Enables Unicode support throughout the bridge classes. 6 | * 7 | * JSDebug 8 | * Enables more detailed debugging within the SpiderMonkey DLL. Since the 9 | * debug DLL is not distributed (for size reasons), please contact Sterling 10 | * at whoelse@sterlingbates.com for a copy. 11 | *) 12 | 13 | {$DEFINE JSUnicode} 14 | {.$DEFINE JSDebug} 15 | {.$DEFINE JSDEBUGGER} 16 | -------------------------------------------------------------------------------- /ThirdParty/jsbridge/namedarray.pas: -------------------------------------------------------------------------------- 1 | (* ***** BEGIN LICENSE BLOCK ***** 2 | * Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 | * 4 | * The contents of this file are subject to the Mozilla Public License Version 5 | * 1.1 (the "License"); you may not use this file except in compliance with 6 | * the License. You may obtain a copy of the License at 7 | * http://www.mozilla.org/MPL/ 8 | * 9 | * Software distributed under the License is distributed on an "AS IS" basis, 10 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 11 | * for the specific language governing rights and limitations under the 12 | * License. 13 | * 14 | * The Original Code is JavaScript Bridge. 15 | * 16 | * The Initial Developer of the Original Code is 17 | * Sterling Bates. 18 | * Portions created by the Initial Developer are Copyright (C) 2003 19 | * the Initial Developer. All Rights Reserved. 20 | * 21 | * Contributor(s): 22 | * 23 | * Alternatively, the contents of this file may be used under the terms of 24 | * either the GNU General Public License Version 2 or later (the "GPL"), or 25 | * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 26 | * in which case the provisions of the GPL or the LGPL are applicable instead 27 | * of those above. If you wish to allow use of your version of this file only 28 | * under the terms of either the GPL or the LGPL, and not to allow others to 29 | * use your version of this file under the terms of the MPL, indicate your 30 | * decision by deleting the provisions above and replace them with the notice 31 | * and other provisions required by the GPL or the LGPL. If you do not delete 32 | * the provisions above, a recipient may use your version of this file under 33 | * the terms of any one of the MPL, the GPL or the LGPL. 34 | * 35 | * ***** END LICENSE BLOCK ***** *) 36 | 37 | unit namedarray; 38 | 39 | interface 40 | 41 | type 42 | TNamedArray = class 43 | private 44 | FCount: Integer; 45 | FKeys: array of string; 46 | FOwnsValues: Boolean; 47 | FSize: Integer; 48 | FValues: array of Pointer; 49 | 50 | function GetItem(const Key: string): Pointer; 51 | procedure Grow; 52 | function IndexOf(const Key: string): Integer; 53 | procedure SetItem(const Key: string; const Value: Pointer); 54 | function GetIndex(Idx: Integer): Pointer; 55 | public 56 | property Count: Integer read FCount; 57 | property Item[const Key: string]: Pointer read GetItem write SetItem; default; 58 | property ItemByIndex[Idx: Integer]: Pointer read GetIndex; 59 | property OwnsValues: Boolean read FOwnsValues write FOwnsValues; 60 | 61 | constructor Create; 62 | destructor Destroy; override; 63 | 64 | procedure Add(const Key: string; const Value: Pointer); 65 | end; 66 | 67 | implementation 68 | 69 | { TNamedArray } 70 | 71 | procedure TNamedArray.Add(const Key: string; const Value: Pointer); 72 | begin 73 | Inc(FCount); 74 | if (FCount >= FSize) then 75 | Grow; 76 | FKeys[FCount - 1] := Key; 77 | UniqueString(FKeys[FCount - 1]); 78 | FValues[FCount - 1] := Value; 79 | end; 80 | 81 | constructor TNamedArray.Create; 82 | begin 83 | FSize := 0; 84 | FCount := 0; 85 | SetLength(FKeys, 0); 86 | SetLength(FValues, 0); 87 | end; 88 | 89 | destructor TNamedArray.Destroy; 90 | var 91 | i: Integer; 92 | begin 93 | if (FOwnsValues) then 94 | begin 95 | for i := 0 to FCount - 1 do 96 | if (FValues[i] <> nil) then 97 | Dispose(FValues[i]); 98 | end; 99 | 100 | SetLength(FKeys, 0); 101 | SetLength(FValues, 0); 102 | 103 | inherited; 104 | end; 105 | 106 | function TNamedArray.GetIndex(Idx: Integer): Pointer; 107 | begin 108 | Result := FValues[Idx]; 109 | end; 110 | 111 | function TNamedArray.GetItem(const Key: string): Pointer; 112 | var 113 | idx: Integer; 114 | begin 115 | idx := IndexOf(Key); 116 | if (idx <> -1) then 117 | Result := FValues[idx] 118 | else 119 | Result := nil; 120 | end; 121 | 122 | procedure TNamedArray.Grow; 123 | begin 124 | Inc(FSize, 16); 125 | SetLength(FKeys, FSize); 126 | SetLength(FValues, FSize); 127 | end; 128 | 129 | function TNamedArray.IndexOf(const Key: string): Integer; 130 | var 131 | i: Integer; 132 | begin 133 | for i := 0 to Length(FKeys) - 1 do 134 | if (FKeys[i] = Key) then 135 | begin 136 | Result := i; 137 | exit; 138 | end; 139 | Result := -1; 140 | end; 141 | 142 | procedure TNamedArray.SetItem(const Key: string; const Value: Pointer); 143 | var 144 | idx: Integer; 145 | begin 146 | idx := IndexOf(Key); 147 | if (idx <> -1) then 148 | FValues[idx] := Value 149 | else 150 | Add(Key, Value); 151 | end; 152 | 153 | end. 154 | 155 | -------------------------------------------------------------------------------- /ThirdParty/jsbridge/ptrarray.pas: -------------------------------------------------------------------------------- 1 | (* ***** BEGIN LICENSE BLOCK ***** 2 | * Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 | * 4 | * The contents of this file are subject to the Mozilla Public License Version 5 | * 1.1 (the "License"); you may not use this file except in compliance with 6 | * the License. You may obtain a copy of the License at 7 | * http://www.mozilla.org/MPL/ 8 | * 9 | * Software distributed under the License is distributed on an "AS IS" basis, 10 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 11 | * for the specific language governing rights and limitations under the 12 | * License. 13 | * 14 | * The Original Code is JavaScript Bridge. 15 | * 16 | * The Initial Developer of the Original Code is 17 | * Sterling Bates. 18 | * Portions created by the Initial Developer are Copyright (C) 2003 19 | * the Initial Developer. All Rights Reserved. 20 | * 21 | * Contributor(s): 22 | * 23 | * Alternatively, the contents of this file may be used under the terms of 24 | * either the GNU General Public License Version 2 or later (the "GPL"), or 25 | * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 26 | * in which case the provisions of the GPL or the LGPL are applicable instead 27 | * of those above. If you wish to allow use of your version of this file only 28 | * under the terms of either the GPL or the LGPL, and not to allow others to 29 | * use your version of this file under the terms of the MPL, indicate your 30 | * decision by deleting the provisions above and replace them with the notice 31 | * and other provisions required by the GPL or the LGPL. If you do not delete 32 | * the provisions above, a recipient may use your version of this file under 33 | * the terms of any one of the MPL, the GPL or the LGPL. 34 | * 35 | * ***** END LICENSE BLOCK ***** *) 36 | 37 | unit ptrarray; 38 | 39 | interface 40 | 41 | type 42 | TPtrArray = class 43 | private 44 | FCount: Integer; 45 | FKeys: Array of Pointer; 46 | FOwnsValues: Boolean; 47 | FSize: Integer; 48 | FValues: Array of TObject; 49 | 50 | function GetItem(Ptr: Pointer): TObject; 51 | procedure Grow; 52 | function IndexOf(Ptr: Pointer): Integer; 53 | procedure SetItem(Ptr: Pointer; Value: TObject); 54 | public 55 | property Item[Ptr: Pointer]: TObject read GetItem write SetItem; default; 56 | property OwnsValues: Boolean read FOwnsValues write FOwnsValues; 57 | 58 | constructor Create; 59 | destructor Destroy; override; 60 | 61 | procedure Add(Key: Pointer; Value: TObject); 62 | end; 63 | 64 | implementation 65 | 66 | { TPtrArray } 67 | 68 | procedure TPtrArray.Add(Key: Pointer; Value: TObject); 69 | begin 70 | Inc(FCount); 71 | if (FCount >= FSize) then 72 | Grow; 73 | FKeys[FCount-1] := Key; 74 | FValues[FCount-1] := Value; 75 | end; 76 | 77 | constructor TPtrArray.Create; 78 | begin 79 | FSize := 0; 80 | FCount := 0; 81 | end; 82 | 83 | destructor TPtrArray.Destroy; 84 | var 85 | i: Integer; 86 | begin 87 | inherited; 88 | 89 | if (FOwnsValues) then 90 | begin 91 | for i := 0 to FCount-1 do 92 | FValues[i].Free; 93 | end; 94 | 95 | SetLength(FKeys, 0); 96 | SetLength(FValues, 0); 97 | end; 98 | 99 | function TPtrArray.GetItem(Ptr: Pointer): TObject; 100 | var 101 | idx: Integer; 102 | begin 103 | idx := IndexOf(Ptr); 104 | if (idx <> -1) then 105 | Result := FValues[idx] 106 | else 107 | Result := nil; 108 | end; 109 | 110 | procedure TPtrArray.Grow; 111 | begin 112 | Inc(FSize, 16); 113 | SetLength(FKeys, FSize); 114 | SetLength(FValues, FSize); 115 | end; 116 | 117 | function TPtrArray.IndexOf(Ptr: Pointer): Integer; 118 | var 119 | i: Integer; 120 | begin 121 | for i := 0 to Length(FKeys)-1 do 122 | if (FKeys[i] = Ptr) then 123 | begin 124 | Result := i; 125 | exit; 126 | end; 127 | Result := -1; 128 | end; 129 | 130 | procedure TPtrArray.SetItem(Ptr: Pointer; Value: TObject); 131 | var 132 | idx: Integer; 133 | begin 134 | idx := IndexOf(Ptr); 135 | if (idx <> -1) then 136 | FValues[idx] := Value 137 | else 138 | Add(Ptr, Value); 139 | end; 140 | 141 | end. 142 | 143 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "makevssportable", "makevssportable\makevssportable.csproj", "{F2F20862-9317-4051-AF9E-39ECEE8A2884}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|x86 = Debug|x86 9 | Release|x86 = Release|x86 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {F2F20862-9317-4051-AF9E-39ECEE8A2884}.Debug|x86.ActiveCfg = Debug|x86 13 | {F2F20862-9317-4051-AF9E-39ECEE8A2884}.Debug|x86.Build.0 = Debug|x86 14 | {F2F20862-9317-4051-AF9E-39ECEE8A2884}.Release|x86.ActiveCfg = Release|x86 15 | {F2F20862-9317-4051-AF9E-39ECEE8A2884}.Release|x86.Build.0 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/ICSharpCode.SharpZipLib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/makevssportable/ICSharpCode.SharpZipLib.dll -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Forms; 4 | 5 | namespace makevssportable 6 | { 7 | static class Program 8 | { 9 | /// 10 | /// Punto di ingresso principale dell'applicazione. 11 | /// 12 | [STAThread] 13 | static void Main() 14 | { 15 | Application.EnableVisualStyles(); 16 | Application.SetCompatibleTextRenderingDefault(false); 17 | Application.Run(new frmMain()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Le informazioni generali relative a un assembly sono controllate dal seguente 6 | // set di attributi. Per modificare le informazioni associate a un assembly 7 | // occorre quindi modificare i valori di questi attributi. 8 | [assembly: AssemblyTitle("Portable VisualSubSync Tool")] 9 | [assembly: AssemblyDescription("A simple tool to create a portable installation of VisualSubSync ItaSA.")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Italiansubs.net")] 12 | [assembly: AssemblyProduct("Portable VisualSubSync Tool")] 13 | [assembly: AssemblyCopyright("Copyright © 2012 Italiansubs.net and rock3r. Licensed under the Apache License 2.0.")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili 18 | // ai componenti COM. Se è necessario accedere a un tipo in questo assembly da 19 | // COM, impostare su true l'attributo ComVisible per tale tipo. 20 | [assembly: ComVisible(false)] 21 | 22 | // Se il progetto viene esposto a COM, il GUID che segue verrà utilizzato per creare l'ID della libreria dei tipi 23 | [assembly: Guid("e957ffae-eadd-4b98-a8f4-b73df50a3cf0")] 24 | 25 | // Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori: 26 | // 27 | // Numero di versione principale 28 | // Numero di versione secondario 29 | // Numero build 30 | // Revisione 31 | // 32 | // È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build 33 | // utilizzando l'asterisco (*) come descritto di seguito: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Il codice è stato generato da uno strumento. 4 | // Versione runtime:4.0.30319.530 5 | // 6 | // Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se 7 | // il codice viene rigenerato. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace makevssportable.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// Classe di risorse fortemente tipizzata per la ricerca di stringhe localizzate e così via. 17 | /// 18 | // Questa classe è stata generata automaticamente dalla classe StronglyTypedResourceBuilder. 19 | // tramite uno strumento quale ResGen o Visual Studio. 20 | // Per aggiungere o rimuovere un membro, modificare il file con estensione ResX ed eseguire nuovamente ResGen 21 | // con l'opzione /str oppure ricompilare il progetto VS. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Restituisce l'istanza di ResourceManager nella cache utilizzata da questa classe. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("makevssportable.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Esegue l'override della proprietà CurrentUICulture del thread corrente per tutte le 51 | /// ricerche di risorse eseguite utilizzando questa classe di risorse fortemente tipizzata. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | internal static System.Drawing.Bitmap test_vss { 64 | get { 65 | object obj = ResourceManager.GetObject("test_vss", resourceCulture); 66 | return ((System.Drawing.Bitmap)(obj)); 67 | } 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Il codice è stato generato da uno strumento. 4 | // Versione runtime:4.0.30319.530 5 | // 6 | // Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se 7 | // il codice viene rigenerato. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace makevssportable.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 29 | public bool UseDefaults { 30 | get { 31 | return ((bool)(this["UseDefaults"])); 32 | } 33 | set { 34 | this["UseDefaults"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("")] 41 | public string lastOutDir { 42 | get { 43 | return ((string)(this["lastOutDir"])); 44 | } 45 | set { 46 | this["lastOutDir"] = value; 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | False 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Resources/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/makevssportable/Resources/Thumbs.db -------------------------------------------------------------------------------- /ThirdParty/makevssportable/Resources/test_vss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/makevssportable/Resources/test_vss.png -------------------------------------------------------------------------------- /ThirdParty/makevssportable/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 |
7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | False 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/frmAbout.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Text; 7 | using System.Windows.Forms; 8 | 9 | namespace makevssportable 10 | { 11 | public partial class frmAbout : Form 12 | { 13 | public frmAbout() 14 | { 15 | InitializeComponent(); 16 | } 17 | 18 | private void frmAbout_Load(object sender, EventArgs e) 19 | { 20 | Text = string.Format("About {0}", Application.ProductName); 21 | lblAppName.Text = Application.ProductName; 22 | lblVersion.Text = string.Format("Version {0}", Application.ProductVersion); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ThirdParty/makevssportable/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/makevssportable/icon.ico -------------------------------------------------------------------------------- /ThirdParty/makevssportable/makevssportable.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | http://sourceforge.net/projects/vss-itasa/ 7 | 8 | 9 | 10 | it-IT 11 | false 12 | 13 | -------------------------------------------------------------------------------- /ThirdParty/vsfilter/Icon_147.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/ThirdParty/vsfilter/Icon_147.ico -------------------------------------------------------------------------------- /ThirdParty/vsfilter/changes.txt: -------------------------------------------------------------------------------- 1 | A quick modification of VSFilter to allow VSS to load a defined subtitles file and to update the subtitles. -------------------------------------------------------------------------------- /TranslateFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object TranslateForm: TTranslateForm 2 | Left = 306 3 | Top = 321 4 | Width = 608 5 | Height = 289 6 | Caption = 'Translate' 7 | Color = clBtnFace 8 | Constraints.MinHeight = 280 9 | Constraints.MinWidth = 300 10 | Font.Charset = DEFAULT_CHARSET 11 | Font.Color = clWindowText 12 | Font.Height = -11 13 | Font.Name = 'Microsoft Sans Serif' 14 | Font.Style = [] 15 | KeyPreview = True 16 | OldCreateOrder = False 17 | Position = poOwnerFormCenter 18 | OnCreate = FormCreate 19 | OnKeyUp = FormKeyUp 20 | PixelsPerInch = 96 21 | TextHeight = 13 22 | object PanelBottom: TPanel 23 | Left = 0 24 | Top = 215 25 | Width = 592 26 | Height = 35 27 | Align = alBottom 28 | BevelOuter = bvNone 29 | TabOrder = 0 30 | DesignSize = ( 31 | 592 32 | 35) 33 | object bttOK: TTntButton 34 | Left = 440 35 | Top = 8 36 | Width = 75 37 | Height = 25 38 | Anchors = [akTop, akRight] 39 | Caption = 'OK' 40 | TabOrder = 0 41 | OnClick = bttOKClick 42 | end 43 | object bttCancel: TTntButton 44 | Left = 520 45 | Top = 8 46 | Width = 75 47 | Height = 25 48 | Anchors = [akTop, akRight] 49 | Caption = 'Cancel' 50 | TabOrder = 1 51 | OnClick = bttCancelClick 52 | end 53 | end 54 | object PanelClient: TPanel 55 | Left = 0 56 | Top = 0 57 | Width = 592 58 | Height = 215 59 | Align = alClient 60 | BevelOuter = bvNone 61 | TabOrder = 1 62 | DesignSize = ( 63 | 592 64 | 215) 65 | object rgSelectionType: TTntRadioGroup 66 | Left = 8 67 | Top = 8 68 | Width = 585 69 | Height = 81 70 | Anchors = [akLeft, akTop, akRight] 71 | Caption = ' Subtitles to translate ' 72 | Items.Strings = ( 73 | 'All (create a new file)' 74 | 'Missing only (enrich current file)') 75 | TabOrder = 0 76 | OnClick = rgSelectionTypeClick 77 | end 78 | object rgTextType: TTntRadioGroup 79 | Left = 8 80 | Top = 96 81 | Width = 585 82 | Height = 113 83 | Anchors = [akLeft, akTop, akRight] 84 | Caption = ' New subtitle text ' 85 | Items.Strings = ( 86 | 'Empty' 87 | 'Copy original text' 88 | 'Copy tags only' 89 | 'Custom text') 90 | TabOrder = 1 91 | OnClick = rgTextTypeClick 92 | end 93 | object edCustomText: TTntEdit 94 | Left = 152 95 | Top = 179 96 | Width = 433 97 | Height = 21 98 | Anchors = [akLeft, akTop, akRight] 99 | TabOrder = 2 100 | Text = '** untranslated **' 101 | end 102 | object edTargetFile: TTntEdit 103 | Left = 144 104 | Top = 26 105 | Width = 409 106 | Height = 21 107 | Anchors = [akLeft, akTop, akRight] 108 | TabOrder = 3 109 | end 110 | object bttBrowseTargetFile: TTntButton 111 | Left = 552 112 | Top = 24 113 | Width = 35 114 | Height = 25 115 | Anchors = [akTop, akRight] 116 | Caption = '...' 117 | TabOrder = 4 118 | OnClick = bttBrowseTargetFileClick 119 | end 120 | end 121 | object TntSaveDialog1: TTntSaveDialog 122 | Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing] 123 | Left = 736 124 | Top = 152 125 | end 126 | end 127 | -------------------------------------------------------------------------------- /UndoableTaskUnit.pas: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2007 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | unit UndoableTaskUnit; 22 | 23 | interface 24 | 25 | type 26 | TUndoableTask = class(TObject) 27 | public 28 | procedure DoTask; virtual; abstract; 29 | function GetName : WideString; virtual; abstract; 30 | function Merge(UndoableTask : TUndoableTask) : Boolean; virtual; 31 | procedure UndoTask; virtual; abstract; 32 | end; 33 | 34 | implementation 35 | 36 | function TUndoableTask.Merge(UndoableTask : TUndoableTask) : Boolean; 37 | begin 38 | // Nothing to merge by default 39 | Result := False; 40 | end; 41 | 42 | end. 43 | -------------------------------------------------------------------------------- /VSSProjectGroup.bpg: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------------ 2 | VERSION = BWS.01 3 | #------------------------------------------------------------------------------ 4 | !ifndef ROOT 5 | ROOT = $(MAKEDIR)\.. 6 | !endif 7 | #------------------------------------------------------------------------------ 8 | MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** 9 | DCC = $(ROOT)\bin\dcc32.exe $** 10 | BRCC = $(ROOT)\bin\brcc32.exe $** 11 | #------------------------------------------------------------------------------ 12 | PROJECTS = VisualSubSync.exe VisualSubSyncTests.exe 13 | #------------------------------------------------------------------------------ 14 | default: $(PROJECTS) 15 | #------------------------------------------------------------------------------ 16 | 17 | 18 | VisualSubSync.exe: VisualSubSync.dpr 19 | $(DCC) 20 | 21 | VisualSubSyncTests.exe: dunit\VisualSubSyncTests.dpr 22 | $(DCC) 23 | 24 | 25 | -------------------------------------------------------------------------------- /VerticalScalingFormUnit.pas: -------------------------------------------------------------------------------- 1 | unit VerticalScalingFormUnit; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, ComCtrls, ExtCtrls, WAVDisplayerUnit; 8 | 9 | type 10 | TVerticalScalingForm = class(TForm) 11 | GroupBox1: TGroupBox; 12 | ScalingTrackBar: TTrackBar; 13 | Label2: TLabel; 14 | Label3: TLabel; 15 | Label5: TLabel; 16 | Label6: TLabel; 17 | Label4: TLabel; 18 | bttReset: TButton; 19 | Label1: TLabel; 20 | Label7: TLabel; 21 | Label8: TLabel; 22 | Label9: TLabel; 23 | procedure bttResetClick(Sender: TObject); 24 | procedure ScalingTrackBarChange(Sender: TObject); 25 | procedure FormShow(Sender: TObject); 26 | procedure FormKeyDown(Sender: TObject; var Key: Word; 27 | Shift: TShiftState); 28 | private 29 | { Private declarations } 30 | FWAVDisplayer : TWAVDisplayer; 31 | public 32 | { Public declarations } 33 | constructor Create(AOwner: TComponent; WAVDisplayer : TWAVDisplayer); reintroduce; 34 | end; 35 | 36 | var 37 | VerticalScalingForm: TVerticalScalingForm; 38 | 39 | implementation 40 | 41 | uses main; 42 | 43 | {$R *.dfm} 44 | 45 | constructor TVerticalScalingForm.Create(AOwner: TComponent; 46 | WAVDisplayer : TWAVDisplayer); 47 | begin 48 | inherited Create(AOwner); 49 | FWAVDisplayer := WAVDisplayer; 50 | end; 51 | 52 | procedure TVerticalScalingForm.bttResetClick(Sender: TObject); 53 | begin 54 | ScalingTrackBar.Position := 100; 55 | end; 56 | 57 | procedure TVerticalScalingForm.ScalingTrackBarChange(Sender: TObject); 58 | begin 59 | FWAVDisplayer.VerticalScaling := ScalingTrackBar.Position; 60 | GroupBox1.Caption := Format(' Scaling : %d%% ',[ScalingTrackBar.Position]); 61 | MainForm.CurrentProject.IsDirty := True; 62 | end; 63 | 64 | procedure TVerticalScalingForm.FormShow(Sender: TObject); 65 | begin 66 | ScalingTrackBar.Position := FWAVDisplayer.VerticalScaling; 67 | end; 68 | 69 | procedure TVerticalScalingForm.FormKeyDown(Sender: TObject; var Key: Word; 70 | Shift: TShiftState); 71 | begin 72 | if (Key = VK_ESCAPE) then 73 | begin 74 | Close; 75 | end; 76 | end; 77 | 78 | end. 79 | -------------------------------------------------------------------------------- /VistaAltFixD7/VistaAltFixD7.dof: -------------------------------------------------------------------------------- 1 | [FileVersion] 2 | Version=7.0 3 | [Compiler] 4 | A=8 5 | B=0 6 | C=1 7 | D=1 8 | E=0 9 | F=0 10 | G=1 11 | H=1 12 | I=1 13 | J=0 14 | K=0 15 | L=1 16 | M=0 17 | N=1 18 | O=1 19 | P=1 20 | Q=0 21 | R=0 22 | S=0 23 | T=0 24 | U=0 25 | V=1 26 | W=0 27 | X=1 28 | Y=1 29 | Z=1 30 | ShowHints=1 31 | ShowWarnings=1 32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; 33 | NamespacePrefix= 34 | SymbolDeprecated=1 35 | SymbolLibrary=1 36 | SymbolPlatform=1 37 | UnitLibrary=1 38 | UnitPlatform=1 39 | UnitDeprecated=1 40 | HResultCompat=1 41 | HidingMember=1 42 | HiddenVirtual=1 43 | Garbage=1 44 | BoundsError=1 45 | ZeroNilCompat=1 46 | StringConstTruncated=1 47 | ForLoopVarVarPar=1 48 | TypedConstVarPar=1 49 | AsgToTypedConst=1 50 | CaseLabelRange=1 51 | ForVariable=1 52 | ConstructingAbstract=1 53 | ComparisonFalse=1 54 | ComparisonTrue=1 55 | ComparingSignedUnsigned=1 56 | CombiningSignedUnsigned=1 57 | UnsupportedConstruct=1 58 | FileOpen=1 59 | FileOpenUnitSrc=1 60 | BadGlobalSymbol=1 61 | DuplicateConstructorDestructor=1 62 | InvalidDirective=1 63 | PackageNoLink=1 64 | PackageThreadVar=1 65 | ImplicitImport=1 66 | HPPEMITIgnored=1 67 | NoRetVal=1 68 | UseBeforeDef=1 69 | ForLoopVarUndef=1 70 | UnitNameMismatch=1 71 | NoCFGFileFound=1 72 | MessageDirective=1 73 | ImplicitVariants=1 74 | UnicodeToLocale=1 75 | LocaleToUnicode=1 76 | ImagebaseMultiple=1 77 | SuspiciousTypecast=1 78 | PrivatePropAccessor=1 79 | UnsafeType=0 80 | UnsafeCode=0 81 | UnsafeCast=0 82 | [Linker] 83 | MapFile=0 84 | OutputObjs=0 85 | ConsoleApp=1 86 | DebugInfo=0 87 | RemoteSymbols=0 88 | MinStackSize=16384 89 | MaxStackSize=1048576 90 | ImageBase=4194304 91 | ExeDescription= 92 | [Directories] 93 | OutputDir= 94 | UnitOutputDir= 95 | PackageDLLOutputDir= 96 | PackageDCPOutputDir= 97 | SearchPath= 98 | Packages= 99 | Conditionals= 100 | DebugSourceDirs= 101 | UsePackages=0 102 | [Parameters] 103 | RunParams= 104 | HostApplication= 105 | Launcher= 106 | UseLauncher=0 107 | DebugCWD= 108 | [Language] 109 | ActiveLang= 110 | ProjectLang= 111 | RootDir= 112 | [Version Info] 113 | IncludeVerInfo=1 114 | AutoIncBuild=0 115 | MajorVer=1 116 | MinorVer=0 117 | Release=0 118 | Build=0 119 | Debug=0 120 | PreRelease=0 121 | Special=0 122 | Private=0 123 | DLL=0 124 | Locale=1040 125 | CodePage=1252 126 | [Version Info Keys] 127 | CompanyName= 128 | FileDescription= 129 | FileVersion=1.0.0.0 130 | InternalName= 131 | LegalCopyright= 132 | LegalTrademarks= 133 | OriginalFilename= 134 | ProductName= 135 | ProductVersion=1.0.0.0 136 | Comments= 137 | -------------------------------------------------------------------------------- /VistaAltFixD7/VistaAltFixD7.dpk: -------------------------------------------------------------------------------- 1 | package VistaAltFixD7; 2 | 3 | {$R *.res} 4 | {$ALIGN 8} 5 | {$ASSERTIONS ON} 6 | {$BOOLEVAL OFF} 7 | {$DEBUGINFO ON} 8 | {$EXTENDEDSYNTAX ON} 9 | {$IMPORTEDDATA ON} 10 | {$IOCHECKS ON} 11 | {$LOCALSYMBOLS ON} 12 | {$LONGSTRINGS ON} 13 | {$OPENSTRINGS ON} 14 | {$OPTIMIZATION ON} 15 | {$OVERFLOWCHECKS OFF} 16 | {$RANGECHECKS OFF} 17 | {$REFERENCEINFO ON} 18 | {$SAFEDIVIDE OFF} 19 | {$STACKFRAMES OFF} 20 | {$TYPEDADDRESS OFF} 21 | {$VARSTRINGCHECKS ON} 22 | {$WRITEABLECONST OFF} 23 | {$MINENUMSIZE 1} 24 | {$IMAGEBASE $400000} 25 | {$IMPLICITBUILD OFF} 26 | 27 | requires 28 | rtl, 29 | vcl; 30 | 31 | contains 32 | VistaAltFixUnit in 'VistaAltFixUnit.pas'; 33 | 34 | end. 35 | -------------------------------------------------------------------------------- /VistaAltFixD7/VistaAltFixD7.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/VistaAltFixD7/VistaAltFixD7.res -------------------------------------------------------------------------------- /VistaAltFixD7/VistaAltFixUnit.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/VistaAltFixD7/VistaAltFixUnit.pas -------------------------------------------------------------------------------- /VisualSubSync.dof: -------------------------------------------------------------------------------- 1 | [FileVersion] 2 | Version=7.0 3 | [Compiler] 4 | A=8 5 | B=0 6 | C=0 7 | D=1 8 | E=0 9 | F=0 10 | G=1 11 | H=1 12 | I=1 13 | J=0 14 | K=0 15 | L=1 16 | M=0 17 | N=1 18 | O=1 19 | P=1 20 | Q=0 21 | R=0 22 | S=0 23 | T=0 24 | U=0 25 | V=1 26 | W=0 27 | X=1 28 | Y=1 29 | Z=1 30 | ShowHints=0 31 | ShowWarnings=0 32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; 33 | NamespacePrefix= 34 | SymbolDeprecated=1 35 | SymbolLibrary=1 36 | SymbolPlatform=0 37 | UnitLibrary=1 38 | UnitPlatform=0 39 | UnitDeprecated=1 40 | HResultCompat=1 41 | HidingMember=1 42 | HiddenVirtual=1 43 | Garbage=1 44 | BoundsError=1 45 | ZeroNilCompat=1 46 | StringConstTruncated=1 47 | ForLoopVarVarPar=1 48 | TypedConstVarPar=1 49 | AsgToTypedConst=1 50 | CaseLabelRange=1 51 | ForVariable=1 52 | ConstructingAbstract=1 53 | ComparisonFalse=1 54 | ComparisonTrue=1 55 | ComparingSignedUnsigned=1 56 | CombiningSignedUnsigned=1 57 | UnsupportedConstruct=1 58 | FileOpen=1 59 | FileOpenUnitSrc=1 60 | BadGlobalSymbol=1 61 | DuplicateConstructorDestructor=1 62 | InvalidDirective=1 63 | PackageNoLink=1 64 | PackageThreadVar=1 65 | ImplicitImport=1 66 | HPPEMITIgnored=1 67 | NoRetVal=1 68 | UseBeforeDef=1 69 | ForLoopVarUndef=1 70 | UnitNameMismatch=1 71 | NoCFGFileFound=1 72 | MessageDirective=1 73 | ImplicitVariants=1 74 | UnicodeToLocale=1 75 | LocaleToUnicode=1 76 | ImagebaseMultiple=1 77 | SuspiciousTypecast=1 78 | PrivatePropAccessor=1 79 | UnsafeType=0 80 | UnsafeCode=0 81 | UnsafeCast=0 82 | [Linker] 83 | MapFile=0 84 | OutputObjs=0 85 | ConsoleApp=1 86 | DebugInfo=0 87 | RemoteSymbols=0 88 | MinStackSize=16384 89 | MaxStackSize=1048576 90 | ImageBase=4194304 91 | ExeDescription= 92 | [Directories] 93 | OutputDir=C:\Program Files (x86)\VisualSubSyncForItaliansubs 94 | UnitOutputDir=dcu 95 | PackageDLLOutputDir= 96 | PackageDCPOutputDir= 97 | SearchPath=.\ThirdParty;.\ThirdParty\DirectX;.\ThirdParty\jsbridge;.\ThirdParty\WinSock2;.\ThirdParty\FastMM 98 | Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;MiscCompo;FlatStyle_D6;CCCompo;RegComponents6;CoolTrayIcon_D6;SxMagD5 99 | Conditionals= 100 | DebugSourceDirs=.\ThirdParty;.\ThirdParty\DirectX;.\ThirdParty\jsbridge;.\ThirdParty\WinSock2;.\ThirdParty\FastMM;.\ThirdParty\DirectX 101 | UsePackages=0 102 | [Parameters] 103 | RunParams= 104 | HostApplication= 105 | Launcher= 106 | UseLauncher=0 107 | DebugCWD= 108 | RemoteHost=192.168.1.68 109 | RemotePath=C:\shared\vss\VisualSubSync.exe 110 | [Language] 111 | ActiveLang= 112 | ProjectLang= 113 | RootDir=F:\Borland\Delphi7\Bin\ 114 | [Version Info] 115 | IncludeVerInfo=1 116 | AutoIncBuild=0 117 | MajorVer=1 118 | MinorVer=0 119 | Release=2 120 | Build=13 121 | Debug=0 122 | PreRelease=0 123 | Special=0 124 | Private=0 125 | DLL=0 126 | Locale=1040 127 | CodePage=1252 128 | [Version Info Keys] 129 | CompanyName=Italiansubs.net 130 | FileDescription=VisualSubSync 131 | FileVersion=1.0.2.13 132 | InternalName= 133 | LegalCopyright= 134 | LegalTrademarks= 135 | OriginalFilename= 136 | ProductName=VisualSubSync 137 | ProductVersion=1.0.0.0 138 | Comments=https://sourceforge.net/projects/vss-itasa/ 139 | [HistoryLists\hlDebugSourcePath] 140 | Count=1 141 | Item0=.\ThirdParty;.\ThirdParty\DirectX;.\ThirdParty\jsbridge;.\ThirdParty\WinSock2;.\ThirdParty\FastMM;.\ThirdParty\DirectX 142 | [HistoryLists\hlUnitAliases] 143 | Count=1 144 | Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; 145 | [HistoryLists\hlSearchPath] 146 | Count=1 147 | Item0=.\ThirdParty;.\ThirdParty\DirectX;.\ThirdParty\jsbridge;.\ThirdParty\WinSock2;.\ThirdParty\FastMM 148 | [HistoryLists\hlUnitOutputDirectory] 149 | Count=1 150 | Item0=dcu 151 | [HistoryLists\hlOutputDirectorry] 152 | Count=3 153 | Item0=C:\Program Files (x86)\VisualSubSyncForItaliansubs 154 | Item1=C:\Program Files (x86)\(x86)\VisualSubSyncForItaliansubs 155 | Item2=C:\Program Files (x86)\VisualSubSync ItaSA 156 | -------------------------------------------------------------------------------- /VisualSubSync.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/VisualSubSync.res -------------------------------------------------------------------------------- /VisualSubSyncEnh.dpr: -------------------------------------------------------------------------------- 1 | program VisualSubSyncEnh; 2 | 3 | uses 4 | VCLFixPack, 5 | Windows, 6 | Forms, 7 | TntSystem, 8 | main in 'main.pas' {MainForm}, 9 | WAVDisplayerUnit in 'WAVDisplayerUnit.pas', 10 | WAVFileUnit in 'WAVFileUnit.pas', 11 | Renderer in 'Renderer.pas', 12 | MiniScrollBarUnit in 'MiniScrollBarUnit.pas', 13 | MiscToolsUnit in 'MiscToolsUnit.pas', 14 | ProjectUnit in 'ProjectUnit.pas' {ProjectForm}, 15 | WAVExtractFormUnit in 'WAVExtractFormUnit.pas' {ExtractWAVForm}, 16 | FindFormUnit in 'FindFormUnit.pas' {FindForm}, 17 | PeakCreationProgressFormUnit in 'PeakCreationProgressFormUnit.pas' {PeakCreationProgressForm}, 18 | AboutFormUnit in 'AboutFormUnit.pas' {AboutForm}, 19 | ServerUnit in 'ServerUnit.pas', 20 | DynamicPageProcessorUnit in 'DynamicPageProcessorUnit.pas', 21 | ErrorReportFormUnit in 'ErrorReportFormUnit.pas' {ErrorReportForm}, 22 | DelayFormUnit in 'DelayFormUnit.pas' {DelayForm}, 23 | PageProcessorUnit in 'PageProcessorUnit.pas', 24 | SubStructUnit in 'SubStructUnit.pas', 25 | SuggestionFormUnit in 'SuggestionFormUnit.pas' {SuggestionForm}, 26 | GotoFormUnit in 'GotoFormUnit.pas' {GotoForm}, 27 | PreferencesFormUnit in 'PreferencesFormUnit.pas' {PreferencesForm}, 28 | MRUListUnit in 'MRUListUnit.pas', 29 | VerticalScalingFormUnit in 'VerticalScalingFormUnit.pas' {VerticalScalingForm}, 30 | DetachedVideoFormUnit in 'DetachedVideoFormUnit.pas' {DetachedVideoForm}, 31 | JavaScriptPluginUnit in 'JavaScriptPluginUnit.pas', 32 | LogWindowFormUnit in 'LogWindowFormUnit.pas' {LogForm}, 33 | CursorManager in 'CursorManager.pas', 34 | tom_TLB in 'tom_TLB.pas', 35 | StyleFormUnit in 'StyleFormUnit.pas' {StyleForm}, 36 | SSAParserUnit in 'SSAParserUnit.pas', 37 | DirectVobsubInterface in 'DirectVobsubInterface.pas', 38 | TntRichEditCustomUndoUnit in 'TntRichEditCustomUndoUnit.pas', 39 | UndoableTaskUnit in 'UndoableTaskUnit.pas', 40 | UndoableSubTaskUnit in 'UndoableSubTaskUnit.pas', 41 | FileReaderUnit in 'FileReaderUnit.pas', 42 | MatroskaHelper in 'MatroskaHelper.pas', 43 | MP4File in 'MP4File.pas', 44 | FLVFile in 'FLVFile.pas', 45 | SceneChangeUnit in 'SceneChangeUnit.pas', 46 | GlobalUnit in 'GlobalUnit.pas', 47 | SRTParserUnit in 'SRTParserUnit.pas', 48 | SilentZoneFormUnit in 'SilentZoneFormUnit.pas' {SilentZoneForm}, 49 | LibHunspellUnit in 'LibHunspellUnit.pas', 50 | BgThreadTaskUnit in 'BgThreadTaskUnit.pas', 51 | SpellCheckFormUnit in 'SpellCheckFormUnit.pas' {SpellCheckForm}, 52 | VSSClipboardUnit in 'VSSClipboardUnit.pas', 53 | TranslateFormUnit in 'TranslateFormUnit.pas' {TranslateForm}, 54 | MediaInfoDll in 'MediaInfoDLL.pas', 55 | ResynchToolFormUnit in 'ResynchToolFormUnit.pas' {ResynchToolForm}, 56 | DSiWin32 in 'ThirdParty\DSiWin32.pas', 57 | LavVideoSettingsInterface in 'LavVideoSettingsInterface.pas', 58 | LavAudioSettingsInterface in 'LavAudioSettingsInterface.pas', 59 | LavSplitterSettingsInterface in 'LavSplitterSettingsInterface.pas', 60 | Diff in 'Diff.pas', 61 | DiffSubsFormUnit in 'DiffSubsFormUnit.pas' {DiffSubsForm}, 62 | HashUnit in 'HashUnit.pas', 63 | blcksock in 'ThirdParty\Synapse\blcksock.pas', 64 | httpsend in 'ThirdParty\Synapse\httpsend.pas', 65 | SubtitleTimingFormUnit in 'SubtitleTimingFormUnit.pas', 66 | Md5 in 'ThirdParty\MD5.pas', 67 | MidasLib, 68 | SourceFileOperationCancel in 'SourceFileOperationCancel.pas' {SourceFileOperationCancel}; 69 | 70 | {$R *.res} 71 | {$R Resources\resources.RES} 72 | 73 | begin 74 | Application.Initialize; 75 | 76 | // Fix ANSI handling (using the thread code page doesn't work correctly on some system) 77 | // e.g.: Tnt is broken when loading an ANSI file through TTntStringList.LoadFromFile is doesn't use the righ code page 78 | // TntSystem.InstallTntSystemUpdates([tsFixImplicitCodePage]); 79 | // EDIT : this is breaking UTF-8 support, we do the conversion using GetACP (see WC2MB and MC2WC in MiscUnit) 80 | 81 | Application.Title := 'VisualSubSync'; 82 | Application.CreateForm(TMainForm, MainForm); 83 | Application.CreateForm(TProjectForm, ProjectForm); 84 | Application.CreateForm(TFindForm, FindForm); 85 | Application.CreateForm(TErrorReportForm, ErrorReportForm); 86 | Application.CreateForm(TSuggestionForm, SuggestionForm); 87 | Application.CreateForm(TDetachedVideoForm, DetachedVideoForm); 88 | Application.CreateForm(TResynchToolForm, ResynchToolForm); 89 | Application.CreateForm(TDiffSubsForm, DiffSubsForm); 90 | MainForm.InitGeneralJSPlugin; 91 | MainForm.LoadSettings; 92 | MainForm.FinishLoadSettings; 93 | Application.ProcessMessages; 94 | MainForm.ProcessParams; 95 | MainForm.LoadAfterParamsSettings; 96 | Application.Run; 97 | end. 98 | -------------------------------------------------------------------------------- /VisualSubSyncEnh.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/VisualSubSyncEnh.res -------------------------------------------------------------------------------- /WAVExtractFormUnit.dfm: -------------------------------------------------------------------------------- 1 | object ExtractWAVForm: TExtractWAVForm 2 | Left = 332 3 | Top = 220 4 | BorderIcons = [biSystemMenu, biMinimize] 5 | BorderStyle = bsSingle 6 | BorderWidth = 4 7 | Caption = 'Extract WAV' 8 | ClientHeight = 504 9 | ClientWidth = 483 10 | Color = clBtnFace 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Microsoft Sans Serif' 15 | Font.Style = [] 16 | KeyPreview = True 17 | OldCreateOrder = False 18 | Position = poOwnerFormCenter 19 | OnActivate = FormActivate 20 | OnClose = FormClose 21 | OnCreate = FormCreate 22 | OnKeyDown = FormKeyDown 23 | PixelsPerInch = 96 24 | TextHeight = 13 25 | object TntLabel3: TTntLabel 26 | Left = 0 27 | Top = 437 28 | Width = 47 29 | Height = 13 30 | Caption = 'Progress :' 31 | end 32 | object TntGroupBox1: TTntGroupBox 33 | Left = 0 34 | Top = 0 35 | Width = 481 36 | Height = 291 37 | Caption = ' Video/Audio info : ' 38 | TabOrder = 0 39 | object MemoVideoInfo: TTntMemo 40 | Left = 8 41 | Top = 15 42 | Width = 464 43 | Height = 267 44 | ReadOnly = True 45 | ScrollBars = ssVertical 46 | TabOrder = 0 47 | end 48 | end 49 | object bttExtract: TTntButton 50 | Left = 27 51 | Top = 471 52 | Width = 75 53 | Height = 25 54 | Caption = 'Extract' 55 | TabOrder = 1 56 | OnClick = bttExtractClick 57 | end 58 | object bttClose: TTntButton 59 | Left = 379 60 | Top = 471 61 | Width = 75 62 | Height = 25 63 | Caption = 'Cancel' 64 | TabOrder = 2 65 | OnClick = bttCloseClick 66 | end 67 | object ProgressBar1: TProgressBar 68 | Left = 56 69 | Top = 431 70 | Width = 423 71 | Height = 25 72 | Max = 1000 73 | Smooth = True 74 | TabOrder = 3 75 | end 76 | object gbSettings: TTntGroupBox 77 | Left = 0 78 | Top = 306 79 | Width = 481 80 | Height = 116 81 | Caption = ' Settings : ' 82 | TabOrder = 4 83 | object TntLabelStreamToExtract: TTntLabel 84 | Left = 8 85 | Top = 24 86 | Width = 86 87 | Height = 13 88 | Caption = 'Stream to extract :' 89 | Visible = False 90 | end 91 | object cbStreamIndex: TComboBox 92 | Left = 104 93 | Top = 20 94 | Width = 369 95 | Height = 21 96 | Style = csDropDownList 97 | ItemHeight = 13 98 | TabOrder = 0 99 | Visible = False 100 | end 101 | object rbFastConversion: TRadioButton 102 | Tag = 2 103 | Left = 8 104 | Top = 88 105 | Width = 401 106 | Height = 17 107 | Caption = 'Convert to reduce file size (Mono + Sample rate divided by 2)' 108 | ParentShowHint = False 109 | ShowHint = False 110 | TabOrder = 1 111 | OnClick = rbOnlyPeakClick 112 | end 113 | object rbNoConversion: TRadioButton 114 | Tag = 1 115 | Left = 8 116 | Top = 68 117 | Width = 113 118 | Height = 17 119 | Caption = 'Simple extraction' 120 | TabOrder = 2 121 | OnClick = rbOnlyPeakClick 122 | end 123 | object rbOnlyPeak: TRadioButton 124 | Left = 8 125 | Top = 48 126 | Width = 137 127 | Height = 17 128 | Caption = 'Only create peak file' 129 | Checked = True 130 | TabOrder = 3 131 | TabStop = True 132 | OnClick = rbOnlyPeakClick 133 | end 134 | end 135 | object bttStop: TTntButton 136 | Left = 107 137 | Top = 471 138 | Width = 75 139 | Height = 25 140 | Caption = 'Stop' 141 | TabOrder = 5 142 | OnClick = bttStopClick 143 | end 144 | object bttDebug: TTntButton 145 | Left = 235 146 | Top = 471 147 | Width = 75 148 | Height = 25 149 | Caption = 'Debug' 150 | TabOrder = 6 151 | OnClick = bttDebugClick 152 | end 153 | object Timer1: TTimer 154 | Enabled = False 155 | Interval = 500 156 | OnTimer = Timer1Timer 157 | Left = 368 158 | Top = 24 159 | end 160 | end 161 | -------------------------------------------------------------------------------- /WavWriter/IWavWriter.h: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2003 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | 22 | #ifndef _IWAVWRITER_H_ 23 | #define _IWAVWRITER_H_ 24 | 25 | #ifdef __cplusplus 26 | extern "C" { 27 | #endif 28 | 29 | // {3B7A03CE-3D3B-4fef-8CDE-3D6C2709AFF1} 30 | DEFINE_GUID(IID_IWavWriter, 31 | 0x3b7a03ce, 0x3d3b, 0x4fef, 0x8c, 0xde, 0x3d, 0x6c, 0x27, 0x9, 0xaf, 0xf1); 32 | 33 | // 34 | // IWavWriter 35 | // 36 | DECLARE_INTERFACE_(IWavWriter, IUnknown) { 37 | STDMETHOD(SetFastConversionMode)(DWORD FastConvertMode) = 0; 38 | STDMETHOD(GetFastConversionMode)(DWORD *FastConvertMode) = 0; 39 | STDMETHOD(SetSamplesPerPeakRatio)(DWORD SamplePerPeakRatio) = 0; 40 | STDMETHOD(SetWritePeakFile)(DWORD WritePeakFile) = 0; 41 | STDMETHOD(SetPeakFileName)(LPCOLESTR pszFileName) = 0; 42 | STDMETHOD(SetWriteWavFile)(DWORD WriteWavFile) = 0; 43 | }; 44 | 45 | #ifdef __cplusplus 46 | } 47 | #endif 48 | 49 | // ----------------------------------------------------------------------------- 50 | #endif // _IWAVWRITER_H_ 51 | // ----------------------------------------------------------------------------- -------------------------------------------------------------------------------- /WavWriter/WAVFile.h: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2003 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | 22 | // ---------------------------------------------------------------------------- 23 | // Very basic WAV file class handling 24 | // ---------------------------------------------------------------------------- 25 | 26 | typedef enum { 27 | CWin32File_READ_MODE, 28 | CWin32File_WRITE_MODE 29 | } CWin32FileOpenMode; 30 | 31 | class CWin32File 32 | { 33 | public: 34 | CWin32File() : m_hFile(INVALID_HANDLE_VALUE), m_i64FileSize(0) { } 35 | ~CWin32File() { Close(); } 36 | int Open(TCHAR* Filename, CWin32FileOpenMode OpenMode); 37 | int Open2(LPOLESTR Filename, CWin32FileOpenMode OpenMode); 38 | unsigned int Read(void *Buffer, unsigned int Size); 39 | unsigned int Write(void *Buffer, unsigned int Size); 40 | bool CanSeek() { return true; } 41 | __int64 Seek(__int64 Offset, int Origin); 42 | __int64 Position(); 43 | __int64 Size() { return m_i64FileSize; } 44 | void Close(); 45 | 46 | private: 47 | HANDLE m_hFile; 48 | __int64 m_i64FileSize; 49 | }; 50 | 51 | // ---------------------------------------------------------------------------- 52 | 53 | class CWAVFileWriter 54 | { 55 | public: 56 | CWAVFileWriter() : m_File(NULL) { } 57 | 58 | virtual ~CWAVFileWriter() 59 | { 60 | Close(); 61 | } 62 | 63 | bool Init(LPOLESTR Filename, WAVEFORMATEX* wf) 64 | { 65 | m_File = new CWin32File(); 66 | if(!m_File->Open2(Filename,CWin32File_WRITE_MODE)) 67 | { 68 | return false; 69 | } 70 | 71 | m_DataHdrOffset = 0; 72 | m_PCMDataSize = 0; 73 | 74 | return WriteRIFFHeader(0) && // Dummy value 75 | WriteFORMATHeader(wf) && 76 | WriteDATAHeader(0); // Dummy value 77 | } 78 | 79 | bool WritePCMData(void* Data, unsigned int Size) 80 | { 81 | unsigned int DataWritten = m_File->Write(Data,Size); 82 | m_PCMDataSize += DataWritten; 83 | return (DataWritten == Size); 84 | } 85 | 86 | private: 87 | bool WriteRIFFHeader(unsigned int Size) 88 | { 89 | return (m_File->Write("RIFF", 4) == 4) && 90 | (m_File->Write(&Size, 4) == 4) && // This is file size - 8. 91 | (m_File->Write("WAVE", 4) == 4); 92 | } 93 | 94 | bool WriteFORMATHeader(WAVEFORMATEX* wf) 95 | { 96 | unsigned int Size = sizeof(WAVEFORMATEX); 97 | return (m_File->Write("fmt ", 4) == 4) && 98 | (m_File->Write(&Size, 4) == 4) && 99 | (m_File->Write(wf, Size) == Size); 100 | } 101 | 102 | HRESULT WriteDATAHeader(unsigned int Size) 103 | { 104 | m_DataHdrOffset = (unsigned int)m_File->Position(); 105 | return (m_File->Write("data", 4) == 4) && 106 | (m_File->Write(&Size, 4) == 4); // PCM data size 107 | } 108 | 109 | void PatchHeaders() 110 | { 111 | // Get file size (we are already at the end :)) 112 | unsigned int Filesize = (unsigned int)m_File->Position(); 113 | m_File->Seek(0,FILE_BEGIN); 114 | 115 | // Rewrite RIFF header 116 | WriteRIFFHeader(Filesize-8); 117 | 118 | // Write data size now 119 | m_File->Seek(m_DataHdrOffset,FILE_BEGIN); 120 | WriteDATAHeader(m_PCMDataSize); 121 | } 122 | 123 | void Close() 124 | { 125 | if (m_File) { 126 | PatchHeaders(); 127 | delete m_File; 128 | m_File = NULL; 129 | } 130 | } 131 | 132 | CWin32File* m_File; 133 | unsigned int m_DataHdrOffset; 134 | unsigned int m_PCMDataSize; 135 | }; 136 | 137 | // ---------------------------------------------------------------------------- -------------------------------------------------------------------------------- /WavWriter/WavWriter.def: -------------------------------------------------------------------------------- 1 | LIBRARY WavWriter.dll 2 | 3 | EXPORTS 4 | DllMain PRIVATE 5 | DllGetClassObject PRIVATE 6 | DllCanUnloadNow PRIVATE 7 | DllRegisterServer PRIVATE 8 | DllUnregisterServer PRIVATE 9 | -------------------------------------------------------------------------------- /WavWriter/WavWriter.dsw: -------------------------------------------------------------------------------- 1 | Microsoft Developer Studio Workspace File, Format Version 6.00 2 | # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! 3 | 4 | ############################################################################### 5 | 6 | Project: "BaseClasses"="..\..\..\..\..\DXSDK\Samples\C++\DirectShow\BaseClasses\baseclasses.dsp" - Package Owner=<4> 7 | 8 | Package=<5> 9 | {{{ 10 | }}} 11 | 12 | Package=<4> 13 | {{{ 14 | }}} 15 | 16 | ############################################################################### 17 | 18 | Project: "WavWriter"=.\WavWriter.dsp - Package Owner=<4> 19 | 20 | Package=<5> 21 | {{{ 22 | }}} 23 | 24 | Package=<4> 25 | {{{ 26 | Begin Project Dependency 27 | Project_Dep_Name BaseClasses 28 | End Project Dependency 29 | }}} 30 | 31 | ############################################################################### 32 | 33 | Global: 34 | 35 | Package=<5> 36 | {{{ 37 | }}} 38 | 39 | Package=<3> 40 | {{{ 41 | }}} 42 | 43 | ############################################################################### 44 | 45 | -------------------------------------------------------------------------------- /WavWriter/WavWriter.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/WavWriter/WavWriter.rc -------------------------------------------------------------------------------- /WavWriter/WavWriterUIDs.h: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------------------- 2 | // VisualSubSync 3 | // ----------------------------------------------------------------------------- 4 | // Copyright (C) 2003 Christophe Paris 5 | // ----------------------------------------------------------------------------- 6 | // This Program is free software; you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation; either version 2, or (at your option) 9 | // any later version. 10 | // 11 | // This Program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | // 16 | // You should have received a copy of the GNU General Public License 17 | // along with GNU Make; see the file COPYING. If not, write to 18 | // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 | // http://www.gnu.org/copyleft/gpl.html 20 | // ----------------------------------------------------------------------------- 21 | 22 | // {F3AFF1C3-ABBB-41f9-9521-988881D9D640} 23 | DEFINE_GUID(CLSID_WavWriter, 24 | 0xf3aff1c3, 0xabbb, 0x41f9, 0x95, 0x21, 0x98, 0x88, 0x81, 0xd9, 0xd6, 0x40); 25 | 26 | // ----------------------------------------------------------------------------- -------------------------------------------------------------------------------- /WavWriter/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Developer Studio generated include file. 3 | // Used by WavWriter.rc 4 | // 5 | 6 | // Next default values for new objects 7 | // 8 | #ifdef APSTUDIO_INVOKED 9 | #ifndef APSTUDIO_READONLY_SYMBOLS 10 | #define _APS_NEXT_RESOURCE_VALUE 101 11 | #define _APS_NEXT_COMMAND_VALUE 40001 12 | #define _APS_NEXT_CONTROL_VALUE 1000 13 | #define _APS_NEXT_SYMED_VALUE 101 14 | #endif 15 | #endif 16 | -------------------------------------------------------------------------------- /clean.bat: -------------------------------------------------------------------------------- 1 | del /s *.dcu *.~* *.ddp *.obj *.dsm *.bak *.dsk 2 | del .\dcu\*.dcu 3 | del .\jsbridge\*.dcu 4 | del .\dunit\dcu\*.dcu 5 | del .\dunit\*.dsm 6 | del .\dunit\*.~* 7 | del .\dunit\*.dsk -------------------------------------------------------------------------------- /dcu/Delphi compiled unit folder.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/dcu/Delphi compiled unit folder.txt -------------------------------------------------------------------------------- /dunit/MiscToolsUnitTests.pas: -------------------------------------------------------------------------------- 1 | unit MiscToolsUnitTests; 2 | 3 | interface 4 | 5 | uses 6 | MiscToolsUnit, 7 | TestFrameWork; 8 | 9 | type 10 | TMiscToolsTests = class(TTestCase) 11 | private 12 | 13 | protected 14 | 15 | published 16 | 17 | // Test methods 18 | procedure TestWideStringFind; 19 | 20 | procedure TestConvertSSAToSRT; 21 | procedure TestConvertSRTToSSA; 22 | 23 | procedure TestSaveLoadToStream; 24 | end; 25 | 26 | implementation 27 | 28 | uses Classes; 29 | 30 | procedure TMiscToolsTests.TestWideStringFind; 31 | begin 32 | CheckEquals(0, WideStringFind(1, '',''), 'Empty pattern in empty string'); 33 | CheckEquals(0, WideStringFind(1, '','a'), 'Not empty pattern in empty string'); 34 | CheckEquals(1, WideStringFind(1, 'a',''), 'Empty pattern in not empty string'); 35 | CheckEquals(1, WideStringFind(1, 'aBcD eFgh iJk','aBc'), 'Start of string'); 36 | CheckEquals(12, WideStringFind(1, 'aBcD eFgh iJk','Jk'), 'End of string'); 37 | CheckEquals(0, WideStringFind(1, 'aBcD eFgh iJk','Jkl'), 'End of string2'); 38 | CheckEquals(7, WideStringFind(1, 'aBcD eFgh iJk','Fg'), 'Middle of string'); 39 | CheckEquals(0, WideStringFind(1, 'aBcD eFgh iJk','FG', False), 'Case insensitive'); 40 | CheckEquals(0, WideStringFind(1, 'aBcD eFgh iJk','aBc', False, True), 'Whole word start of string'); 41 | CheckEquals(1, WideStringFind(1, 'aBcD eFgh iJk','aBcD', False, True), 'Whole word start of string2'); 42 | CheckEquals(11, WideStringFind(1, 'aBcD eFgh iJk','iJk', False, True), 'Whole word end of string'); 43 | CheckEquals(6, WideStringFind(1, 'aBcD eFgh iJk','eFgh', False, True), 'Whole word middle of string'); 44 | CheckEquals(11, WideStringFind(2, 'aBcD eFgh aBcD','aBcD', False, True), 'Offset > 1'); 45 | end; 46 | 47 | procedure TMiscToolsTests.TestConvertSSAToSRT; 48 | begin 49 | CheckEquals('italic', ConvertSSAToSRT('{\i1}italic{\i0}'), 'italic'); 50 | CheckEquals('bold', ConvertSSAToSRT('{\b1}bold{\b0}'), 'bold'); 51 | CheckEquals('underlined', ConvertSSAToSRT('{\u1}underlined{\u0}'), 'underlined'); 52 | end; 53 | 54 | procedure TMiscToolsTests.TestConvertSRTToSSA; 55 | begin 56 | CheckEquals('{\i1}italic{\i0}', ConvertSRTToSSA('italic'), 'italic'); 57 | CheckEquals('{\b1}bold{\b0}', ConvertSRTToSSA('bold'), 'bold'); 58 | CheckEquals('{\u1}underlined{\u0}', ConvertSRTToSSA('underlined'), 'underlined'); 59 | end; 60 | 61 | procedure TMiscToolsTests.TestSaveLoadToStream; 62 | var MemStream : TMemoryStream; 63 | ValueWS, ResultValueWS : WideString; 64 | EmptyWS, ResultEmptyWS : WideString; 65 | ValueInt, ResultValueInt : Integer; 66 | begin 67 | MemStream := TMemoryStream.Create; 68 | ValueWS := 'toto'; 69 | EmptyWS := ''; 70 | ValueInt := 123; 71 | SaveToStreamWS(MemStream, ValueWS); 72 | SaveToStreamWS(MemStream, EmptyWS); 73 | SaveToStreamInt(MemStream, ValueInt); 74 | MemStream.Position := 0; 75 | LoadFromStreamWS(MemStream, ResultValueWS); 76 | LoadFromStreamWS(MemStream, ResultEmptyWS); 77 | LoadFromStreamInt(MemStream, ResultValueInt); 78 | CheckEquals(ValueWS, ResultValueWS, 'SaveLoadWS'); 79 | CheckEquals(EmptyWS, ResultEmptyWS, 'SaveLoadEmptyWS'); 80 | CheckEquals(ValueInt, ResultValueInt, 'SaveLoadInt'); 81 | MemStream.Free; 82 | end; 83 | 84 | initialization 85 | TestFramework.RegisterTest('MiscToolsUnitTests Suite', 86 | TMiscToolsTests.Suite); 87 | 88 | end. 89 | -------------------------------------------------------------------------------- /dunit/VisualSubSyncTests.dof: -------------------------------------------------------------------------------- 1 | [FileVersion] 2 | Version=7.0 3 | [Compiler] 4 | A=8 5 | B=0 6 | C=1 7 | D=1 8 | E=0 9 | F=0 10 | G=1 11 | H=1 12 | I=1 13 | J=0 14 | K=0 15 | L=1 16 | M=0 17 | N=1 18 | O=1 19 | P=1 20 | Q=0 21 | R=0 22 | S=0 23 | T=0 24 | U=0 25 | V=1 26 | W=0 27 | X=1 28 | Y=1 29 | Z=1 30 | ShowHints=1 31 | ShowWarnings=1 32 | UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; 33 | NamespacePrefix= 34 | SymbolDeprecated=1 35 | SymbolLibrary=1 36 | SymbolPlatform=1 37 | UnitLibrary=1 38 | UnitPlatform=1 39 | UnitDeprecated=1 40 | HResultCompat=1 41 | HidingMember=1 42 | HiddenVirtual=1 43 | Garbage=1 44 | BoundsError=1 45 | ZeroNilCompat=1 46 | StringConstTruncated=1 47 | ForLoopVarVarPar=1 48 | TypedConstVarPar=1 49 | AsgToTypedConst=1 50 | CaseLabelRange=1 51 | ForVariable=1 52 | ConstructingAbstract=1 53 | ComparisonFalse=1 54 | ComparisonTrue=1 55 | ComparingSignedUnsigned=1 56 | CombiningSignedUnsigned=1 57 | UnsupportedConstruct=1 58 | FileOpen=1 59 | FileOpenUnitSrc=1 60 | BadGlobalSymbol=1 61 | DuplicateConstructorDestructor=1 62 | InvalidDirective=1 63 | PackageNoLink=1 64 | PackageThreadVar=1 65 | ImplicitImport=1 66 | HPPEMITIgnored=1 67 | NoRetVal=1 68 | UseBeforeDef=1 69 | ForLoopVarUndef=1 70 | UnitNameMismatch=1 71 | NoCFGFileFound=1 72 | MessageDirective=1 73 | ImplicitVariants=1 74 | UnicodeToLocale=1 75 | LocaleToUnicode=1 76 | ImagebaseMultiple=1 77 | SuspiciousTypecast=1 78 | PrivatePropAccessor=1 79 | UnsafeType=0 80 | UnsafeCode=0 81 | UnsafeCast=0 82 | [Linker] 83 | MapFile=0 84 | OutputObjs=0 85 | ConsoleApp=1 86 | DebugInfo=0 87 | RemoteSymbols=0 88 | MinStackSize=16384 89 | MaxStackSize=1048576 90 | ImageBase=4194304 91 | ExeDescription= 92 | [Directories] 93 | OutputDir= 94 | UnitOutputDir=dcu 95 | PackageDLLOutputDir= 96 | PackageDCPOutputDir= 97 | SearchPath=..;..\ThirdParty;..\ThirdParty\jsbridge;..\ThirdParty\DirectX 98 | Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;MiscCompo;FlatStyle_D6;CCCompo;RegComponents6;CoolTrayIcon_D6;SxMagD5 99 | Conditionals= 100 | DebugSourceDirs= 101 | UsePackages=0 102 | [Parameters] 103 | RunParams= 104 | HostApplication= 105 | Launcher= 106 | UseLauncher=0 107 | DebugCWD= 108 | [Language] 109 | ActiveLang= 110 | ProjectLang= 111 | RootDir=F:\Borland\Delphi7\Bin\ 112 | [Version Info] 113 | IncludeVerInfo=0 114 | AutoIncBuild=0 115 | MajorVer=1 116 | MinorVer=0 117 | Release=0 118 | Build=0 119 | Debug=0 120 | PreRelease=0 121 | Special=0 122 | Private=0 123 | DLL=0 124 | Locale=1036 125 | CodePage=1252 126 | [Version Info Keys] 127 | CompanyName= 128 | FileDescription= 129 | FileVersion=1.0.0.0 130 | InternalName= 131 | LegalCopyright= 132 | LegalTrademarks= 133 | OriginalFilename= 134 | ProductName= 135 | ProductVersion=1.0.0.0 136 | Comments= 137 | [HistoryLists\hlUnitAliases] 138 | Count=1 139 | Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; 140 | [HistoryLists\hlSearchPath] 141 | Count=8 142 | Item0=..;..\ThirdParty;..\ThirdParty\jsbridge;..\ThirdParty\DirectX 143 | Item1=..;..\ThirdParty;..\ThirdParty\jsbridge;F:\Borland\Compo\DirectX 144 | Item2=..;..\ThirdParty\jsbridge;F:\Borland\Compo\DirectX 145 | Item3=F:\Borland\Compo\DirectX;.\ThirdParty;.\ThirdParty\jsbridge;.\ThirdParty\WinSock2;.\TraceTool 146 | Item4=..;..\jsbridge;F:\Borland\Compo\DirectX 147 | Item5=..;..\jsbridge 148 | Item6=F:\Borland\Compo\DirectX;.\WinSock2;.\jsbridge 149 | Item7=C:\Borland\Delphi7\Source\ToolsAPI 150 | [HistoryLists\hlUnitOutputDirectory] 151 | Count=1 152 | Item0=dcu 153 | [HistoryLists\hlOutputDirectorry] 154 | Count=1 155 | Item0=.\Release 156 | -------------------------------------------------------------------------------- /dunit/VisualSubSyncTests.dpr: -------------------------------------------------------------------------------- 1 | // Uncomment the following directive to create a console application 2 | // or leave commented to create a GUI application... 3 | // {$APPTYPE CONSOLE} 4 | 5 | program VisualSubSyncTests; 6 | 7 | uses 8 | TestFramework {$IFDEF LINUX}, 9 | QForms, 10 | QGUITestRunner {$ELSE}, 11 | Forms, 12 | GUITestRunner {$ENDIF}, 13 | TextTestRunner, 14 | JavaScriptPluginUnitTests in 'JavaScriptPluginUnitTests.pas', 15 | JavaScriptPluginUnit in '..\JavaScriptPluginUnit.pas', 16 | MiscToolsUnitTests in 'MiscToolsUnitTests.pas', 17 | MiscToolsUnit in '..\MiscToolsUnit.pas', 18 | SubtitleModelTests in 'SubtitleModelTests.pas', 19 | SubtitleModel in '..\SubtitleModel.pas'; 20 | 21 | {$R *.RES} 22 | 23 | begin 24 | Application.Initialize; 25 | 26 | {$IFDEF LINUX} 27 | QGUITestRunner.RunRegisteredTests; 28 | {$ELSE} 29 | if System.IsConsole then 30 | TextTestRunner.RunRegisteredTests 31 | else 32 | GUITestRunner.RunRegisteredTests; 33 | {$ENDIF} 34 | 35 | end. 36 | 37 | -------------------------------------------------------------------------------- /dunit/VisualSubSyncTests.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/dunit/VisualSubSyncTests.res -------------------------------------------------------------------------------- /dunit/dunit.ini: -------------------------------------------------------------------------------- 1 | [GUITestRunner Config] 2 | AutoSave=1 3 | Left=44 4 | Top=44 5 | Width=861 6 | Height=500 7 | Maximized=0 8 | UseRegistry=0 9 | ResultsPanel.Height=174 10 | ErrorMessage.Height=75 11 | ErrorMessage.Visible=1 12 | FailureList.ColumnWidth[0]=120 13 | FailureList.ColumnWidth[1]=100 14 | FailureList.ColumnWidth[2]=346 15 | FailureList.ColumnWidth[3]=275 16 | HideTestNodesOnOpen=0 17 | BreakOnFailures=0 18 | FailOnNoChecksExecuted=0 19 | FailOnMemoryLeaked=0 20 | IgnoreSetUpTearDownLeaks=0 21 | ReportMemoryLeakTypes=0 22 | SelectTestedNode=1 23 | WarnOnFailTestOverride=0 24 | PopupX=350 25 | PopupY=30 26 | 27 | -------------------------------------------------------------------------------- /main.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/main.pas -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/common/itasa.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/vss-innosetup/jsplugin/common/itasa.js -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/common/tools.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/vss-innosetup/jsplugin/common/tools.js -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/flashing.js: -------------------------------------------------------------------------------- 1 | // Flashing plugin for VisualSubSync 2 | // nixxo github.com/nixxo 3 | 4 | VSSPlugin = { 5 | // Plugin constants 6 | Name: "Flashing", 7 | Description: "Detects if the sub start or stop is near a scenechange" + 8 | "and prevent the sub from flashing or bleeding into another scene.", 9 | Color: 0x000ff0, 10 | Message: "Flash", 11 | 12 | // Plugin parameters available from VSS GUI (name must start with "Param") 13 | ParamStrictMargin: { 14 | Value: 100, 15 | Unit: "ms", 16 | Description: "Margin of time to detect a correction (default: 100 ms)." 17 | }, 18 | 19 | HasError: function(CurrentSub, PreviousSub, NextSub) { 20 | var msg = ""; 21 | var mb = VSSCore.MinimumBlank; 22 | var mrg = this.ParamStrictMargin.Value - mb; 23 | var stt = CurrentSub.Start; 24 | var sc1 = SceneChange.GetNext(stt); 25 | var sc2 = SceneChange.GetPrevious(stt); 26 | 27 | if ((sc1 > 0) && ((sc1 - stt) < mrg) && (sc1 != stt)) { 28 | msg += "fix start >>>"; 29 | } else if ((sc1 > 0) && ((stt - sc2) < mrg) && (sc2 != stt)) { 30 | msg += "fix start <<<"; 31 | } 32 | 33 | var stt = CurrentSub.Stop; 34 | var sc1 = SceneChange.GetNext(stt); 35 | var sc2 = SceneChange.GetPrevious(stt); 36 | if ((sc1 > 0) && ((sc1 - stt) < mrg) && (sc1 - mb != stt) && (sc1 != stt)) { 37 | if (msg != "") msg += " + "; 38 | msg += "fix stop >>>"; 39 | } else if ((sc2 > 0) && ((stt - sc2) < mrg) && (sc2 - mb != stt)) { 40 | if (msg != "") msg += " + "; 41 | msg += "fix stop <<<"; 42 | } 43 | 44 | return msg; 45 | }, 46 | 47 | FixError: function(CurrentSub, PreviousSub, NextSub) { 48 | var mb = VSSCore.MinimumBlank; 49 | var mrg = this.ParamStrictMargin.Value - mb; 50 | var stt = CurrentSub.Start; 51 | var sc1 = SceneChange.GetNext(stt); 52 | var sc2 = SceneChange.GetPrevious(stt); 53 | if (((sc1 - stt) < mrg) && (sc1 != stt)) { 54 | CurrentSub.Start = sc1; 55 | } else if (((stt - sc2) < mrg) && (sc2 != stt)) { 56 | CurrentSub.Start = sc2; 57 | } 58 | 59 | var stt = CurrentSub.Stop; 60 | var sc1 = SceneChange.GetNext(stt); 61 | var sc2 = SceneChange.GetPrevious(stt); 62 | if (((sc1 - stt) < mrg) && (sc1 != stt)) { 63 | CurrentSub.Stop = sc1 - mb; 64 | } else if ((stt - sc2) < mrg) { 65 | CurrentSub.Stop = sc2 - mb; 66 | } 67 | } 68 | }; -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/general/action_itasa.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/vss-innosetup/jsplugin/general/action_itasa.js -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/general/action_nixxo.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/vss-innosetup/jsplugin/general/action_nixxo.js -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/general/action_quick_stats.js: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | 3 | JSAction_QuickStats = { 4 | onExecute : function() { 5 | var subCount = VSSCore.GetSubCount(); 6 | ScriptLog('--- Quick stats ----------'); 7 | ScriptLog('Subtitle count : ' + subCount); 8 | 9 | if(subCount > 0) { 10 | 11 | // Table to store results 12 | var rsArray = new Array(RSDef.length); 13 | for (var i = 0; i < rsArray.length; i++) { 14 | rsArray[i] = 0; 15 | } 16 | 17 | // Iterate over all subtitles to collect stats 18 | var sub = VSSCore.GetFirst(); 19 | while (sub != null) { 20 | var rs = getReadingSpeed(sub); 21 | var rsIdx = getReadingSpeedIndex(rs); 22 | rsArray[rsIdx]++; 23 | sub = VSSCore.GetNext(sub); 24 | } 25 | 26 | // Display results 27 | for (var i = 0; i < rsArray.length; i++) { 28 | var rsCount = rsArray[i]; 29 | var rsCountPercent = (rsCount * 100) / subCount; 30 | ScriptLog(RSDef[i].text + ' = ' + decimal1Round(rsCountPercent) 31 | + '% (' + rsCount + ')'); 32 | } 33 | 34 | } 35 | 36 | ScriptLog('---'); 37 | } 38 | }; 39 | 40 | VSSCore.RegisterJavascriptAction('JSAction_QuickStats', 'Quick stats', 'Ctrl+M'); 41 | 42 | // --------------------------------------------------------------------------- -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/itasa_typos_kickaha.js: -------------------------------------------------------------------------------- 1 | // Italian Subs Addicted typos v2.5 2 | // by kickaha 3 | // based on Nathbot's 4 | // Translated by rock3r 5 | 6 | LoadScript("common/itasa.js"); 7 | 8 | VSSPlugin = { 9 | 10 | // ----- Plugin constant ----- 11 | Name : 'ITASA - Common errors', 12 | Description : 'Checks the presence of common errors (developed by kickaha for italiansubs.net)', 13 | Color : 0x25737D, 14 | Message : 'Error in sub:', 15 | ParamDisableCheckAccentedLetter : { Value : 1, Unit : '[0=False 1=True]' }, 16 | 17 | // ----- HasError method called for each subtitle during the error checking ----- 18 | // If there is an error on CurrentSub return a string containing the error description. 19 | // Otherwise return an empty string. 20 | // Don't forget that PreviousSub and NextSub can be null 21 | HasError : function(CurrentSub, PreviousSub, NextSub) 22 | { 23 | if (CurrentSub.Text == "") return 'No empty lines allowed'; 24 | var acc = (this.ParamDisableCheckAccentedLetter.Value == 0) ? true : false; 25 | var res = CheckItasaRules(CurrentSub, PreviousSub, NextSub, false, acc); 26 | if (res == null) 27 | return ''; 28 | return res.msg; 29 | }, 30 | 31 | FixError : function(CurrentSub, PreviousSub, NextSub) 32 | { 33 | if (CurrentSub.Text == "") VSSCore.DeleteSubtitle(CurrentSub.index); 34 | else 35 | { 36 | var acc = (this.ParamDisableCheckAccentedLetter.Value == 0) ? true : false; 37 | var res = CheckItasaRules(CurrentSub, PreviousSub, NextSub, true, acc); 38 | if (res == null) 39 | return; 40 | if (res.fix != null) 41 | CurrentSub.Text = res.fix; 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/itasa_zplit_kickaha.js: -------------------------------------------------------------------------------- 1 | // Redux 1.0 by rock3r 2 | // ----------------------------------------------- 3 | // Based upon Italian Subs Addicted split sub v2.5 4 | // by kickaha 5 | // ----------------------------------------------- 6 | // Version 1.0 (Jul 12nd, 2012) 7 | // * Code translation 8 | // * Minor refactorings 9 | 10 | LoadScript("common/itasa.js"); 11 | 12 | VSSPlugin = { 13 | 14 | // VSS Constants 15 | Name : 'ITASA - Row splitter', 16 | Description : 'Splits or joins rows with the provided parameters (developed by kickaha and rock3r for italiansubs.net)', 17 | Color : 0x00C0C0, 18 | Message : 'Row splitter :', 19 | 20 | // Parameters 21 | // ParamMaxRighe : { Value : 2, Unit : 'Characters' }, // Max lines - fixed at 2, leaving it parametric is a mess - do we really need it? 22 | ParamMaxPerRiga : { Value : 45, Unit : 'Characters' }, // Maximum number of characters per row 23 | ParamMinPerRiga : { Value : 40, Unit : 'Characters' }, // Doesn't split a row with less than this number of characters 24 | ParamMaxSbilancia : { Value : 15, Unit : 'Characters' }, // Maximum row length unbalancement allowed when splitting 25 | 26 | // Check rows 27 | HasError : function(CurrentSub, PreviousSub, NextSub) { 28 | var current_sub = CurrentSub.Text; 29 | 30 | var credits_regex = /(?:Traduzione:|Revisione:|Resynch:|Traduzione e synch:|Synch\s?fix:)\s.+((?:Resynch:|Synch\s?fix:)?\s?.+)?/i; 31 | 32 | // Check that this isn't a credits row (ItaSA-style) 33 | if (credits_regex.test(current_sub)) { 34 | // We won't resplit credits. 35 | return ''; 36 | } 37 | 38 | var fixed_sub = SplitRows(current_sub, this.ParamMaxPerRiga, this.ParamMaxSbilancia, this.ParamMinPerRiga); 39 | if (fixed_sub == null) return ''; 40 | if (current_sub == fixed_sub.sub && fixed_sub.res == '') return ''; 41 | return (current_sub == fixed_sub.sub ? 'no edits' : 'reformatted subtitle') + 42 | (fixed_sub.res == '' ? '' : ' - ' + fixed_sub.res); 43 | }, 44 | 45 | // Resplit rows 46 | FixError : function(CurrentSub, PreviousSub, NextSub) { 47 | var current_sub = CurrentSub.Text; 48 | 49 | var credits_regex = /(?:Traduzione:|Revisione:|Resynch:|Traduzione e synch:|Synch\s?fix:)\s.+(\r\n(?:Resynch:|Synch\s?fix:)?\s?.+)?/i; 50 | 51 | // Check that this isn't a credits row (ItaSA-style) 52 | if (credits_regex.test(current_sub)) { 53 | // We won't resplit credits. 54 | return; 55 | } 56 | 57 | var fixed_sub = SplitRows(current_sub, this.ParamMaxPerRiga, this.ParamMaxSbilancia, this.ParamMinPerRiga); 58 | if (fixed_sub == null) return; 59 | CurrentSub.Text = fixed_sub.sub; 60 | return; 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/overlapping.js: -------------------------------------------------------------------------------- 1 | // Overlapping & minimum blank 2 | // (christophe.paris free.fr) 3 | // ParamMode by Nathbot 4 | 5 | VSSPlugin = { 6 | // ----- Plugin constant ----- 7 | Name : 'Overlapping & minimum blank', 8 | Description : 'An error is detected when the subtitle overlap on next subtitle, or when the minimum blank (see global subtitle preferences) is not respected.', 9 | Color : 0xFF3737, 10 | Message : 'Subtitle overlap on next subtitle :', 11 | 12 | // ----- Plugin parameters available from VSS GUI (name must start with "Param") ----- 13 | ParamFixableOverlap : { Value : 100, Unit : 'ms', Description : 'The overlap must be inferior to this to be fixed automatically.'}, 14 | ParamMode : { Value : 2, Unit : '(1/2/3)', Description : 'Mode 1: Split the overlap zone in two.\nMode 2: Change the current subtitle stop time.\nMode 3: Change the next subtitle start time.'}, 15 | 16 | // ----- HasError method called for each subtitle during the error checking ----- 17 | // If there is an error on CurrentSub return a string containing the error description. 18 | // Otherwise return an empty string. 19 | // Don't forget that PreviousSub and NextSub can be null 20 | HasError : function(CurrentSub, PreviousSub, NextSub) { 21 | if (NextSub === null) { 22 | return ''; 23 | } 24 | var OverlapInMs = NextSub.Start - CurrentSub.Stop; 25 | if ((OverlapInMs > 0) && (OverlapInMs >= VSSCore.MinimumBlank)) { 26 | return ''; 27 | } 28 | if (OverlapInMs < 0) { 29 | return (-OverlapInMs) + 'ms overlap'; 30 | } 31 | return 'blank is only ' + OverlapInMs + 'ms'; 32 | }, 33 | 34 | FixError : function(CurrentSub, PreviousSub, NextSub) { 35 | if (NextSub === null) { 36 | return ''; 37 | } 38 | 39 | var OverlapInMs = NextSub.Start - CurrentSub.Stop; 40 | 41 | if (((OverlapInMs > 0) && (OverlapInMs > VSSCore.MinimumBlank)) || 42 | (-OverlapInMs > this.ParamFixableOverlap.Value)) { 43 | return ''; 44 | } 45 | 46 | switch(this.ParamMode.Value){ 47 | case 1: 48 | // Fix the overlap by dividing it by 2 49 | var MiddlePoint = (CurrentSub.Stop + (OverlapInMs / 2)); 50 | var HalfOffset = (VSSCore.MinimumBlank / 2); 51 | CurrentSub.Stop = MiddlePoint - HalfOffset; 52 | NextSub.Start = CurrentSub.Stop + VSSCore.MinimumBlank; 53 | break; 54 | 55 | case 2: 56 | // Fix the overlap by changing the stop time of the current subtitle 57 | var Required = VSSCore.MinimumBlank - OverlapInMs; 58 | CurrentSub.Stop -= Required; 59 | break; 60 | 61 | case 3: 62 | // Fix the overlap by changing the start time of the next subtitle 63 | var Required = VSSCore.MinimumBlank - OverlapInMs; 64 | NextSub.Start += Required; 65 | break; 66 | 67 | default: 68 | ScriptLog('ParamMode = ' + this.ParamMode.Value + ' is not supported'); 69 | break; 70 | } 71 | 72 | // Special case when OverlapInMs == 0 73 | if (NextSub.Start == CurrentSub.Stop) { 74 | NextSub.Start += 1; 75 | } 76 | } 77 | }; -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/readme.txt: -------------------------------------------------------------------------------- 1 | This directory contains JavaScript plugins for VisualSubSync. 2 | 3 | For more information about JavaScript check this links: 4 | http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide 5 | http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference 6 | http://developer.mozilla.org/en/docs/A_re-introduction_to_JavaScript 7 | 8 | 9 | VSS specific functions and properties: 10 | 11 | ScriptLog(Message) : Display a message in the log window 12 | SetStatusBarText(Message) : Display a message in the status bar 13 | LoadScript(Filename) : Load an external javascript file 14 | 15 | 16 | VSSCore.INDEX_COL_IDX : Index of the subtitle index column 17 | VSSCore.START_COL_IDX : Index of the start time column 18 | VSSCore.STOP_COL_IDX : Index of the stop time colum 19 | VSSCore.STYLE_COL_IDX : Index of the style column (SSA/ASS only) 20 | VSSCore.TEXT_COL_IDX : Index of the text column 21 | VSSCore.LAST_CORE_COL_IDX : Index of the last column of VSS core 22 | 23 | VSSCore.CpsTarget : Characters per second target (value set in the preferences dialog) 24 | VSSCore.MinimumDuration : Minimum subtitle duration (value set in the preferences dialog) 25 | VSSCore.MaximumDuration : Maximum subtitle duration (value set in the preferences dialog) 26 | VSSCore.MinimumBlank : Minimum blank between subtitles (value set in the preferences dialog) 27 | 28 | VSSCore.VideoWidth : The video width in pixel (0 if no video) 29 | VSSCore.VideoHeight : The video height in pixel (0 if no video) 30 | 31 | VSSCore.RegisterJavascriptAction(Name, Description, DefaultShortcut) : Register a javascript action 32 | VSSCore.GetSubCount() : Return the total number of subtitles 33 | VSSCore.GetSubAt(Index) : Return the subtitle at the specified index 34 | VSSCore.GetFirst() : Return the first subtitle 35 | VSSCore.GetNext(Subtitle) : Return the subtitle next to the specified one 36 | VSSCore.GetPrevious(Subtitle) : Return the subtitle previous to the specified one 37 | VSSCore.GetFirstSelected() : Return the first selected subtitle 38 | VSSCore.GetNextSelected(Subtitle) : Return the next selected subtitle after the specified one 39 | VSSCore.MeasureStringWidth(FontName, FontSize, IsBold, Text) : Return the width of the text in pixels. 40 | 41 | Subtitle.Index : Index of the subtitle 42 | Subtitle.Start : Start time in ms of the subtitle 43 | Subtitle.Stop : Stop time in ms of the subtitle 44 | Subtitle.Text : Subtitle's text 45 | Subtitle.StrippedText : Subtitle's text without any tags 46 | 47 | 48 | SceneChange.StartOffset : The offset in ms to keep before a scene change (value set in the preferences dialog) 49 | SceneChange.StopOffset : The offset in ms to keep after a scene change (value set in the preferences dialog) 50 | SceneChange.FilterOffset : The offset in ms from subtitle start and stop where scene change are filtered (value set in the preferences dialog) 51 | SceneChange.Visible : True if scene change are currenlty visible in VSS (value set in the preferences dialog) 52 | SceneChange.GetCount() : Get the total number of scene change 53 | SceneChange.GetAt(Index) : Get the time of the scene change at the specified index in ms. Index is between 0 and GetCount()-1 54 | SceneChange.GetNext(TimeMs) : Get the time in ms of the next scene change superior or equal to TimeMs 55 | SceneChange.GetPrevious(TimeMs) : Get the time in ms of the next scene change inferior or equal to TimeMs 56 | SceneChange.Contains(Start,Stop) : Check if there is a scene change between [Start,Stop] 57 | 58 | 59 | -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/too_many_lines.js: -------------------------------------------------------------------------------- 1 | // Too many lines 2 | // (christophe.paris free.fr) 3 | // 4 | 5 | VSSPlugin = { 6 | // ----- Plugin constant ----- 7 | Name : 'Too many lines', 8 | Description : 'An error is detected when the number of lines is '+ 9 | 'strictly superior to the specified value.', 10 | Color : 0x9C00FF, 11 | Message : 'Subtitle has too many lines :', 12 | 13 | // ----- Plugin parameters available from VSS GUI (name must start with "Param") ----- 14 | ParamMaxLines : { Value : 2, Unit : 'Lines' }, 15 | 16 | // ----- HasError method called for each subtitle during the error checking ----- 17 | // If there is an error on CurrentSub return a string containing the error description. 18 | // Otherwise return an empty string. 19 | // Don't forget that PreviousSub and NextSub can be null 20 | HasError : function(CurrentSub, PreviousSub, NextSub) { 21 | var SubText = CurrentSub.StrippedText; 22 | var LineArray = SubText.split('\r\n'); 23 | var LineArrayLen = LineArray.length; 24 | 25 | if(LineArrayLen > this.ParamMaxLines.Value) 26 | { 27 | return '' + LineArrayLen + ' lines'; 28 | } else { 29 | return ''; 30 | } 31 | } 32 | }; -------------------------------------------------------------------------------- /vss-innosetup/jsplugin/un-closed_tags.js: -------------------------------------------------------------------------------- 1 | // Trop de lignes 2 | // Dapitch666 - Lords of kobol 3 | 4 | VSSPlugin = { 5 | // ----- Plugin constant ----- 6 | Name : 'Un-closed tags', 7 | Description : 'Detects and fixes un-closed tags.', 8 | Color : 0xff99cc, 9 | Message : 'Un-closed tag :', 10 | 11 | // ----- Plugin parameters available from VSS GUI (name must start with "Param") ----- 12 | 13 | HasError : function(CurrentSub, PreviousSub, NextSub) { 14 | var SubText = CurrentSub.Text; 15 | var regOuvert = /<(.)>/ 16 | regOuvert.exec(SubText); 17 | var Tag = regOuvert.exec(SubText); 18 | var regFerme = new RegExp('<\\/' + RegExp.$1 + '>'); 19 | if (SubText.match(regOuvert) && !SubText.match(regFerme)) 20 | { 21 | return ('<' + RegExp.$1 + '>'); 22 | } else { 23 | return ''; 24 | } 25 | }, 26 | 27 | FixError : function(CurrentSub, PreviousSub, NextSub) { 28 | var SubText = CurrentSub.Text; 29 | var regOuvert = /<(.)>/ 30 | regOuvert.exec(SubText); 31 | CurrentSub.Text += ''; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /vss-innosetup/vss-innosetup.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Red5goahead/VisualSubSync-Enhanced/d8ef50651462b6752cd74b3ce4028781435d7348/vss-innosetup/vss-innosetup.zip --------------------------------------------------------------------------------