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.
 
 
 
 

133 lines
2.7 KiB

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.