Difference between revisions of "ReNamer:Scripts:TrID"
Jump to navigation
Jump to search
(added link to forum discussions and navigation) |
(Andrew's script added) |
||
Line 2: | Line 2: | ||
This script integrates a famous [http://mark0.net/code-tridlib-e.html TrID library] which is used for detecting file extensions. Discussions about this script and some script variants can be found on forum: [http://www.den4b.com/forum/viewtopic.php?id=550 ReNamer and TrID library for detecting file extension]. | This script integrates a famous [http://mark0.net/code-tridlib-e.html TrID library] which is used for detecting file extensions. Discussions about this script and some script variants can be found on forum: [http://www.den4b.com/forum/viewtopic.php?id=550 ReNamer and TrID library for detecting file extension]. | ||
+ | |||
+ | '''Note:''' At the moment the library works only on ANSI filenames (non Unicode). | ||
== Requirements == | == Requirements == | ||
− | + | ||
* [http://mark0.net/download/tridlib-free.zip TrIDLib.dll] in ReNamer's folder (http://mark0.net/code-tridlib-e.html) | * [http://mark0.net/download/tridlib-free.zip TrIDLib.dll] in ReNamer's folder (http://mark0.net/code-tridlib-e.html) | ||
* [http://mark0.net/download/triddefs.zip TrIDDefs.TRD] in ReNamer's folder (http://mark0.net/soft-trid.html) | * [http://mark0.net/download/triddefs.zip TrIDDefs.TRD] in ReNamer's folder (http://mark0.net/soft-trid.html) | ||
− | == Code == | + | == Code: Basic == |
− | Author: Denis Kozlov. Date: 16 Dec 2008. Initial version. Sets the file extension to the top matching extension. Can be easily extended. | + | Author: Denis Kozlov. Date: 16 Dec 2008. Initial version. Sets the file extension to the top matching extension. Can be easily extended. |
+ | |||
+ | * Tested with ReNamer Beta from 5 Dec 2008 | ||
<source> | <source> | ||
Line 66: | Line 70: | ||
TridSubmitFileA(PChar(FilePath)); | TridSubmitFileA(PChar(FilePath)); | ||
if TridAnalyze <> 0 then | if TridAnalyze <> 0 then | ||
− | FileName := | + | FileName := WideStripExtension(FileName)+'.'+GetTopExtensions(1); |
+ | end. | ||
+ | </source> | ||
+ | |||
+ | == Code: Advanced == | ||
+ | |||
+ | Author: Andrew. Date: 27 Nov 2008. An extended version by Andrew. Read comments in the script for more information. | ||
+ | |||
+ | * Requires ReNamer 5.60+ Beta 10 or later | ||
+ | |||
+ | <source> | ||
+ | { TrID Script v6 } | ||
+ | |||
+ | // v1 - Original script by Denis | ||
+ | // v2 - Modified by Andrew to output lowercase extensions and detect presence of TrIDLib.dll and TrIDDefs.trd | ||
+ | // v3 - Modified by Andrew to keep existing extensions if not identified properly | ||
+ | // v4 - Modified by Andrew to display multiple possible extensions | ||
+ | // v5 - Modified by Andrew to display multiple possible extensions with cutoff of 20% | ||
+ | // v6 - Modified by Andrew to fix a path-related issue | ||
+ | |||
+ | // Important: Download http://mark0.net/download/tridlib-free.zip and http://mark0.net/download/triddefs.zip, | ||
+ | // then extract TrIDLib.dll and TrIDDefs.trd to ReNamer.exe's folder/directory or else the script will fail | ||
+ | |||
+ | // TrID DLL exported functions | ||
+ | function TridLoadDefsPack(szPath: PChar): Integer; | ||
+ | external 'TrID_LoadDefsPack@TrIDLib.dll stdcall'; | ||
+ | function TridSubmitFileA(szFileName: PChar): Integer; | ||
+ | external 'TrID_SubmitFileA@TrIDLib.dll stdcall'; | ||
+ | function TridAnalyze: Integer; | ||
+ | external 'TrID_Analyze@TrIDLib.dll stdcall'; | ||
+ | function TridGetInfo(lInfoType: Integer; lInfoIdx: Integer; sBuf: PChar): Integer; | ||
+ | external 'TrID_GetInfo@TrIDLib.dll stdcall'; | ||
+ | |||
+ | // Constants for TrID_GetInfo etc. | ||
+ | const | ||
+ | TRID_GET_RES_NUM = 1; // Get the number of results | ||
+ | TRID_GET_RES_FILEEXT = 3; // Filetype extension | ||
+ | TRID_GET_RES_POINTS = 4; // Matching points | ||
+ | TRID_GET_RES_CUTOFF = 20; // Cutoff percentage for results | ||
+ | |||
+ | function GetExtensions(): WideString; | ||
+ | var | ||
+ | Str1, Str2: String; | ||
+ | I, NumRes, NumPts, TotPts: Integer; | ||
+ | |||
+ | begin | ||
+ | Result := ''; | ||
+ | SetLength(Str1, 100); | ||
+ | NumRes := TridGetInfo(TRID_GET_RES_NUM, 0, PChar(Str1)); | ||
+ | if (NumRes > 0) then | ||
+ | begin | ||
+ | for I := 1 to NumRes do | ||
+ | TotPts := TotPts + TridGetInfo(TRID_GET_RES_POINTS, I, PChar(Str1)); | ||
+ | for I := 1 to NumRes do | ||
+ | begin | ||
+ | NumPts := TridGetInfo(TRID_GET_RES_POINTS, I, PChar(Str1)); | ||
+ | if ((NumPts*100/TotPts) > TRID_GET_RES_CUTOFF) then | ||
+ | begin | ||
+ | TridGetInfo(TRID_GET_RES_FILEEXT, I, PChar(Str1)); | ||
+ | Str2 := LowerCase(String(PChar(Str1))); | ||
+ | if (Length(Str2)>0) And (Pos(Str2, Result)=0) then | ||
+ | begin | ||
+ | if (I > 1) then Result := Result + '/'; | ||
+ | Result := Result + Str2; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | var | ||
+ | Initialized: Boolean; | ||
+ | AppPath, FileExts: WideString; | ||
+ | |||
+ | begin | ||
+ | if (not Initialized) then | ||
+ | begin | ||
+ | Initialized := True; | ||
+ | AppPath := WideExtractFilePath(GetApplicationPath()); | ||
+ | if (TridLoadDefsPack(AppPath) = 0) then | ||
+ | begin | ||
+ | WideDeleteFile(AppPath + 'TrIDDefs.trd'); | ||
+ | if (DialogYesNo('Error! TrIDDefs.trd not found in the program directory (' + AppPath + ')!' | ||
+ | + #13#10#13#10 + 'Do you want to download the latest version from the TrID website now?')) then | ||
+ | ShellOpenFile('http://mark0.net/soft-trid-e.html'); | ||
+ | Exit; | ||
+ | end; | ||
+ | end; | ||
+ | if (TridSubmitFileA(PChar(FilePath)) <> 0) then | ||
+ | begin | ||
+ | if (TridAnalyze <> 0) then | ||
+ | begin | ||
+ | FileExts := GetExtensions(); | ||
+ | if (Length(FileExts) > 0) then | ||
+ | FileName := WideStripExtension(FileName) + '.' + FileExts; | ||
+ | end; | ||
+ | end; | ||
end. | end. | ||
</source> | </source> |
Revision as of 13:35, 27 November 2011
This script integrates a famous TrID library which is used for detecting file extensions. Discussions about this script and some script variants can be found on forum: ReNamer and TrID library for detecting file extension.
Note: At the moment the library works only on ANSI filenames (non Unicode).
Requirements
- TrIDLib.dll in ReNamer's folder (http://mark0.net/code-tridlib-e.html)
- TrIDDefs.TRD in ReNamer's folder (http://mark0.net/soft-trid.html)
Code: Basic
Author: Denis Kozlov. Date: 16 Dec 2008. Initial version. Sets the file extension to the top matching extension. Can be easily extended.
- Tested with ReNamer Beta from 5 Dec 2008
{ TrID Script }
// TrID DLL exported functions
function TridAnalyze: integer;
external 'TrID_Analyze@TrIDLib.dll stdcall';
function TridSubmitFileA(szFileName: pchar): integer;
external 'TrID_SubmitFileA@tridlib.dll stdcall';
function TridLoadDefsPack(szPath: pchar): integer;
external 'TrID_LoadDefsPack@tridlib.dll stdcall';
function TridGetInfo(lInfoType: integer; lInfoIdx: integer; sBuf: pchar): integer;
external 'TrID_GetInfo@tridlib.dll stdcall';
// Constants for TrID_GetInfo
const
TRID_GET_RES_NUM = 1; // Get the number of results available
TRID_GET_RES_FILETYPE = 2; // Filetype descriptions
TRID_GET_RES_FILEEXT = 3; // Filetype extension
TRID_GET_RES_POINTS = 4; // Matching points
TRID_GET_VER = 1001; // TrIDLib version (major * 100 + minor)
TRID_GET_DEFSNUM = 1004; // Number of filetypes definitions loaded
function GetTopExtensions(Max: Integer): String;
var
S: String;
Num, I: Integer;
begin
Result := '';
SetLength(S, 100);
Num := TridGetInfo(TRID_GET_RES_NUM, 0, PChar(S));
if Num > 0 then
begin
if Num > Max then
Num := Max;
for I:=1 to Num do
begin
TridGetInfo(TRID_GET_RES_FILEEXT, I, PChar(S));
if I > 1 then Result := Result + '|';
Result := Result + String(PChar(S));
end;
end;
end;
var
Initialized: Boolean;
begin
if not Initialized then
begin
TridLoadDefsPack('');
Initialized := True;
end;
TridSubmitFileA(PChar(FilePath));
if TridAnalyze <> 0 then
FileName := WideStripExtension(FileName)+'.'+GetTopExtensions(1);
end.
Code: Advanced
Author: Andrew. Date: 27 Nov 2008. An extended version by Andrew. Read comments in the script for more information.
- Requires ReNamer 5.60+ Beta 10 or later
{ TrID Script v6 }
// v1 - Original script by Denis
// v2 - Modified by Andrew to output lowercase extensions and detect presence of TrIDLib.dll and TrIDDefs.trd
// v3 - Modified by Andrew to keep existing extensions if not identified properly
// v4 - Modified by Andrew to display multiple possible extensions
// v5 - Modified by Andrew to display multiple possible extensions with cutoff of 20%
// v6 - Modified by Andrew to fix a path-related issue
// Important: Download http://mark0.net/download/tridlib-free.zip and http://mark0.net/download/triddefs.zip,
// then extract TrIDLib.dll and TrIDDefs.trd to ReNamer.exe's folder/directory or else the script will fail
// TrID DLL exported functions
function TridLoadDefsPack(szPath: PChar): Integer;
external 'TrID_LoadDefsPack@TrIDLib.dll stdcall';
function TridSubmitFileA(szFileName: PChar): Integer;
external 'TrID_SubmitFileA@TrIDLib.dll stdcall';
function TridAnalyze: Integer;
external 'TrID_Analyze@TrIDLib.dll stdcall';
function TridGetInfo(lInfoType: Integer; lInfoIdx: Integer; sBuf: PChar): Integer;
external 'TrID_GetInfo@TrIDLib.dll stdcall';
// Constants for TrID_GetInfo etc.
const
TRID_GET_RES_NUM = 1; // Get the number of results
TRID_GET_RES_FILEEXT = 3; // Filetype extension
TRID_GET_RES_POINTS = 4; // Matching points
TRID_GET_RES_CUTOFF = 20; // Cutoff percentage for results
function GetExtensions(): WideString;
var
Str1, Str2: String;
I, NumRes, NumPts, TotPts: Integer;
begin
Result := '';
SetLength(Str1, 100);
NumRes := TridGetInfo(TRID_GET_RES_NUM, 0, PChar(Str1));
if (NumRes > 0) then
begin
for I := 1 to NumRes do
TotPts := TotPts + TridGetInfo(TRID_GET_RES_POINTS, I, PChar(Str1));
for I := 1 to NumRes do
begin
NumPts := TridGetInfo(TRID_GET_RES_POINTS, I, PChar(Str1));
if ((NumPts*100/TotPts) > TRID_GET_RES_CUTOFF) then
begin
TridGetInfo(TRID_GET_RES_FILEEXT, I, PChar(Str1));
Str2 := LowerCase(String(PChar(Str1)));
if (Length(Str2)>0) And (Pos(Str2, Result)=0) then
begin
if (I > 1) then Result := Result + '/';
Result := Result + Str2;
end;
end;
end;
end;
end;
var
Initialized: Boolean;
AppPath, FileExts: WideString;
begin
if (not Initialized) then
begin
Initialized := True;
AppPath := WideExtractFilePath(GetApplicationPath());
if (TridLoadDefsPack(AppPath) = 0) then
begin
WideDeleteFile(AppPath + 'TrIDDefs.trd');
if (DialogYesNo('Error! TrIDDefs.trd not found in the program directory (' + AppPath + ')!'
+ #13#10#13#10 + 'Do you want to download the latest version from the TrID website now?')) then
ShellOpenFile('http://mark0.net/soft-trid-e.html');
Exit;
end;
end;
if (TridSubmitFileA(PChar(FilePath)) <> 0) then
begin
if (TridAnalyze <> 0) then
begin
FileExts := GetExtensions();
if (Length(FileExts) > 0) then
FileName := WideStripExtension(FileName) + '.' + FileExts;
end;
end;
end.