KB-將C#程式碼轉成HTML格式
3 |
常常在寫KB、MEMO之類的文件,少不了要附上程式碼讓人參考。在VS.NET/VS 2005的IDE中,關鍵字、註解等等都有特殊的色彩顯示,方便閱讀;而Copy到Word等微軟自家的RichText環境時,它會很貼心地保留顏色及格式設定。但再由Word再轉成HTML就有點小麻煩,一方面HTML Tag又臭又長(我曾寫了個小工具淨化Word轉出來的HTML原始碼),有時則會Layout大亂,還要不少手工調整。有沒有將Source Code直接轉成HTML的方便工具呢?
有的,同事小熊子介紹過一個CSharpFormat,只要提供純文字的Source Code,可以線上將C#、VB.NET、HTML、T-SQL等原始碼轉成HTML格式。前些日子,在TechEd上認識了小熊子的朋友--"雞"房老板,他的Blog上有篇文章介紹了VS 2005上必備的Add-In,爬了一下文,發現一個好東西,CopySourceAsHTML,可以直接在VS 2005中Copy As HTML,Paste時貼上的就是跟IDE中色彩一致的HTML了,更加方便!! 美中不足之處是它的中文處理有點瑕疵---每個中文字後方都多了一個Big5的十六進位數字(例如: 下圖的'be?),例如:
//以'a5HJS操'be?作'a7@DOM將'b1N結'b5?果'aaG傳'b6?回'a6^
追了一下Source Code,原來VS 2005在Copy時,有存入一份RTF格式,而它是透過解析RTF格式來保留文字的格式設定(聰明! 這樣只要VS 2005能開出來編輯的檔案格式,它都能原味重現)。只是中文的RTF表示法有點機車,會先用中的Unicode表示,後方再接上'a4?'a4?的Big5原碼,這點大概是作者沒想到的。找到原因,我鋸箭解了一下問題,修改了HtmlBlock.cs,將多餘的文字排掉:
65 //2006-10-19 by Jeffrey 66 //用來跳過中文中後方多餘的字元 67 int skipCounter=0; 68 69 public void AppendEncoded(char value) 70 { 71 //對於外國文字,&#nnnnn;後方不一定會接 72 if (skipCounter == 4 && value != '\'') 73 skipCounter = 0; 74 75 if (skipCounter > 0) //&#nnnnn;後方後方的多餘字元,略過 76 { 77 skipCounter--; 78 return; 79 } 80 81 if (value == ' ') 82 { 83 AppendUnencoded(value); 84 } 85 else 86 { 87 //2006-10-19 by Jeffrey 88 //中文會變成中的格式,後方則會因RTF Parsing問題出現 89 //在此用鋸箭法避開 90 string enc = Tools.HtmlEncode(value); 91 if (enc.StartsWith("&#")) skipCounter = 4; 92 AppendUnencoded(enc); 93 } 94 } |
有需要修改版DLL的人可以到這裡下載。使用時請先用CopySourceAsHTML Installer安裝原來的Add-In,關閉VS 2005後,再將My Documents\Visual Studio 2005\Addins\下的CopySourceAsHtml.dll換成修改版就可以了!
Comments
# by kennyshu
檔案連結有問題… http://localhost.... 應該是 http://blog.darkthread.net/files/folders/darkthread/entry519.aspx 吧?
# by Jeffrey
To kennyhsu, 校正好了,謝謝指正!
# by Slime Meteor
請問這東西也適用於 VS2008 嗎? 最近剛好想要學習黑暗大,分享一些東西 正苦於貼上的程式碼都沒辦法排版