对于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个方法,还是继续显示出来了。。。
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。修改如下:




































































































不知道,我插入的代码为什么不管用呢?!那7个方法,还是继续显示出来了。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?