154 lines
5.8 KiB
ObjectPascal
154 lines
5.8 KiB
ObjectPascal
{**************************************************************************************************}
|
|
{ }
|
|
{ Project JEDI Code Library (JCL) }
|
|
{ }
|
|
{ The contents of this file are 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/ }
|
|
{ }
|
|
{ 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. }
|
|
{ }
|
|
{ The Original Code is IdentifierList.dpr. }
|
|
{ }
|
|
{ The Initial Developer of the Original Code is Florent Ouchet <outchy att users dott sf dott net> }
|
|
{ Portions created by Florent Ouchet are Copyright (C) of Florent Ouchet. }
|
|
{ }
|
|
{ Contributors: }
|
|
{ }
|
|
{**************************************************************************************************}
|
|
{ }
|
|
{ Last modified: $Date: 2006-11-03 18:55:09 +0100 (ven., 03 nov. 2006) $ }
|
|
{ }
|
|
{**************************************************************************************************}
|
|
|
|
// note: this program converts the xml output of Doc-o-matic <http://www.doc-o-matic.com/>
|
|
// running on the JCL help files http://jcl.svn.sourceforge.net/viewvc/jcl/trunk/help/
|
|
// to text files for the JCL uses expert
|
|
|
|
// this program requires TJvSimpleXml from the JVCL <http://jvcl.sf.net/>
|
|
|
|
program IdentifierList;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
uses
|
|
SysUtils,
|
|
Classes,
|
|
JvSimpleXml;
|
|
|
|
var
|
|
UnitList: TStringList;
|
|
|
|
procedure InitIdentifierList;
|
|
begin
|
|
UnitList := TStringList.Create;
|
|
UnitList.CaseSensitive := False;
|
|
end;
|
|
|
|
procedure FinalizeIdentifierList;
|
|
var
|
|
Index: Integer;
|
|
IdentifierList: TStringList;
|
|
begin
|
|
for Index := 0 to UnitList.Count - 1 do
|
|
begin
|
|
IdentifierList := TStringList(UnitList.Objects[Index]);
|
|
IdentifierList.SaveToFile(Format('%s.txt', [UnitList.Strings[Index]]));
|
|
IdentifierList.Free;
|
|
end;
|
|
UnitList.Free;
|
|
end;
|
|
|
|
procedure AddIdentifier(const IdentifierName, UnitName: string);
|
|
var
|
|
IdentifierList: TStringList;
|
|
UnitIndex: Integer;
|
|
Identifier: string;
|
|
begin
|
|
if Pos('.', IdentifierName) > 0 then
|
|
Exit;
|
|
if Pos('@', IdentifierName) > 0 then
|
|
Identifier := Copy(IdentifierName, 1, Pos('@', IdentifierName) - 1)
|
|
else
|
|
Identifier := IdentifierName;
|
|
|
|
UnitIndex := UnitList.IndexOf(UnitName);
|
|
if UnitIndex = -1 then
|
|
begin
|
|
IdentifierList := TStringList.Create;
|
|
IdentifierList.CaseSensitive := False;
|
|
UnitList.AddObject(UnitName, IdentifierList);
|
|
end
|
|
else
|
|
IdentifierList := TStringList(UnitList.Objects[UnitIndex]);
|
|
|
|
IdentifierList.Add(Identifier);
|
|
end;
|
|
|
|
procedure ProcessXML(const FileName: string);
|
|
var
|
|
SimpleXML: TJvSimpleXML;
|
|
procedure ProcessNode(const Node: TJvSimpleXMLElem);
|
|
var
|
|
IndexSection, IndexChild: Integer;
|
|
SectionNode, ChildNode, LinkNode: TJvSimpleXMLElem;
|
|
NameProp, IdProp: TJvSimpleXMLProp;
|
|
begin
|
|
if SameText(Node.Name, 'topic') then
|
|
begin
|
|
for IndexSection := 0 to Node.Items.Count - 1 do
|
|
begin
|
|
SectionNode := Node.Items.Item[IndexSection];
|
|
NameProp := SectionNode.Properties.ItemNamed['name'];
|
|
LinkNode := SectionNode.Items.ItemNamed['link'];
|
|
if Assigned(NameProp) and SameText(SectionNode.Name, 'section')
|
|
and SameText(NameProp.Value, 'Unit') then
|
|
begin
|
|
IdProp := Node.Properties.ItemNamed['id'];
|
|
if Assigned(IdProp) then
|
|
begin
|
|
if Assigned(LinkNode) then
|
|
AddIdentifier(IdProp.Value, LinkNode.Value)
|
|
else
|
|
AddIdentifier(IdProp.Value, SectionNode.Value);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
for IndexChild := 0 to Node.Items.Count - 1 do
|
|
begin
|
|
ChildNode := Node.Items.Item[IndexChild];
|
|
ProcessNode(ChildNode);
|
|
end;
|
|
end;
|
|
begin
|
|
SimpleXML := TJvSimpleXML.Create(nil);
|
|
try
|
|
Write('Loading XML...');
|
|
SimpleXML.LoadFromFile(FileName);
|
|
WriteLn('done.');
|
|
SimpleXML.Options := SimpleXML.Options - [sxoAutoCreate];
|
|
Write('Processing XML...');
|
|
ProcessNode(SimpleXML.Root);
|
|
WriteLn('done.');
|
|
finally
|
|
SimpleXML.Free;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
Write('initializing lists...');
|
|
InitIdentifierList;
|
|
WriteLn('done.');
|
|
try
|
|
ProcessXML(place here the name of the xml generated by Doc-o-matic);
|
|
finally
|
|
Write('Saving lists...');
|
|
FinalizeIdentifierList;
|
|
WriteLn('done.');
|
|
end;
|
|
end.
|