| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- {
- VampyreDoc Tool
- by Marek Mauder
- http://imaginglib.sourceforge.net
- The contents of this file are used with permission, subject to the Mozilla
- Public License Version 1.1 (the "License"); you may not use this file except
- in compliance with the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/MPL-1.1.html
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
- the specific language governing rights and limitations under the License.
- Info:
- - currently only for Delphi
- }
- {
- TODOS:
- - handle doc files with the same names but in different directories
- (they are overwritten now in producers with the next file)
- * solve url link targets - copy existing local refered files to output?
- - crosslink output with generated reference
- - add new mode: create toc XML file from hierarchy of crosslinked documents
- XHTML Producer:
- - remove frames from XHTML documentation and make output like texi2html
- CHM Producer:
- * relative links does not work in compiled files (see Root.xml's logo and
- stylesheets). Solve: put all existing referenced files to one dir,
- handle naming conflicts (i.e. path delims to dots) and set hhp option
- Flat=True
- - add table of contents page and set root as separate page
- outside toc tree
- }
- program VampDoc;
- {$APPTYPE CONSOLE}
- {$I ImagingOptions.inc}
- uses
- SysUtils,
- Classes,
- Helpers,
- ImagingUtility,
- DemoUtils,
- DOM,
- XMLRead,
- XHTMLProducer,
- CHMProducer;
- const
- sTitle = 'VampyreDoc';
- sVersion = '0.12';
- sAppTitle = sTitle + ' version ' + sVersion + sLineBreak +
- 'Copyright (c) 2004-2005 Marek Mauder' + sLineBreak;
- type
- TDocAction = (daGenDoc, daGenTOC, daGenTemplates, daHelp);
- var
- Action: TDocAction = daGenDoc;
- Project: TDocProject = nil;
- Producer: TDocProducer = nil;
- ProducerFormat: string = 'xhtml';//}'htmlhelp';
- OutputDir: string = {'doc';//}'..\Doc\_Final';
- InputFile: string = '..\Doc\VampyreDoc\Imaging.vdocproj';
- procedure ErrorProject(Exc: Exception);
- begin
- WriteLn('Error - when loading VampyreDoc project "' + InputFile +
- '". ' + sLineBreak + 'Exception Message: ' + Exc.Message + sLineBreak);
- Halt(1);
- end;
- procedure ErrorProducer;
- begin
- WriteLn('Error - unknown documentation producer selected "' + ProducerFormat +
- '".' + sLineBreak);
- Halt(1);
- end;
- procedure ErrorProcessing(Exc: Exception);
- begin
- WriteLn('Error - when processing documentation project "' + InputFile +
- '" with producer: ' + Producer.Name + '.' + sLineBreak +
- 'Exception Message: ' + Exc.Message + sLineBreak);
- Halt(1);
- end;
- procedure ErrorTemplates(Exc: Exception);
- begin
- WriteLn('Error - when generating TOC item templates for project "'
- + InputFile + '".' + sLineBreak +
- 'Exception Message: ' + Exc.Message + sLineBreak);
- Halt(1);
- end;
- function LoadProject(const FileName: string): TDocProject;
- var
- Doc: TXMLDocument;
- begin
- Result := nil;
- WriteLn('Loading project: ' + FileName);
- try
- XMLRead.ReadXMLFile(Doc, InputFile);
- Result := TDocProject.Create(Doc.DocumentElement, FileName);
- Doc.Free;
- except
- ErrorProject(GetExceptObject);
- end;
- WriteLn('Project successfuly loaded.');
- end;
- procedure PrintHelp;
- begin
- WriteLn('Help:');
- WriteLn;
- WriteLn('VampDoc [action] [format] [input] [output]');
- WriteLn;
- WriteLn('action:');
- WriteLn(' -doc generate documentation from .vdocproj file on input');
- WriteLn(' -toc generate TOC file from crosslinked documents (not functional now)');
- WriteLn(' -templates generate template documents based on TOC file');
- WriteLn(' -help|-h show this scren');
- WriteLn('format (only for -doc action):');
- WriteLn(' -f=xhtml set output format to XHTML');
- WriteLn(' -f=htmlhelp set output format to HTMLHelp (requires HTMLHelp compiler)');
- WriteLn('input:');
- WriteLn(' -i=filename input file must be valid .vdocproj file (for -doc and -templates)');
- WriteLn(' or VampyreDoc XML file (for -toc)');
- WriteLn('output:');
- WriteLn(' -o=dir root output directory for all generated files');
- WriteLn;
- WriteLn('Order of parameters is actually not important.');
- WriteLn('If any of the parameters is missing default ugly value is used.');
- WriteLn('See Vampyre Imaging Library documentation for more details about VampyreDoc.');
- WriteLn;
- end;
- procedure ParseOption(const Option: string);
- var
- S, Arg: string;
- I: LongInt;
- begin
- S := Option;
- if S = '-toc' then
- Action := daGenTOC
- else
- if S = '-doc' then
- Action := daGenDOC
- else
- if S = '-templates' then
- Action := daGenTemplates
- else
- if (S = '-h') or (S = '-help') then
- Action := daHelp
- else
- begin
- I := Pos('=', S);
- Arg := Copy(S, I + 1, MaxInt);
- Delete(S, I, MaxInt);
- if S = '-i' then
- InputFile := Arg
- else
- if S = '-o' then
- OutputDir := Arg
- else
- if S = '-f' then
- ProducerFormat := Arg;
- end;
- end;
- procedure ParseCmdLine;
- var
- I: LongInt;
- begin
- for I := 1 to ParamCount do
- ParseOption(ParamStr(I));
- end;
- begin
- ParseCmdLine;
- WriteLn(sAppTitle);
- case Action of
- daGenDoc:
- begin
- WriteLn('Action: Generate Documentation');
- Project := LoadProject(InputFile);
- if ProducerFormat = 'xhtml' then
- Producer := TXHTMLProducer.Create
- else
- if ProducerFormat = 'htmlhelp' then
- Producer := TCHMProducer.Create
- else
- ErrorProducer;
- WriteLn('Project processing started with producer: ' + Producer.Name);
- try
- OutputDir := ExpandFileTo(OutputDir, GetCurrentDir);
- Producer.Process(Project, OutputDir);
- except
- ErrorProcessing(GetExceptObject);
- end;
- WriteLn('Documentation produced in directory: ' + OutputDir);
- Project.Free;
- end;
- daGenTemplates:
- begin
- WriteLn('Action: Generate Templates');
- Project := LoadProject(InputFile);
- try
- GenerateTOCTemplates(Project);
- except
- ErrorTemplates(GetExceptObject);
- end;
- WriteLn('TOC item templates successfuly generated.');
- Project.Free;
- end;
- daGenTOC: PrintHelp;
- daHelp: PrintHelp;
- end;
- WriteLn;
- end.
|