Initial import of wikihelp Tools

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@600 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
christian_u 2008-10-31 15:40:07 +00:00
parent 1c8cd28631
commit 060c03ecf1
4 changed files with 892 additions and 0 deletions

View File

@ -0,0 +1,280 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="/"/>
<Version Value="6"/>
<General>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="1"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
<Language Value=""/>
<CharSet Value=""/>
</VersionInfo>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<CommandLineParams Value="/media/Volume/prometheus/output/i386-linux/help"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="LCL"/>
</Item1>
<Item2>
<PackageName Value="general"/>
</Item2>
</RequiredPackages>
<Units Count="14">
<Unit0>
<Filename Value="wiki2html.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wiki2html"/>
<CursorPos X="37" Y="56"/>
<TopLine Value="40"/>
<EditorIndex Value="0"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/packages/regexpr/src/regexpr.pp"/>
<UnitName Value="RegExpr"/>
<CursorPos X="3" Y="97"/>
<TopLine Value="75"/>
<UsageCount Value="10"/>
</Unit1>
<Unit2>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/packages/regexpr/src/old/regexpr.pp"/>
<UnitName Value="regexpr"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="34"/>
<UsageCount Value="10"/>
</Unit2>
<Unit3>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/packages/regexpr/src/regex.pp"/>
<UnitName Value="Regex"/>
<CursorPos X="3" Y="1116"/>
<TopLine Value="1113"/>
<UsageCount Value="10"/>
</Unit3>
<Unit4>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/packages/fcl-base/src/custapp.pp"/>
<UnitName Value="CustApp"/>
<CursorPos X="14" Y="59"/>
<TopLine Value="41"/>
<UsageCount Value="10"/>
</Unit4>
<Unit5>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/objpas/classes/classesh.inc"/>
<CursorPos X="3" Y="77"/>
<TopLine Value="51"/>
<UsageCount Value="10"/>
</Unit5>
<Unit6>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/packages/regexpr/tests/testreg1.pp"/>
<UnitName Value="testreg1"/>
<CursorPos X="37" Y="726"/>
<TopLine Value="692"/>
<UsageCount Value="10"/>
</Unit6>
<Unit7>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/objpas/classes/streams.inc"/>
<CursorPos X="1" Y="458"/>
<TopLine Value="437"/>
<UsageCount Value="10"/>
</Unit7>
<Unit8>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/inc/except.inc"/>
<CursorPos X="40" Y="194"/>
<TopLine Value="172"/>
<UsageCount Value="10"/>
</Unit8>
<Unit9>
<Filename Value="../../general/src/wikitohtml.pas"/>
<UnitName Value="wikitohtml"/>
<CursorPos X="82" Y="296"/>
<TopLine Value="275"/>
<UsageCount Value="10"/>
</Unit9>
<Unit10>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/objpas/sysutils/finah.inc"/>
<CursorPos X="10" Y="23"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit10>
<Unit11>
<Filename Value="../output/i386-win32/output/AudioX.html"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
<SyntaxHighlighter Value="HTML"/>
</Unit11>
<Unit12>
<Filename Value="../../Programme/lazarus/lcl/fileutil.pas"/>
<UnitName Value="FileUtil"/>
<CursorPos X="10" Y="88"/>
<TopLine Value="67"/>
<UsageCount Value="10"/>
</Unit12>
<Unit13>
<Filename Value="../../general/src/Utils.pas"/>
<UnitName Value="Utils"/>
<CursorPos X="3" Y="494"/>
<TopLine Value="471"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit13>
</Units>
<JumpHistory Count="29" HistoryIndex="28">
<Position1>
<Filename Value="wiki2html.lpr"/>
<Caret Line="44" Column="1" TopLine="32"/>
</Position1>
<Position2>
<Filename Value="wiki2html.lpr"/>
<Caret Line="46" Column="1" TopLine="34"/>
</Position2>
<Position3>
<Filename Value="wiki2html.lpr"/>
<Caret Line="50" Column="1" TopLine="38"/>
</Position3>
<Position4>
<Filename Value="wiki2html.lpr"/>
<Caret Line="52" Column="1" TopLine="40"/>
</Position4>
<Position5>
<Filename Value="wiki2html.lpr"/>
<Caret Line="53" Column="1" TopLine="41"/>
</Position5>
<Position6>
<Filename Value="wiki2html.lpr"/>
<Caret Line="54" Column="1" TopLine="42"/>
</Position6>
<Position7>
<Filename Value="wiki2html.lpr"/>
<Caret Line="55" Column="1" TopLine="43"/>
</Position7>
<Position8>
<Filename Value="wiki2html.lpr"/>
<Caret Line="56" Column="1" TopLine="44"/>
</Position8>
<Position9>
<Filename Value="wiki2html.lpr"/>
<Caret Line="57" Column="1" TopLine="45"/>
</Position9>
<Position10>
<Filename Value="wiki2html.lpr"/>
<Caret Line="58" Column="1" TopLine="46"/>
</Position10>
<Position11>
<Filename Value="wiki2html.lpr"/>
<Caret Line="59" Column="5" TopLine="47"/>
</Position11>
<Position12>
<Filename Value="wiki2html.lpr"/>
<Caret Line="44" Column="1" TopLine="32"/>
</Position12>
<Position13>
<Filename Value="wiki2html.lpr"/>
<Caret Line="59" Column="103" TopLine="48"/>
</Position13>
<Position14>
<Filename Value="wiki2html.lpr"/>
<Caret Line="44" Column="1" TopLine="32"/>
</Position14>
<Position15>
<Filename Value="wiki2html.lpr"/>
<Caret Line="59" Column="116" TopLine="47"/>
</Position15>
<Position16>
<Filename Value="wiki2html.lpr"/>
<Caret Line="44" Column="1" TopLine="32"/>
</Position16>
<Position17>
<Filename Value="wiki2html.lpr"/>
<Caret Line="46" Column="1" TopLine="34"/>
</Position17>
<Position18>
<Filename Value="wiki2html.lpr"/>
<Caret Line="50" Column="1" TopLine="38"/>
</Position18>
<Position19>
<Filename Value="wiki2html.lpr"/>
<Caret Line="52" Column="1" TopLine="40"/>
</Position19>
<Position20>
<Filename Value="wiki2html.lpr"/>
<Caret Line="53" Column="1" TopLine="41"/>
</Position20>
<Position21>
<Filename Value="wiki2html.lpr"/>
<Caret Line="54" Column="1" TopLine="42"/>
</Position21>
<Position22>
<Filename Value="wiki2html.lpr"/>
<Caret Line="55" Column="1" TopLine="43"/>
</Position22>
<Position23>
<Filename Value="wiki2html.lpr"/>
<Caret Line="56" Column="1" TopLine="44"/>
</Position23>
<Position24>
<Filename Value="wiki2html.lpr"/>
<Caret Line="57" Column="1" TopLine="45"/>
</Position24>
<Position25>
<Filename Value="wiki2html.lpr"/>
<Caret Line="58" Column="1" TopLine="46"/>
</Position25>
<Position26>
<Filename Value="wiki2html.lpr"/>
<Caret Line="59" Column="116" TopLine="47"/>
</Position26>
<Position27>
<Filename Value="wiki2html.lpr"/>
<Caret Line="44" Column="1" TopLine="32"/>
</Position27>
<Position28>
<Filename Value="wiki2html.lpr"/>
<Caret Line="59" Column="1" TopLine="47"/>
</Position28>
<Position29>
<Filename Value="wiki2html.lpr"/>
<Caret Line="56" Column="37" TopLine="40"/>
</Position29>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="8"/>
<SearchPaths>
<UnitOutputDirectory Value="../output/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<CStyleOperator Value="False"/>
</SyntaxOptions>
</Parsing>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="1">
<Item1>
<Source Value="../LKomponenten/tdbf/dbf_common.pas"/>
<Line Value="375"/>
</Item1>
</BreakPoints>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,109 @@
program wiki2html;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp
{ you can add units after this }, regex, regexpr, wikitohtml,Fileutil;
type
{ TWiki2HTML }
TWiki2HTML = class(TCustomApplication)
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp; virtual;
end;
{ TWiki2HTML }
procedure TWiki2HTML.DoRun;
var
ErrorMsg: String;
fs: TFileStream;
ss: TStringStream;
r: TRegexEngine;
index: longint;
len: longint;
tmp: ansistring;
Info: TSearchRec;
begin
// parse parameters
if HasOption('h','help') then begin
WriteHelp;
Halt;
end;
{ add your program here }
if DirectoryExists(CleanAndExpandDirectory(GetParams(1))) then
begin
if FindFirst (CleanAndExpandDirectory(GetParams(1))+DirectorySeparator+'*.txt',faAnyFile,Info)=0 then
repeat
with Info do
begin
if not ((Attr and faDirectory) = faDirectory) then
begin
fs := TFilestream.Create(CleanAndExpandDirectory(GetParams(1))+Info.Name,fmOpenRead);
ss := TStringStream.Create('');
ss.CopyFrom(fs,fs.Size);
fs.free;
tmp := wikitext2html(GetParams(1),ss.DataString);
ss.free;
ss := TStringStream.Create(tmp);
fs := TFileStream.Create(ChangeFileExt(CleanAndExpandDirectory(GetParams(1))+lowercase(Info.Name),'.html'),fmCreate);
fs.CopyFrom(ss,ss.Size);
fs.Free;
end;
end;
until FindNext(info)<>0;
FindClose(Info);
end
else
begin
fs := TFilestream.Create(GetParams(1),fmOpenRead);
ss := TStringStream.Create('');
ss.CopyFrom(fs,fs.Size);
fs.free;
tmp := wikitext2html(GetParams(1),ss.DataString);
ss.free;
ss := TStringStream.Create(tmp);
fs := TFileStream.Create(ChangeFileExt(GetParams(1),'.html'),fmCreate);
fs.CopyFrom(ss,ss.Size);
fs.Free;
end;
// stop program loop
Terminate;
end;
constructor TWiki2HTML.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
end;
destructor TWiki2HTML.Destroy;
begin
inherited Destroy;
end;
procedure TWiki2HTML.WriteHelp;
begin
{ add your help code here }
writeln('Usage: ',ExeName,' filename.txt');
end;
var
Application: TWiki2HTML;
begin
Application:=TWiki2HTML.Create(nil);
Application.Title:='Wiki2HTML';
Application.Run;
Application.Free;
end.

