KB-將C#程式碼轉成HTML格式

常常在寫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換成修改版就可以了!

歡迎推文分享:
Published 25 October 2006 10:07 PM 由 Jeffrey
Filed under: , ,
Views: 14,802



意見

# kennyshu said on 19 November, 2007 09:28 PM

檔案連結有問題… http://localhost....

應該是 blog2.darkthread.net/.../entry519.aspx 吧?

# Jeffrey said on 19 November, 2007 11:02 PM

To kennyhsu, 校正好了,謝謝指正!

# Slime Meteor said on 22 October, 2009 08:23 PM

請問這東西也適用於 VS2008 嗎?

最近剛好想要學習黑暗大,分享一些東西

正苦於貼上的程式碼都沒辦法排版

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2006>
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication