program htmlwalk;
{ Example of how to traverse the document tree. Input from filename or stdin. }
{$IFDEF FPC}{$H+}{$MODE OBJFPC}{$ENDIF}
{$IFDEF WIN32}{$APPTYPE CONSOLE}{$ENDIF}
uses tidyobj;
function Indent(n:LongInt):string;
begin
Result:=StringOfChar(' ', n*2);
end;
procedure MyNodeProc(const info:tNodeInfo; data:pointer);
begin
if ( info.StartTag <> nil )
then WriteLn(Indent(info.Level), info.StartTag) // Write out the opening tag
else if ( info.Text <> nil ) then WriteLn(info.Text); // or text
ForEachNode(info.Doc, info.Child, @MyNodeProc, data); // Recurse into the child nodes
if ( info.EndTag <> nil ) then WriteLn(Indent(info.Level), info.EndTag); // Close the tag
end;
var
Tidy:tTidy;
begin
Tidy:=tTidy.Create(nil);
Tidy.WrapLen:=32767;
Tidy.ForceOutput:=True;
Tidy.UpperCaseTags:=True;
Tidy.OutputMode:=omAuto;
Tidy.PreScanScripts:=True;
Tidy.AllowUnknownTags:=True;
Tidy.MergeOrphanForms:=True;
if ( ParamCount = 0 ) then WriteLn(ErrOutput, 'Parsing console input...' );
if ( Tidy.ParseFile(ParamStr(1)) <> '' )
then ForEachNode(Tidy.Handle, Tidy.RootNode, @MyNodeProc, nil);
Tidy.Free;
end.