View File

@ -0,0 +1,277 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="/"/>
<Version Value="6"/>
<General>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="0"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
<Language Value=""/>
<CharSet Value=""/>
</VersionInfo>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<CommandLineParams Value="--allpages=&quot;http://www.ullihome.de/index.php/Spezial:Allpages&quot; --exportpage=&quot;http://www.ullihome.de/index.php/Spezial:Export&quot; --imagedir=&quot;http://www.ullihome.de/images/&quot; --output=&quot;output&quot;"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="1">
<Item1>
<PackageName Value="synapse"/>
</Item1>
</RequiredPackages>
<Units Count="12">
<Unit0>
<Filename Value="wikidownload.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wikidownload"/>
<CursorPos X="111" Y="145"/>
<TopLine Value="134"/>
<EditorIndex Value="0"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/packages/fcl-base/src/custapp.pp"/>
<UnitName Value="CustApp"/>
<CursorPos X="13" Y="20"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit1>
<Unit2>
<Filename Value="../wikihelp/src/umain.pas"/>
<ComponentName Value="fWikiHelp"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="uMain"/>
<CursorPos X="49" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit2>
<Unit3>
<Filename Value="../wikihelp/defs/deutsch.xml"/>
<CursorPos X="54" Y="4"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
<SyntaxHighlighter Value="XML"/>
</Unit3>
<Unit4>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/objpas/classes/streams.inc"/>
<CursorPos X="45" Y="457"/>
<TopLine Value="436"/>
<UsageCount Value="10"/>
</Unit4>
<Unit5>
<Filename Value="../general/src/Utils.pas"/>
<UnitName Value="Utils"/>
<CursorPos X="1" Y="619"/>
<TopLine Value="605"/>
<UsageCount Value="10"/>
</Unit5>
<Unit6>
<Filename Value="AudioX.xml"/>
<CursorPos X="44" Y="23"/>
<TopLine Value="28"/>
<UsageCount Value="10"/>
<SyntaxHighlighter Value="XML"/>
</Unit6>
<Unit7>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/inc/system.inc"/>
<CursorPos X="38" Y="862"/>
<TopLine Value="838"/>
<UsageCount Value="10"/>
</Unit7>
<Unit8>
<Filename Value="wiki2html.lpr"/>
<UnitName Value="wiki2html"/>
<CursorPos X="63" Y="10"/>
<TopLine Value="13"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
<Filename Value="../../general/src/wikitohtml.pas"/>
<UnitName Value="wikitohtml"/>
<CursorPos X="1" Y="77"/>
<TopLine Value="40"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="../../Programme/lazarus/fpc/2.2.3/source/rtl/inc/objpas.inc"/>
<CursorPos X="36" Y="151"/>
<TopLine Value="131"/>
<UsageCount Value="10"/>
</Unit10>
<Unit11>
<Filename Value="../output/i386-win32/output/NetMonitorde.txt"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="8"/>
<UsageCount Value="10"/>
<SyntaxHighlighter Value="None"/>
</Unit11>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="wikidownload.lpr"/>
<Caret Line="181" Column="1" TopLine="169"/>
</Position1>
<Position2>
<Filename Value="wikidownload.lpr"/>
<Caret Line="182" Column="1" TopLine="170"/>
</Position2>
<Position3>
<Filename Value="wikidownload.lpr"/>
<Caret Line="183" Column="1" TopLine="171"/>
</Position3>
<Position4>
<Filename Value="wikidownload.lpr"/>
<Caret Line="184" Column="1" TopLine="172"/>
</Position4>
<Position5>
<Filename Value="wikidownload.lpr"/>
<Caret Line="185" Column="1" TopLine="173"/>
</Position5>
<Position6>
<Filename Value="wikidownload.lpr"/>
<Caret Line="186" Column="1" TopLine="174"/>
</Position6>
<Position7>
<Filename Value="wikidownload.lpr"/>
<Caret Line="187" Column="1" TopLine="175"/>
</Position7>
<Position8>
<Filename Value="wikidownload.lpr"/>
<Caret Line="188" Column="1" TopLine="176"/>
</Position8>
<Position9>
<Filename Value="wikidownload.lpr"/>
<Caret Line="190" Column="1" TopLine="178"/>
</Position9>
<Position10>
<Filename Value="wikidownload.lpr"/>
<Caret Line="191" Column="1" TopLine="179"/>
</Position10>
<Position11>
<Filename Value="wikidownload.lpr"/>
<Caret Line="211" Column="137" TopLine="199"/>
</Position11>
<Position12>
<Filename Value="wikidownload.lpr"/>
<Caret Line="81" Column="24" TopLine="81"/>
</Position12>
<Position13>
<Filename Value="wikidownload.lpr"/>
<Caret Line="77" Column="1" TopLine="65"/>
</Position13>
<Position14>
<Filename Value="wikidownload.lpr"/>
<Caret Line="173" Column="1" TopLine="161"/>
</Position14>
<Position15>
<Filename Value="wikidownload.lpr"/>
<Caret Line="174" Column="1" TopLine="162"/>
</Position15>
<Position16>
<Filename Value="wikidownload.lpr"/>
<Caret Line="175" Column="1" TopLine="163"/>
</Position16>
<Position17>
<Filename Value="wikidownload.lpr"/>
<Caret Line="176" Column="1" TopLine="164"/>
</Position17>
<Position18>
<Filename Value="wikidownload.lpr"/>
<Caret Line="177" Column="1" TopLine="165"/>
</Position18>
<Position19>
<Filename Value="wikidownload.lpr"/>
<Caret Line="179" Column="1" TopLine="167"/>
</Position19>
<Position20>
<Filename Value="wikidownload.lpr"/>
<Caret Line="180" Column="1" TopLine="168"/>
</Position20>
<Position21>
<Filename Value="wikidownload.lpr"/>
<Caret Line="181" Column="1" TopLine="169"/>
</Position21>
<Position22>
<Filename Value="wikidownload.lpr"/>
<Caret Line="182" Column="1" TopLine="170"/>
</Position22>
<Position23>
<Filename Value="wikidownload.lpr"/>
<Caret Line="183" Column="1" TopLine="171"/>
</Position23>
<Position24>
<Filename Value="wikidownload.lpr"/>
<Caret Line="184" Column="1" TopLine="172"/>
</Position24>
<Position25>
<Filename Value="wikidownload.lpr"/>
<Caret Line="185" Column="1" TopLine="173"/>
</Position25>
<Position26>
<Filename Value="wikidownload.lpr"/>
<Caret Line="186" Column="1" TopLine="174"/>
</Position26>
<Position27>
<Filename Value="wikidownload.lpr"/>
<Caret Line="187" Column="1" TopLine="175"/>
</Position27>
<Position28>
<Filename Value="wikidownload.lpr"/>
<Caret Line="188" Column="1" TopLine="176"/>
</Position28>
<Position29>
<Filename Value="wikidownload.lpr"/>
<Caret Line="190" Column="1" TopLine="178"/>
</Position29>
<Position30>
<Filename Value="wikidownload.lpr"/>
<Caret Line="191" Column="1" TopLine="179"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="8"/>
<SearchPaths>
<UnitOutputDirectory Value="../output/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<CStyleOperator Value="False"/>
</SyntaxOptions>
</Parsing>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="2">
<Item1>
<Source Value="../LKomponenten/tdbf/dbf_common.pas"/>
<Line Value="375"/>
</Item1>
<Item2>
<Source Value="wikidownload.lpr"/>
<Line Value="77"/>
</Item2>
</BreakPoints>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,226 @@
program wikidownload;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils, CustApp
{ you can add units after this }, synapse, httpsend,xmlread,dom;
type
{ TWikiDownload }
TWikiDownload = class(TCustomApplication)
protected
procedure DoRun; override;
public
pages : TStringList;
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp; virtual;
procedure ExportPage(pagename : string);
end;
{ TWikiDownload }
procedure TWikiDownload.DoRun;
var
ErrorMsg: String;
ss: TStringStream;
http: THTTPSend;
s: String;
tmp: String;
i: Integer;
begin
// parse parameters
if HasOption('h','help') then begin
WriteHelp;
Halt;
end;
{ add your program here }
ss := TStringStream.Create('');
http := THttpSend.Create;
http.UserAgent := 'Mozilla/4.0 (compatible; WikiHelp)';
http.HTTPMethod('GET',GetOptionValue('a','allpages'));
http.Document.SaveToStream(ss);
http.Free;
s := ss.DataString;
s := copy(s,pos('<table style="background: inherit;" border="0" width="100%"><tr><td>',s),length(s));
s := copy(s,0,pos('</td></tr></table><div class="printfooter">',s));
if s = '' then
begin
writeln('Special Page not found !');
exit;
end;
ss.Free;
pages := TStringList.Create;
while pos('<a href="',s) > 0 do
begin
s := copy(s,pos('<a href="',s)+10,length(s));
tmp := copy(s,0,pos('"',s)-1);
if pos('.php/',tmp) > 0 then
tmp := copy(tmp,pos('.php/',tmp)+5,length(tmp));
if copy(tmp,0,length(GetOptionValue('o','pageoffset'))) = GetOptionValue('o','pageoffset') then
pages.Add(tmp);
s := copy(s,pos('"',s)+1,length(s));
end;
if HasOption('r','recurse') then
begin
end
else
for i := 0 to pages.Count-1 do
ExportPage(pages[i]);
pages.free;
// stop program loop
Terminate;
end;
constructor TWikiDownload.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
end;
destructor TWikiDownload.Destroy;
begin
inherited Destroy;
end;
procedure TWikiDownload.WriteHelp;
begin
{ add your help code here }
writeln('Usage: ',ExeName,' -h');
end;
function ValidateFileName(old : string) : string;
begin
Result := StringReplace(old,'\','',[rfReplaceAll]);
Result := StringReplace(Result,'/','',[rfReplaceAll]);
Result := StringReplace(Result,'@','',[rfReplaceAll]);
Result := StringReplace(Result,';','',[rfReplaceAll]);
Result := StringReplace(Result,'#','_',[rfReplaceAll]);
Result := StringReplace(Result,'>','_',[rfReplaceAll]);
Result := StringReplace(Result,'<','_',[rfReplaceAll]);
Result := StringReplace(Result,'|','_',[rfReplaceAll]);
Result := StringReplace(Result,'"','_',[rfReplaceAll]);
Result := StringReplace(Result,':','_',[rfReplaceAll]);
Result := StringReplace(Result,'*','_',[rfReplaceAll]);
Result := StringReplace(Result,'?','_',[rfReplaceAll]);
end;
procedure TWikiDownload.ExportPage(pagename: string);
var
http: THTTPSend;
xml: TXMLDocument;
iNode: TDOMNode;
f : TextFile;
tmp: WideString;
istr: WideString;
procedure ReplaceImages(ImageTagName : string);
begin
while pos('[['+ImageTagName+':',istr) > 0 do
begin
istr := copy(istr,pos('[['+ImageTagName+':',istr)+length(ImageTagname)+3,length(istr));
if (pos('|',istr) > 0) and (pos('|',istr) < pos(']]',istr)) then
begin
http := THttpSend.Create;
http.HTTPMethod('GET',GetOptionValue('i','imagedir')+copy(istr,0,pos('|',istr)-1));
http.Document.SaveToFile(GetOptionValue('o','output')+DirectorySeparator+ValidateFileName(lowercase(copy(istr,0,pos('|',istr)-1))));
http.Free;
istr := copy(istr,pos(']]',istr)+2,length(istr));
end
else
begin
{ aWikiStart := eWikiPage.Text;
if pos('index.php',aWikiStart) > 0 then
aWikiStart := copy(aWikiStart,0,pos('index.php',aWikiStart)-1);}
http := THttpSend.Create;
http.HTTPMethod('GET',GetOptionValue('i','imagedir')+copy(istr,0,pos(']]',istr)-1));
http.Document.SaveToFile(StringReplace(trim(GetOptionValue('o','output')),#13,'',[rfReplaceAll])+DirectorySeparator+ValidateFileName(lowercase(copy(istr,0,pos(']]',istr)-1))));
http.Free;
istr := copy(istr,pos(']]',istr)+2,length(istr));
end;
end;
end;
procedure AddLinksFromPage;
var
linkcontent: String;
begin
while pos('[[',istr) > 0 do
begin
istr := copy(istr,pos('[[',istr)+2,length(istr));
if (pos('|',istr) > 0) and (pos('|',istr) < pos(']]',istr)) then
begin
linkcontent := copy(istr,0,pos('|',istr)-1);
if pages.IndexOf(linkcontent) = -1 then
pages.Add(linkcontent);
end
else
begin
linkcontent := copy(istr,0,pos(']]',istr)-1);
if pages.IndexOf(linkcontent) = -1 then
pages.Add(linkcontent);
end;
end;
end;
begin
http := THttpSend.Create;
http.UserAgent := 'Mozilla/4.0 (compatible; WikiHelp)';
http.HTTPMethod('POST',GetOptionValue('e','exportpage')+'?action=submit&pages='+pagename+'&curonly=true');
if http.ResultCode = 200 then
begin
xml := TXMLDocument.Create;
try
ReadXMLFile(xml,http.Document);
http.Free;
iNode := xml.DocumentElement.FindNode('page');
if Assigned(iNode) then
iNode := iNode.FindNode('revision');
if Assigned(iNode) then
iNode := iNode.FindNode('text');
if Assigned(iNode) then
begin
AssignFile(f,StringReplace(trim(GetOptionValue('o','output')),#13,'',[rfReplaceAll])+DirectorySeparator+ValidateFilename(pagename)+'.txt');
rewrite(f);
if Assigned(iNode.FirstChild) then
tmp := iNode.FirstChild.NodeValue
else
tmp := iNode.NodeValue;
writeln(f,tmp);
Closefile(f);
istr := tmp;
ReplaceImages('Bild');
istr := tmp;
ReplaceImages('Image');
istr := tmp;
if hasoption('r','recursive') then
AddLinksFromPage;
end
else
writeln('Page Node for: '+pagename+' not found !');
xml.Free;
except
on e : Exception do
writeln('Error Processing :'+pagename+':'+e.Message+' ('+StringReplace(trim(GetOptionValue('o','output')),#13,'',[rfReplaceAll])+DirectorySeparator+ValidateFilename(pagename)+'.txt)');
end;
end
else
writeln('Page: '+pagename+' not found !');
end;
var
Application: TWikiDownload;
begin
Application:=TWikiDownload.Create(nil);
Application.Title:='Wiki Download';
Application.Run;
Application.Free;
end.