Repo for the search and displace ingest module that takes odf, docx and pdf and transforms it into .md to be used with search and displace operations
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
unit Utils;
interface
uses Classes, SysUtils, TypInfo, ImagingTypes;
type // Workaround for generic functions needing FPC 3.1.1+ TEnumUtils<T> = class public class function EnumToStr(const EnumValue: T): string; class function StrToEnum(const Str: string): T; class function GetEnumPrefix: string; end;
function FindDeskewExePath: string; function DetermineConfigFolder: string; function ColorToString(Color: TColor32): string; function StringToColorDef(const Str: string; Default: TColor32): TColor32;
implementation
uses {$IF Defined(DARWIN)} StrUtils, {$ENDIF} LazFileUtils, Forms;
function FindDeskewExePath: string; var ExeDir, S: string; begin Result := './deskew';
ExeDir := Application.Location; if DirectoryExists(ExeDir) then begin {$IF Defined(MSWINDOWS)} S := ExeDir + 'deskew64.exe'; if FileExists(S) then Exit(S);
S := ExeDir + 'deskew.exe'; if FileExists(S) then Exit(S);
S := ExeDir + 'deskew32.exe'; if FileExists(S) then Exit(S); {$ELSEIF Defined(DARWIN)} S := ExeDir + 'deskew-mac'; if FileExists(S) then Exit(S);
S := ExeDir + 'deskew'; if FileExists(S) then Exit(S);
if AnsiContainsText(ExeDir, '.app/Contents/MacOS') then begin // Get out af the bundle S := ExtractFileDir(ExtractFileDir(ExtractFileDir(ExcludeTrailingPathDelimiter(ExeDir)))) + '/deskew-mac'; if FileExists(S) then Exit(S); end; {$ELSEIF Defined(LINUX)} S := ExeDir + 'deskew'; if FileExists(S) then Exit(S); {$ENDIF} end; end;
function DetermineConfigFolder: string; var ExeDir: string; begin Result := GetAppConfigDir(False);
ExeDir := Application.Location; if DirectoryExists(ExeDir) and DirectoryIsWritable(ExeDir) then Result := ExeDir; end;
function ColorToString(Color: TColor32): string; begin Result := '#' + HexStr(Color, 8); end;
function StringToColorDef(const Str: string; Default: TColor32): TColor32; var S: string; begin S := '$' + Copy(Str, 2); Result := StrToDWordDef(S, Default); end;
class function TEnumUtils<T>.EnumToStr(const EnumValue: T): string; var S: string; L: Integer; begin S := TypInfo.GetEnumName(TypeInfo(T), Integer(EnumValue)); L := Length(GetEnumPrefix); Result := Copy(S, L + 1); end;
class function TEnumUtils<T>.StrToEnum(const Str: string): T; var S: string; I: Integer; begin S := GetEnumPrefix + Str; I := TypInfo.GetEnumValue(TypeInfo(T), S); if I >= 0 then Result := T(I) else Result := Default(T); end;
class function TEnumUtils<T>.GetEnumPrefix: string; var S: string; begin S := TypInfo.GetEnumName(TypeInfo(T), Integer(Default(T))); Result := Copy(S, 1, 2); if S[3] in ['a'..'z'] then Result := Result + S[3]; end;
end.
|