From 12dfaf017c3aa5422400604f90bc5ab73b636bc3 Mon Sep 17 00:00:00 2001 From: asayre Date: Sun, 29 Oct 2006 20:06:25 +0000 Subject: [PATCH] Typo in Race Documentation Generic happiness, courtesy of Courageous --- Scripts/Commands/Docs.cs | 271 +++++++++++++++++++++++++++++---------- Server/Race.cs | 2 +- 2 files changed, 206 insertions(+), 67 deletions(-) diff --git a/Scripts/Commands/Docs.cs b/Scripts/Commands/Docs.cs index 9ae17caaa..ffa5da24a 100644 --- a/Scripts/Commands/Docs.cs +++ b/Scripts/Commands/Docs.cs @@ -23,19 +23,29 @@ namespace Server.Commands private static void DocGen_OnCommand( CommandEventArgs e ) { World.Broadcast( 0x35, true, "Documentation is being generated, please wait." ); + Console.WriteLine( "Documentation is being generated, please wait." ); Network.NetState.FlushAll(); Network.NetState.Pause(); DateTime startTime = DateTime.Now; - Document(); + bool generated = Document(); DateTime endTime = DateTime.Now; Network.NetState.Resume(); - World.Broadcast( 0x35, true, "Documentation has been completed. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds ); + if( generated ) + { + World.Broadcast( 0x35, true, "Documentation has been completed. The entire process took {0:F1} seconds.", (endTime - startTime).TotalSeconds ); + Console.WriteLine( "Documentation complete." ); + } + else + { + World.Broadcast( 0x35, true, "Docmentation failed: Documentation directories are locked and in use. Please close all open files and directories and try again." ); + Console.WriteLine( "Documentation failed." ); + } } private class MemberComparer : IComparer @@ -144,17 +154,16 @@ namespace Server.Commands else if( y == null ) return 1; - return x.m_TypeName.CompareTo( y.m_TypeName ); + return x.TypeName.CompareTo( y.TypeName ); } } private class TypeInfo { public Type m_Type, m_BaseType, m_Declaring; - public string m_FileName, m_TypeName; public List m_Derived, m_Nested; public Type[] m_Interfaces; - public StreamWriter m_Writer; + private string m_FileName, m_TypeName, m_LinkName; public TypeInfo( Type type ) { @@ -162,14 +171,22 @@ namespace Server.Commands m_BaseType = type.BaseType; m_Declaring = type.DeclaringType; - m_Interfaces = type.GetInterfaces(); - m_TypeName = GetGenericTypeName( m_Type ); + FormatGeneric( m_Type, ref m_TypeName, ref m_FileName, ref m_LinkName ); - m_FileName = Docs.GetFileName( "docs/types/", GetGenericTypeName( m_Type, "-", "-" ), ".html" ); + // Console.WriteLine( ">> inline typeinfo: "+m_TypeName ); + // m_TypeName = GetGenericTypeName( m_Type ); + // m_FileName = Docs.GetFileName( "docs/types/", GetGenericTypeName( m_Type, "-", "-" ), ".html" ); + // m_Writer = Docs.GetWriter( "docs/types/", m_FileName ); + } - m_Writer = Docs.GetWriter( "docs/types/", m_FileName ); + public string FileName { get { return m_FileName; } } + public string TypeName { get { return m_TypeName; } } + + public string LinkName( string dirRoot ) + { + return m_LinkName.Replace( "@directory@", dirRoot ); } } @@ -249,7 +266,22 @@ namespace Server.Commands { "System.Double", "double" }, { "System.Decimal", "decimal" }, { "System.Char", "char" }, - { "System.Void", "void" } + { "System.Void", "void" }, + }; + // For stuff we don't want to links to + private static string[] m_DontLink = new string[] + { + "List", + "Stack", + "Queue", + "Dictionary", + "LinkedList", + "SortedList", + "SortedDictionary", + "IComparable", + "IComparer", + "ICloneable", + "Type" }; private static int m_AliasLength = m_Aliases.GetLength( 0 ); @@ -324,38 +356,21 @@ namespace Server.Commands if( info != null ) { - aliased = String.Format( "{1}", info.m_FileName, info.m_TypeName ); + aliased = ""+info.LinkName( null ); + //aliased = String.Format( "{1}", info.m_FileName, info.m_TypeName ); } else { + //FormatGeneric( ); if( realType.IsGenericType ) { - StringBuilder sb = new StringBuilder( "" ); + string typeName = ""; + string fileName = ""; + string linkName = ""; - bool firstpass = true; - - foreach( Type paramType in realType.GetGenericArguments() ) - { - if( !firstpass ) sb.Append( ',' ); else firstpass=false; - - bool aliasFound = false; - - for( int i = 0; i < m_AliasLength; ++i ) - { - if( m_Aliases[i, 0] == fullName ) - { - sb.Append( m_Aliases[i, 1] ); - aliasFound = true; - break; - } - } - - if( !aliasFound ) sb.Append( paramType.Name ); - } - - aliased = sb.ToString(); - - aliased = realType.Name.Substring( 0, realType.Name.IndexOf( '`' ) ) + "<" + aliased + ">"; + FormatGeneric( realType, ref typeName, ref fileName, ref linkName ); + linkName = linkName.Replace( "@directory@", null ); + aliased = linkName; } else { @@ -373,7 +388,9 @@ namespace Server.Commands aliased = realType.Name; } - return String.Concat( prepend, aliased, append, name ); + string retval = String.Concat( prepend, aliased, append, name ); + //Console.WriteLine(">> getpair: "+retval); + return retval; } #endregion @@ -383,9 +400,11 @@ namespace Server.Commands #region Root documentation - private static void Document() + private static bool Document() { - DeleteDirectory( "docs/" ); + try { DeleteDirectory( "docs/" ); } + catch( System.IO.IOException e ) { return false; } + EnsureDirectory( "docs/" ); EnsureDirectory( "docs/namespaces/" ); EnsureDirectory( "docs/types/" ); @@ -417,6 +436,8 @@ namespace Server.Commands DocumentLoadedTypes(); DocumentConstructableObjects(); + + return true; } private static void AddIndexLink( StreamWriter html, string filePath, string label, string desc ) @@ -1946,7 +1967,7 @@ namespace Server.Commands m_Types.TryGetValue( parms[j].ParameterType, out typeInfo ); if( typeInfo != null ) - html.Write( "href=\"types/{0}\" ", typeInfo.m_FileName ); + html.Write( "href=\"types/{0}\" ", typeInfo.FileName ); html.Write( "title=\"{0}\">{1}", GetTooltipFor( parms[j] ), parms[j].Name ); } @@ -2112,13 +2133,13 @@ namespace Server.Commands private static void SaveType( TypeInfo info, StreamWriter nsHtml, string nsFileName, string nsName ) { if( info.m_Declaring == null ) - nsHtml.WriteLine( " {1}
", info.m_FileName, info.m_TypeName ); + nsHtml.WriteLine( " "+info.LinkName( "../types/" ) + "
" ); - using( StreamWriter typeHtml = info.m_Writer ) + using( StreamWriter typeHtml = Docs.GetWriter( info.FileName ) ) { typeHtml.WriteLine( "" ); typeHtml.WriteLine( " " ); - typeHtml.WriteLine( " RunUO Documentation - Class Overview - {0}", info.m_TypeName ); + typeHtml.WriteLine( " RunUO Documentation - Class Overview - {0}", info.TypeName ); typeHtml.WriteLine( " " ); typeHtml.WriteLine( " " ); typeHtml.WriteLine( "

Back to {1}

", nsFileName, nsName ); @@ -2137,7 +2158,7 @@ namespace Server.Commands { Type type = info.m_Type; - typeHtml.WriteLine( "

{0} (Enum)

", info.m_TypeName ); + typeHtml.WriteLine( "

{0} (Enum)

", info.TypeName ); string[] names = Enum.GetNames( type ); @@ -2177,12 +2198,13 @@ namespace Server.Commands if( decInfo == null ) typeHtml.Write( decType.Name ); else - typeHtml.Write( "{1}", decInfo.m_FileName, decInfo.m_TypeName ); + //typeHtml.Write( "{1}", decInfo.m_FileName, decInfo.m_TypeName ); + typeHtml.Write( decInfo.LinkName( null ) ); typeHtml.Write( ") - " ); } - typeHtml.Write( info.m_TypeName ); + typeHtml.Write( info.TypeName ); Type[] ifaces = info.m_Interfaces; Type baseType = info.m_BaseType; @@ -2199,7 +2221,9 @@ namespace Server.Commands if( baseInfo == null ) typeHtml.Write( baseType.Name ); else - typeHtml.Write( "{1}", baseInfo.m_FileName, baseInfo.m_TypeName ); + { + typeHtml.Write( ""+baseInfo.LinkName( null ) ); + } ++extendCount; } @@ -2221,9 +2245,18 @@ namespace Server.Commands ++extendCount; if( ifaceInfo == null ) - typeHtml.Write( GetGenericTypeName( iface ) ); + { + string typeName = ""; + string fileName = ""; + string linkName = ""; + FormatGeneric( iface, ref typeName, ref fileName, ref linkName ); + linkName = linkName.Replace( "@directory@", null ); + typeHtml.Write( ""+linkName ); + } else - typeHtml.Write( "{1}", ifaceInfo.m_FileName, ifaceInfo.m_TypeName ); + { + typeHtml.Write( ""+ifaceInfo.LinkName( null ) ); + } } } @@ -2244,7 +2277,8 @@ namespace Server.Commands if( i != 0 ) typeHtml.Write( ", " ); - typeHtml.Write( "{1}", derivedInfo.m_FileName, derivedInfo.m_TypeName ); + //typeHtml.Write( "{1}", derivedInfo.m_FileName, derivedInfo.m_TypeName ); + typeHtml.Write( ""+derivedInfo.LinkName( null ) ); } typeHtml.WriteLine( "" ); @@ -2265,7 +2299,8 @@ namespace Server.Commands if( i != 0 ) typeHtml.Write( ", " ); - typeHtml.Write( "{1}", nestedInfo.m_FileName, nestedInfo.m_TypeName ); + //typeHtml.Write( "{1}", nestedInfo.m_FileName, nestedInfo.m_TypeName ); + typeHtml.Write( ""+nestedInfo.LinkName( null ) ); } typeHtml.WriteLine( "" ); @@ -2282,7 +2317,7 @@ namespace Server.Commands if( mi is PropertyInfo ) WriteProperty( (PropertyInfo)mi, typeHtml ); else if( mi is ConstructorInfo ) - WriteCtor( info.m_TypeName, (ConstructorInfo)mi, typeHtml ); + WriteCtor( info.TypeName, (ConstructorInfo)mi, typeHtml ); else if( mi is MethodInfo ) WriteMethod( (MethodInfo)mi, typeHtml ); } @@ -2390,45 +2425,149 @@ namespace Server.Commands html.WriteLine( ")
" ); } - public static string GetGenericTypeName( Type type ) - { - return GetGenericTypeName( type, "<", ">" ); - } + /* + public static string GetGenericTypeName( Type type ) + { + return GetGenericTypeName( type, "<", ">" ); + } - public static string GetGenericTypeName( Type type, string leftGenericBracket, string rightGenericBracket ) + public static string GetGenericTypeName( Type type, string leftGenericBracket, string rightGenericBracket ) + { + string name = type.Name; + + if( type.IsGenericType ) + { + int index = name.IndexOf( '`' ); + + if( index > 0 ) + { + StringBuilder sb = new StringBuilder( name.Substring( 0, index ) ); + + sb.Append( leftGenericBracket ); + + Type[] typeArguments = type.GetGenericArguments(); + + for( int i = 0; i < typeArguments.Length; i++ ) + { + if( i != 0 ) + sb.Append( ',' ); + + sb.Append( typeArguments[i].Name ); + } + + sb.Append( rightGenericBracket ); + + name = sb.ToString(); + + } + } + return name; + } + */ + + public static void FormatGeneric( Type type, ref string typeName, ref string fileName, ref string linkName ) { - string name = type.Name; + string name = null; + string fnam = null; + string link = null; if( type.IsGenericType ) { - int index = name.IndexOf( '`' ); + int index = type.Name.IndexOf( '`' ); + string rootType = type.Name.Substring( 0, index ); if( index > 0 ) { - StringBuilder sb = new StringBuilder( name.Substring( 0, index ) ); + StringBuilder nameBuilder = new StringBuilder( rootType ); + StringBuilder fnamBuilder = new StringBuilder( "docs/types/" + Docs.SanitizeType( rootType ) ); + StringBuilder linkBuilder; + if( DontLink( rootType ) ) + linkBuilder = new StringBuilder( "" + rootType + "" ); + else + linkBuilder = new StringBuilder( "" + rootType + "" ); - sb.Append( leftGenericBracket ); + nameBuilder.Append( "<" ); + fnamBuilder.Append( "-" ); + linkBuilder.Append( "<" ); Type[] typeArguments = type.GetGenericArguments(); for( int i = 0; i < typeArguments.Length; i++ ) { if( i != 0 ) - sb.Append( ',' ); + { + nameBuilder.Append( ',' ); + fnamBuilder.Append( ',' ); + linkBuilder.Append( ',' ); + } - sb.Append( typeArguments[i].Name ); + string sanitizedName = Docs.SanitizeType( typeArguments[i].Name ); + string aliasedName = Docs.AliasForName( sanitizedName ); + + nameBuilder.Append( sanitizedName ); + fnamBuilder.Append( "T" ); + if( DontLink( typeArguments[i].Name ) ) + linkBuilder.Append( "" + aliasedName + "" ); + else + linkBuilder.Append( "" + aliasedName + "" ); } - sb.Append( rightGenericBracket ); - - name = sb.ToString(); + nameBuilder.Append( ">" ); + fnamBuilder.Append( "-" ); + linkBuilder.Append( ">" ); + name = nameBuilder.ToString(); + fnam = fnamBuilder.ToString(); + link = linkBuilder.ToString(); } } + if( name == null ) typeName = type.Name; + else typeName = name; + if( fnam == null ) fileName = "docs/types/" + Docs.SanitizeType( type.Name ) + ".html"; + else fileName = fnam + ".html"; + + if( link == null ) + { + if( DontLink( type.Name ) ) + linkName = "" + Docs.SanitizeType( type.Name ) + ""; + else + linkName = "" + Docs.SanitizeType( type.Name ) + ""; + } + else linkName = link; + + //Console.WriteLine( typeName+":"+fileName+":"+linkName ); + } + + public static string SanitizeType( string name ) + { + bool anonymousType = false; + if( name.Contains( "<" ) ) anonymousType = true; + StringBuilder sb = new StringBuilder( name ); + for( int i = 0; i < ReplaceChars.Length; ++i ) { sb.Replace( ReplaceChars[i], '-' ); } + + if( anonymousType ) return "(Anonymous-Type)"+sb.ToString(); + else return sb.ToString(); + } + + public static string AliasForName( string name ) + { + for( int i = 0; i < m_AliasLength; ++i ) + { + if( m_Aliases[i, 0] == name ) + { + return m_Aliases[i, 1]; + } + } return name; } + public static bool DontLink( string name ) + { + foreach( string dontLink in m_DontLink ) + if( dontLink == name ) return true; + return false; + } } #region BodyEntry & BodyType diff --git a/Server/Race.cs b/Server/Race.cs index 0a52ce6a0..84599e1c6 100644 --- a/Server/Race.cs +++ b/Server/Race.cs @@ -106,7 +106,7 @@ namespace Server private Expansion m_RequiredExpansion; - public Expansion RequiredExpasnion { get { return m_RequiredExpansion; } } + public Expansion RequiredExpansion { get { return m_RequiredExpansion; } } public int MaleBody { get { return m_MaleBody; } } public int MaleGhostBody { get { return m_MaleGhostBody; } }