123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- { Demo for CSS engine : extract class names from a list of CSS files
- Copyright (C) 2022- michael Van Canneyt [email protected]
- This source is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
- This code 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. See the GNU General Public License for more details.
- A copy of the GNU General Public License is available on the World Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can
- also obtain it by writing to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA.
- }
- program extractcssclasses;
- {$mode objfpc}{$H+}
- uses
- Classes, SysUtils, CustApp, fpcssScanner, fpcssutils, fpcsstree;
- type
- { TCSSClassNamesApplication }
- TCSSClassNamesApplication = class(TCustomApplication)
- private
- procedure OutputClassNames(const aFileName, aOutput: String);
- protected
- procedure DoRun; override;
- public
- constructor Create(TheOwner: TComponent); override;
- destructor Destroy; override;
- procedure Usage(aError : String); virtual;
- end;
- { TCSSClassNamesApplication }
- procedure TCSSClassNamesApplication.OutputClassNames(const aFileName,aOutput : String);
- Var
- L : TStringList;
- Util : TCSSUtils;
- begin
- Util:=Nil;
- L:=TStringList.Create;
- try
- Util:=TCSSUtils.Create(Self);
- L.Sorted:=True;
- L.Duplicates:=dupIgnore;
- L.Options:=L.Options-[soTrailingLineBreak];
- if (aOutput<>'') and FileExists(aOutput) then
- L.LoadFromFile(aOutput);
- if HasOption('x','extended') then
- Util.ExtraScannerOptions:=[csoExtendedIdentifiers];
- Util.ExtractClassNames(aFileName,L);
- if aOutput='' then
- begin
- if L.Count>0 then
- Writeln(L.Text);
- end
- else
- L.SaveToFile(aOutput);
- finally
- Util.Free;
- L.Free;
- end;
- end;
- procedure TCSSClassNamesApplication.DoRun;
- Const
- Opts = 'ho::x';
- LongOpts : Array of string = ('help','output::','extended');
- var
- FN, FNOutput : String;
- ErrorMsg: String;
- files : TStringArray;
- begin
- Terminate;
- ErrorMsg:=CheckOptions(Opts,LongOpts);
- if HasOption('h','help') or (ErrorMsg<>'') then
- begin
- Usage(ErrorMsg);
- Exit;
- end;
- Files:=GetNonOptions(Opts,LongOpts);
- FNOutput:=GetOptionValue('o','output');
- if (FNOutput<>'') and FileExists(FNOutput) then
- DeleteFile(FNOutput);
- For FN in Files do
- OutputClassNames(FN,FNOUtput);
- end;
- constructor TCSSClassNamesApplication.Create(TheOwner: TComponent);
- begin
- inherited Create(TheOwner);
- StopOnException:=True;
- end;
- destructor TCSSClassNamesApplication.Destroy;
- begin
- inherited Destroy;
- end;
- procedure TCSSClassNamesApplication.Usage(aError: String);
- begin
- if aError<>'' then
- Writeln('Error: ',aError);
- Writeln('Usage: ', ExeName, ' [options] FILES');
- Writeln('where options is one or more of:');
- Writeln('-h --help This help message');
- Writeln('-o --output=FILE Write class names to this file.');
- Writeln('-x --extended Allow non-standard identifiers.');
- exitCode:=Ord(aError<>'');
- end;
- var
- Application: TCSSClassNamesApplication;
- begin
- Application:=TCSSClassNamesApplication.Create(nil);
- Application.Title:='Extract CSS Application';
- Application.Run;
- Application.Free;
- end.
|