对于NDOC支持中文msdn风格的修改

公司的一个任务,要整理一些文档。因为以前用过ndoc,所以这次继续用这个。
compile完了之后,发现了几个问题。
1、每个type的html中,诸如:class/namespace等,都是E文的,而不是中文的。看起来不爽。
2、对于任何一个class,都会有object类的一些方法,如:"Equals","Finalize","GetHashCode","GetType","MemberwiseClone","ToString","GetObject"这些方法。我不想让它显示出来。

然后开始看ndoc的source,跟踪了一会,发现问题1中,在Documenter下面的每个adapter下面的xslt目录下,那些xslt文件包含了这些内容。修改之,重新编译,搞定。
对于问题2,找到了代码,在MsdnDocumenter.cs中的方法:MakeHtmlForMethods。修改如下:
        private void MakeHtmlForMethods(WhichType whichType, XmlNode typeNode)
        
{
            XmlNodeList declaredMethodNodes 
= typeNode.SelectNodes("method[not(@declaringType)]");

            
if (declaredMethodNodes.Count > 0)
            
{
                
bool bOverloaded = false;
                
string fileName;

                
string typeName = typeNode.Attributes["name"].Value;
                
string typeID = typeNode.Attributes["id"].Value;
                XmlNodeList methodNodes 
= typeNode.SelectNodes("method");
                
int nNodes = methodNodes.Count;

                
int[] indexes = SortNodesByAttribute(methodNodes, "id");

                fileName 
= GetFilenameForMethods(whichType, typeNode);
                htmlHelp.AddFileToContents(
"Methods", fileName);

                XsltArgumentList arguments 
= new XsltArgumentList();
                arguments.AddParam(
"id", String.Empty, typeID);
                arguments.AddParam(
"member-type", String.Empty, "method");
                TransformAndWriteResult(xsltIndividualMembers, arguments, fileName);

                htmlHelp.OpenBookInContents();

                
// 鞠强添加的部分
                string[] skipped = new string[]{"Equals","Finalize","GetHashCode","GetType","MemberwiseClone","ToString","GetObject"};
                
// 添加完成

                
for (int i = 0; i < nNodes; i++)
                
{
                    XmlNode methodNode 
= methodNodes[indexes[i]];
                    
string methodName = (string)methodNode.Attributes["name"].Value;
                    
string methodID = (string)methodNode.Attributes["id"].Value;

                    
// 鞠强修改:
                    
// 目的是不显示如下7个Object的方法:
                    
// Equals
                    
// Finalize
                    
// GetHashCode
                    
// GetType
                    
// MemberwiseClone
                    
// ToString
                    
// GetObject
                    int qq = 0;
                    
for(qq=0;qq<skipped.Length;qq++)
                    
{
                        
// 如果在上述范围之内,就不处理
                        if(methodName == skipped[qq])break;
                    }

                    
if(qq<skipped.Length)continue;
                    
// 修改完毕

                    
if (IsMethodFirstOverload(methodNodes, indexes, i))
                    
{
                        bOverloaded 
= true;

                        fileName 
= GetFilenameForMethodOverloads(typeNode, methodNode);
                        htmlHelp.AddFileToContents(methodName 
+ " Method", fileName);

                        arguments 
= new XsltArgumentList();
                        arguments.AddParam(
"member-id", String.Empty, methodID);
                        TransformAndWriteResult(xsltMemberOverload, arguments, fileName);

                        htmlHelp.OpenBookInContents();
                    }


                    
if (methodNode.Attributes["declaringType"== null)
                    
{
                        fileName 
= GetFilenameForMethod(methodNode);

                        
if (bOverloaded)
                        
{
                            XmlNodeList parameterNodes 
= xmlDocumentation.SelectNodes("/ndoc/assembly/module/namespace/" + lowerCaseTypeNames[whichType] + "[@name="" + typeName + ""]/method[@id="" + methodID + ""]/parameter");
                            htmlHelp.AddFileToContents(methodName 
+ " Method " + GetParamList(parameterNodes), fileName,
                                HtmlHelpIcon.Page );
                        }

                        
else
                        
{
                            htmlHelp.AddFileToContents(methodName 
+ " Method", fileName,
                                HtmlHelpIcon.Page );
                        }


                        XsltArgumentList arguments2 
= new XsltArgumentList();
                        arguments2.AddParam(
"member-id", String.Empty, methodID);
                        TransformAndWriteResult(xsltMember, arguments2, fileName);
                    }


                    
if (bOverloaded && IsMethodLastOverload(methodNodes, indexes, i))
                    
{
                        bOverloaded 
= false;
                        htmlHelp.CloseBookInContents();
                    }

                }


                htmlHelp.CloseBookInContents();
            }

        }



不知道,我插入的代码为什么不管用呢?!那7个方法,还是继续显示出来了。。。
posted @   鞠强  阅读(1509)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

hello

world

点击右上角即可分享
微信分享提示