123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- {
- This file is part of the Pas2JS run time library.
- Copyright (c) 2019 by Michael Van Canneyt
-
- Program to extract data-translate tags from a HTML file.
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- program extractlang;
- {$mode objfpc}{$H+}
- uses
- {$IFDEF UNIX}
- cwstring,
- {$ENDIF}
- Classes, SysUtils, CustApp, jsonparser, langextractor;
- type
- { TExtractLangApplication }
- TExtractLangApplication = class(TCustomApplication)
- private
- procedure Logger({%H-}Sender: TObject; const Msg: String);
- protected
- FExtractor : THTMLLangExtractor;
- procedure DoRun; override;
- public
- constructor Create(TheOwner: TComponent); override;
- destructor Destroy; override;
- procedure Usage(Const Msg : String); virtual;
- end;
- { TExtractLangApplication }
- procedure TExtractLangApplication.Logger(Sender: TObject; const Msg: String);
- begin
- Writeln(Msg);
- end;
- procedure TExtractLangApplication.DoRun;
- var
- ErrorMsg: String;
- begin
- Terminate;
- ErrorMsg:=CheckOptions('cd:f:hl:mn:o:ts:r', ['clear','file-mode','help','html-dir','languages','minify','name','output','recurse','single-scope','trash-values']);
- if (ErrorMsg<>'') or HasOption('h','help') then
- begin
- Usage(ErrorMsg);
- exit;
- end;
- With FExtractor do
- begin
- OnLog:=@Logger;
- HTMLDir:=GetOptionValue('d','html-dir');
- OutputFileName:=GetOptionValue('o','output');
- Languages:=GetOptionValue('l','languages');
- Minified:=HasOption('m','minify');
- TrashNewValues:=HasOption('t','trash-values');
- SingleScope:=GetOptionValue('s','single-scope');
- CleanOutput:=HasOption('c','clear');
- Recurse:=HasOption('r','recurse');
- TagName:=GetOptionValue('n','name');
- if (HTMLDir='') or (OutputFileName='') then
- Usage('Need input dir and output filename');
- if HasOption('f','file-mode') then
- Case LowerCase(GetOptionValue('f','file-mode')) of
- 'single':
- OutputFileMode:=fmSingle;
- 'multiple',
- 'multi':
- OutputFileMode:=fmMultiple;
- else
- OutputFileMode:=fmSingle;
- end;
- TrashNewValues:=HasOption('t','trash-values');
- Execute;
- end;
- end;
- constructor TExtractLangApplication.Create(TheOwner: TComponent);
- begin
- inherited Create(TheOwner);
- StopOnException:=True;
- FExtractor:=THTMLLangExtractor.Create(Self);
- end;
- destructor TExtractLangApplication.Destroy;
- begin
- FreeAndNil(FExtractor);
- inherited Destroy;
- end;
- procedure TExtractLangApplication.Usage(const Msg: String);
- begin
- if Msg<>'' then
- Writeln('Error : ',Msg);
- Writeln('Usage: ', ExeName, ' [options]');
- Writeln('Where options is one or more of:');
- Writeln('-h --help This help text');
- Writeln('-c --clear Clear output JSON file (Default is to update existing output file).');
- Writeln('-d --html-dir=DIR Directory with HTML files to scan (recursively)');
- Writeln('-f --file-mode=MODE Set file mode: one of single or multiple');
- Writeln('-o --output=FILE File to write JSON translations (may get suffix depending on file mode)');
- Writeln('-l --languages=LIST Comma-separated list of languages to create');
- Writeln('-m --minify Minify output');
- Writeln('-n --name=NAME Set name of data-tag to NAME (data-NAME)');
- Writeln('-r --recurse Recurse into subdirectories of the HTML directory');
- Writeln('-s --single-scope=SCOPE Put all translation names in a single scope');
- Writeln('-t --trash-values Trash values for other languages');
- ExitCode:=Ord(Msg<>'');
- Halt;
- end;
- var
- Application: TExtractLangApplication;
- begin
- Application:=TExtractLangApplication.Create(nil);
- Application.Title:='Extract data-translate tag application';
- Application.Run;
- Application.Free;
- end.
|