[JEDI.NET-commits] tools/JediDoc/source JediDoc.System.InfoClasses.pas,1.1,1.2 JediDoc.System.Xml.As
Status: Pre-Alpha
Brought to you by:
jedi_mbe
From: Marcel B. <jed...@us...> - 2005-06-19 14:49:47
|
Update of /cvsroot/jedidotnet/tools/JediDoc/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10556/tools/JediDoc/source Modified Files: JediDoc.System.InfoClasses.pas JediDoc.System.Xml.AssemblyDocGeneration.pas JediDoc.System.Xml.Reflection.pas Log Message: * Fix: Events were not written to the XML unit doc * Added: custom tag processing: (parameterized) common text adding * Added: include tags can now have 'arg0' attributes, as well as <translate> elements Index: JediDoc.System.Xml.AssemblyDocGeneration.pas =================================================================== RCS file: /cvsroot/jedidotnet/tools/JediDoc/source/JediDoc.System.Xml.AssemblyDocGeneration.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** JediDoc.System.Xml.AssemblyDocGeneration.pas 28 Mar 2005 12:26:16 -0000 1.1 --- JediDoc.System.Xml.AssemblyDocGeneration.pas 19 Jun 2005 14:49:38 -0000 1.2 *************** *** 185,188 **** --- 185,189 ---- Environment.CurrentDirectory := savedDir; end; + XmlUtils.CustomTagProcessing(Result); end; end; *************** *** 219,223 **** --- 220,231 ---- var childNode: XmlNode; + translationList: SortedList; begin + translationList := SortedList.Create(CaseInsensitiveComparer.DefaultInvariant); + translationList.Add('<see-ns />', System.String.Format('<see cref="N:{0}" />', member.NameSpace)); + translationList.Add('<see-class />', System.String.Format('<see cref="T:{0}.{1}" />', member.NameSpace, member.TypeName)); + translationList.Add('<see-self />', System.String.Format('<see cref="{0}" />', canonicalName)); + XmlUtils.Translate(XmlElement(memberNode), translationList); + FWriter.WriteStartElement('member'); FWriter.WriteAttributeString('name', canonicalName); Index: JediDoc.System.InfoClasses.pas =================================================================== RCS file: /cvsroot/jedidotnet/tools/JediDoc/source/JediDoc.System.InfoClasses.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** JediDoc.System.InfoClasses.pas 28 Mar 2005 12:26:16 -0000 1.1 --- JediDoc.System.InfoClasses.pas 19 Jun 2005 14:49:38 -0000 1.2 *************** *** 68,83 **** {$REGION 'Protected methods'} strict protected ! function AddMember(typeId, name, assembly: string; loc: Location): MemberInfo; {$ENDREGION} {$REGION 'Public methods'} public ! function AddReflectionMember(typeId, name, assembly: string): MemberInfo; overload; ! function AddReflectionMember(typeId, name, assembly: string; isOptional: Boolean): MemberInfo; overload; ! function AddReflectionMember(typeId, name, assembly: string; isOptional: Boolean; params: StringArray): MemberInfo; overload; ! function AddReflectionMember(typeId, name, assembly: string; isOptional, hasRetVal: Boolean): MemberInfo; overload; ! function AddReflectionMember(typeId, name, assembly: string; isOptional, hasRetVal: Boolean; params: StringArray): MemberInfo; overload; ! function AddReflectionMember(typeId, name, assembly: string; params: StringArray): MemberInfo; overload; function AddXmlMember(memberId, xmlFile: string; params: array of string; hasExclude: Boolean): MemberInfo; function GetEnumerator: IEnumerator; overload; --- 68,84 ---- {$REGION 'Protected methods'} strict protected ! function AddMember(typeId, name, nameSpace, assembly: string; loc: Location): MemberInfo; {$ENDREGION} {$REGION 'Public methods'} public ! function AddReflectionMember(typeId, name, nameSpace, assembly: string): MemberInfo; overload; ! function AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional: Boolean): MemberInfo; overload; ! function AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional: Boolean; params: StringArray): MemberInfo; overload; ! function AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional, ! hasRetVal: Boolean): MemberInfo; overload; ! function AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional, hasRetVal: Boolean; params: StringArray): MemberInfo; overload; ! function AddReflectionMember(typeId, name, nameSpace, assembly: string; params: StringArray): MemberInfo; overload; function AddXmlMember(memberId, xmlFile: string; params: array of string; hasExclude: Boolean): MemberInfo; function GetEnumerator: IEnumerator; overload; *************** *** 93,97 **** {$REGION 'Constructor'} protected ! constructor Create(typeId, name, assembly: string); {$ENDREGION} {$REGION 'Data'} --- 94,98 ---- {$REGION 'Constructor'} protected ! constructor Create(typeId, name, nameSpace, assembly: string); {$ENDREGION} {$REGION 'Data'} *************** *** 102,107 **** --- 103,111 ---- FIsOptional: Boolean; FLocation: Location; + FMemberName: string; FName: string; + FNameSpace: string; FParamNames: ArrayList; + FTypeName: string; FUnitName: string; FXmlFile: string; *************** *** 136,142 **** --- 140,149 ---- property IsOptional: Boolean read FIsOptional; property Location: Location read FLocation; + property MemberName: string read FMemberName; property Name: string read FName; + property NameSpace: string read FNameSpace; property Count: Integer read get_Count; property Items[&index: Integer]: ParamInfo read get_Items; default; + property TypeName: string read FTypeName; property UnitName: string read get_UnitName; property XmlFile: string read FXmlFile; *************** *** 356,359 **** --- 363,367 ---- Conversions.MemberNameToDocType(thisEvent), Conversions.MemberNameToDocName(thisEvent), + thisEvent.DeclaringType.Namespace, assembly, IsEventOptional(thisEvent), *************** *** 369,372 **** --- 377,381 ---- Conversions.MemberNameToDocType(thisField), Conversions.MemberNameToDocName(thisField), + thisField.DeclaringType.Namespace, assembly, IsFieldOptional(thisField), *************** *** 388,391 **** --- 397,401 ---- Conversions.MemberNameToDocType(thisMethod), Conversions.MemberNameToDocName(thisMethod), + thisMethod.DeclaringType.Namespace, assembly, IsMethodOptional(thisMethod), *************** *** 402,405 **** --- 412,416 ---- Conversions.MemberNameToDocType(thisProperty), Conversions.MemberNameToDocName(thisProperty), + thisProperty.DeclaringType.Namespace, assembly, IsPropertyOptional(thisProperty), *************** *** 415,422 **** begin // Asserts the namespace item exists. ! di := docs.AddReflectionMember('N:', thisType.Namespace, assembly); di.SetUnitName('namespaceDoc.' + thisType.Namespace); // Asserts the type exists. ! di := docs.AddReflectionMember('T:', Conversions.TypeNameToDocName(thisType), assembly, IsTypeOptional(thisType)); di.SetUnitName(GetUnitFor(thisType)); for mi in thisType.GetMembers(BindingFlags.Static or BindingFlags.Instance or BindingFlags.Public or --- 426,434 ---- begin // Asserts the namespace item exists. ! di := docs.AddReflectionMember('N:', thisType.Namespace, '', assembly); di.SetUnitName('namespaceDoc.' + thisType.Namespace); // Asserts the type exists. ! di := docs.AddReflectionMember('T:', Conversions.TypeNameToDocName(thisType), thisType.Namespace, assembly, ! IsTypeOptional(thisType)); di.SetUnitName(GetUnitFor(thisType)); for mi in thisType.GetMembers(BindingFlags.Static or BindingFlags.Instance or BindingFlags.Public or *************** *** 444,448 **** if not Assigned(accessMethod) then accessMethod := thisEvent.GetRemoveMethod(True); ! Result := thisEvent.IsSpecialName and Assigned(accessMethod) and IsMethodDocumentable(accessMethod, True); end; --- 456,460 ---- if not Assigned(accessMethod) then accessMethod := thisEvent.GetRemoveMethod(True); ! Result := not thisEvent.IsSpecialName and Assigned(accessMethod) and IsMethodDocumentable(accessMethod, True); end; *************** *** 676,680 **** end; ! function DocOverview.AddMember(typeId, name, assembly: string; loc: Location): MemberInfo; var keyName: string; --- 688,692 ---- end; ! function DocOverview.AddMember(typeId, name, nameSpace, assembly: string; loc: Location): MemberInfo; var keyName: string; *************** *** 685,689 **** if idx < 0 then begin ! Result := MemberInfo.Create(typeId, name, assembly); FMembers.Add(keyName, Result); end --- 697,701 ---- if idx < 0 then begin ! Result := MemberInfo.Create(typeId, name, nameSpace, assembly); FMembers.Add(keyName, Result); end *************** *** 693,725 **** end; ! function DocOverview.AddReflectionMember(typeId, name, assembly: string): MemberInfo; begin ! Result := AddMember(typeId, name, assembly, Location.InAssembly); end; ! function DocOverview.AddReflectionMember(typeId, name, assembly: string; isOptional: Boolean): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, assembly); Result.SetIsOptional(isOptional); end; ! function DocOverview.AddReflectionMember(typeId, name, assembly: string; isOptional: Boolean; params: array of string): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, assembly); Result.SetIsOptional(isOptional); Result.AddReflectionParameters(params); end; ! function DocOverview.AddReflectionMember(typeId, name, assembly: string; isOptional, hasRetVal: Boolean): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, assembly); Result.SetIsOptional(isOptional); end; ! function DocOverview.AddReflectionMember(typeId, name, assembly: string; isOptional, hasRetVal: Boolean; params: array of string): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, assembly); Result.SetIsOptional(isOptional); Result.SetHasReturnValue(hasRetVal); --- 705,738 ---- end; ! function DocOverview.AddReflectionMember(typeId, name, nameSpace, assembly: string): MemberInfo; begin ! Result := AddMember(typeId, name, nameSpace, assembly, Location.InAssembly); end; ! function DocOverview.AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional: Boolean): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, nameSpace, assembly); Result.SetIsOptional(isOptional); end; ! function DocOverview.AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional: Boolean; params: array of string): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, nameSpace, assembly); Result.SetIsOptional(isOptional); Result.AddReflectionParameters(params); end; ! function DocOverview.AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional, ! hasRetVal: Boolean): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, nameSpace, assembly); Result.SetIsOptional(isOptional); end; ! function DocOverview.AddReflectionMember(typeId, name, nameSpace, assembly: string; isOptional, hasRetVal: Boolean; params: array of string): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, nameSpace, assembly); Result.SetIsOptional(isOptional); Result.SetHasReturnValue(hasRetVal); *************** *** 727,733 **** end; ! function DocOverview.AddReflectionMember(typeId, name, assembly: string; params: array of string): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, assembly); Result.AddReflectionParameters(params); end; --- 740,747 ---- end; ! function DocOverview.AddReflectionMember(typeId, name, nameSpace, assembly: string; ! params: array of string): MemberInfo; begin ! Result := AddReflectionMember(typeId, name, nameSpace, assembly); Result.AddReflectionParameters(params); end; *************** *** 735,739 **** function DocOverview.AddXmlMember(memberId, xmlFile: string; params: array of string; hasExclude: Boolean): MemberInfo; begin ! Result := AddMember(Conversions.XmlNameToDocType(memberId), Conversions.XmlNameToDocName(memberId), '', Location.InXml); Result.SetXmlFile(xmlFile, hasExclude); --- 749,753 ---- function DocOverview.AddXmlMember(memberId, xmlFile: string; params: array of string; hasExclude: Boolean): MemberInfo; begin ! Result := AddMember(Conversions.XmlNameToDocType(memberId), Conversions.XmlNameToDocName(memberId), '', '', Location.InXml); Result.SetXmlFile(xmlFile, hasExclude); *************** *** 840,850 **** {$REGION 'MemberInfo'} ! constructor MemberInfo.Create(typeId, name, assembly: string); begin inherited Create; FAssembly := assembly; FName := name + ':' + typeId.SubString(0, 1).ToUpper; FLocation := JediDoc.System.InfoClasses.Location.None; FParamNames := ArrayList.Create; end; --- 854,885 ---- {$REGION 'MemberInfo'} ! constructor MemberInfo.Create(typeId, name, nameSpace, assembly: string); ! var ! beforeParams: string; begin inherited Create; FAssembly := assembly; FName := name + ':' + typeId.SubString(0, 1).ToUpper; + FNameSpace := nameSpace; FLocation := JediDoc.System.InfoClasses.Location.None; FParamNames := ArrayList.Create; + case typeId.ToLower.Chars[0] of + 't': + begin + FTypeName := name.Substring(nameSpace.Length + 1); + FMemberName := ''; + end; + 'n': + begin + FTypeName := ''; + FMemberName := ''; + end; + else + begin + beforeParams := StringUtils.BeforeLast(name.Substring(nameSpace.Length + 1), '('); + FTypeName := StringUtils.BeforeLast(beforeParams, '.'); + FMemberName := StringUtils.AfterLast(beforeParams, '.'); + end; + end; end; Index: JediDoc.System.Xml.Reflection.pas =================================================================== RCS file: /cvsroot/jedidotnet/tools/JediDoc/source/JediDoc.System.Xml.Reflection.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** JediDoc.System.Xml.Reflection.pas 28 Mar 2005 12:26:16 -0000 1.1 --- JediDoc.System.Xml.Reflection.pas 19 Jun 2005 14:49:38 -0000 1.2 *************** *** 28,35 **** {$REGION 'uses'} uses System.Collections, System.IO, ! System.Xml, ! JediDoc.System.InfoClasses; {$ENDREGION} --- 28,37 ---- {$REGION 'uses'} uses + Jedi.System.Strings, + JediDoc.System.InfoClasses, System.Collections, + System.Collections.Specialized, System.IO, ! System.Xml; {$ENDREGION} *************** *** 51,63 **** {$ENDREGION} ! {$REGION 'Utilities (include processing)'} XmlUtils = class {$REGION 'Private static methods'} strict private class function GetIncludedNodes(filename, xpath: string; fileList: HashTable): XmlNodeList; static; {$ENDREGION} {$REGION 'Static methods'} public class procedure ExpandIncludeNodes(doc: XmlDocument; fileList: HashTable); static; {$ENDREGION} end; --- 53,75 ---- {$ENDREGION} ! {$REGION 'Utilities (include processing, translating, custom tag processing)'} XmlUtils = class {$REGION 'Private static methods'} strict private class function GetIncludedNodes(filename, xpath: string; fileList: HashTable): XmlNodeList; static; + class procedure ProcessIncludeTranslations(importedNode, includeNode: XmlNode); static; + {$ENDREGION} + {$REGION 'Custom tag processing methods'} + strict private + class procedure ProcessRef(doc: XmlDocument); static; + class procedure ProcessTrueIf(doc: XmlDocument); static; {$ENDREGION} {$REGION 'Static methods'} public + class procedure CustomTagProcessing(doc: XmlDocument); static; class procedure ExpandIncludeNodes(doc: XmlDocument; fileList: HashTable); static; + class procedure Translate(element: XmlElement); overload; static; + class procedure Translate(element: XmlElement; translationList: IDictionary); overload; static; + class procedure TranslateCommonMemberReferences(element: XmlElement); static; {$ENDREGION} end; *************** *** 160,163 **** --- 172,181 ---- {$REGION 'XmlUtils'} + class procedure XmlUtils.CustomTagProcessing(doc: XmlDocument); + begin + ProcessRef(doc); + ProcessTrueIf(doc); + end; + class procedure XmlUtils.ExpandIncludeNodes(doc: XmlDocument; fileList: HashTable); var *************** *** 187,190 **** --- 205,209 ---- importedNode := doc.ImportNode(includedNode, True); includeNode.ParentNode.InsertBefore(importedNode, includeNode); + ProcessIncludeTranslations(importedNode, includeNode); end; removeList.Add(includeNode); *************** *** 210,213 **** --- 229,368 ---- end; end; + + class procedure XmlUtils.ProcessIncludeTranslations(importedNode, includeNode: XmlNode); + var + customList: SortedList; + attr: XmlAttribute; + argNum: Integer; + translateNode: XmlNode; + begin + customList := SortedList.Create(CaseInsensitiveComparer.DefaultInvariant); + // retrieve {0} type argument translations. + for attr in includeNode.Attributes do + begin + if attr.Name.ToLower.StartsWith('arg') then + begin + argNum := Int32.Parse(attr.Name.Substring(3)); + customList.Add(System.String.Format('{{{0}}}', argNum), attr.Value); + end; + end; + // retrieve <translate> tags + for translateNode in XmlElement(includeNode).GetElementsByTagName('translate') do + begin + attr := translateNode.Attributes['source']; + if not Assigned(attr) then + raise Exception.Create('Missing ''source'' attribute in the ''translate'' tag'); + customList.Add(attr.Value, translateNode.InnerText); + end; + Translate(XmlElement(importedNode), customList); + end; + + class procedure XmlUtils.ProcessRef(doc: XmlDocument); + var + removeList: ArrayList; + refNode: XmlNode; + attr: XmlAttribute; + typeName: string; + memberName: string; + memberType: string; + frag: XmlDocumentFragment; + obj: &Object; + begin + removeList := ArrayList.Create; + for refNode in doc.GetElementsByTagName('ref') do + begin + attr := refNode.Attributes['type']; + if attr = nil then + raise Exception.Create('Missing ''type'' attribute in ''ref'' tag'); + typeName := attr.Value; + + attr := refNode.Attributes['member']; + if attr = nil then + raise Exception.Create('Missing ''member'' attribute in ''ref'' tag'); + memberName := attr.Value; + + attr := refNode.Attributes['memberType']; + if attr = nil then + memberType := 'M' + else + memberType := attr.Value.Chars[0]; + + frag := doc.CreateDocumentFragment; + frag.InnerXml := System.String.Format('<see cref="T:{0}" />.<see cref="{2}:{0}.{1}" />', + typeName, memberName, memberType.ToUpper); + refNode.ParentNode.InsertBefore(frag, refNode); + removeList.Add(refNode); + end; + for obj in removeList do + XmlNode(obj).ParentNode.RemoveChild(XmlNode(obj)); + end; + + class procedure XmlUtils.ProcessTrueIf(doc: XmlDocument); + var + removeList: ArrayList; + trueIfNode: XmlNode; + frag: XmlDocumentFragment; + obj: &Object; + begin + removeList := ArrayList.Create; + for trueIfNode in doc.GetElementsByTagName('true-if') do + begin + frag := doc.CreateDocumentFragment; + frag.InnerXml := System.String.Format('<see langword="true" /> if {0}; <see langword="false" /> otherwise.', + trueIfNode.InnerText); + trueIfNode.ParentNode.InsertBefore(frag, trueIfNode); + removeList.Add(trueIfNode); + end; + for obj in removeList do + XmlNode(obj).ParentNode.RemoveChild(XmlNode(obj)); + end; + + class procedure XmlUtils.Translate(element: XmlElement); + var + list: SortedList; + begin + list := SortedList.Create(CaseInsensitiveComparer.DefaultInvariant); + Translate(element, list); + end; + + class procedure XmlUtils.Translate(element: XmlElement; translationList: IDictionary); + var + nodeInner: string; + entry: DictionaryEntry; + begin + if element = nil then + raise ArgumentNullException.Create('element'); + if translationList = nil then + raise ArgumentNullException.Create('translationList'); + nodeInner := element.InnerXml; + for entry in translationList do + nodeInner := nodeInner.Replace(string(entry.Key), string(entry.Value)); + element.InnerXml := nodeInner; + end; + + class procedure XmlUtils.TranslateCommonMemberReferences(element: XmlElement); + var + memberElement: XmlElement; + translateList: SortedList; + id: string; + qualifiedName: string; + className: string; + memberName: string; + begin + memberElement := element; + while (memberElement <> nil) and (memberElement.Name <> 'member') do + memberElement := XmlElement(memberElement.ParentNode); + if memberElement <> nil then + begin + translateList := SortedList.Create(CaseInsensitiveComparer.DefaultInvariant); + id := memberElement.Attributes['name'].Value; + qualifiedName := StringUtils.After(StringUtils.BeforeLast(id, '('), ':'); + className := StringUtils.BeforeLast(qualifiedName, '.'); + memberName := StringUtils.AfterLast(qualifiedName, '.'); + translateList.Add('<see_self>', System.String.Format('<see cref="{0}" />', id)); + translateList.Add('<see_class>', System.String.Format('<see cref="T:{0}" />', className)); + Translate(element, translateList); + end; + end; {$ENDREGION} |