WLW是寫博客的利器,支持離線、格式排版等,並且擁有衆多的插件。博客園推薦了代碼插入插件,可是沒有提供WLW的公式編譯插件。目前個人通常作法是:先在Word下使用MathType編輯好公式,而後將公式複製到WLW的本文中,總感受有點麻煩。html
簡單學習了WLW插件的開發,決定本身開發一個WLW代碼插入插件。比較簡單,按照如下步驟,你們能夠開發屬於本身的公式插入插件。編程
首先,開發公式插入插件涉及兩方面內容。一方面是公式的編輯,通常採用Latex數學排版,爲了解析LaTex函數,咱們須要Latex解析連接庫,而Google Chart API提供了Latex的在線接口以下:http://chart.apis.google.com/chart?cht=tx&chl={latex},其中{latex}就是要生成的代碼,這裏使用Google API(這樣開發的插件使用中就須要聯網了)。另外一方面是WLW中插件的開發,介紹以下:api
目前爲止,Windows Live Writer的擴展功能還不是很強,它提供給咱們以下兩個方面對其擴展的可能:框架
a.應用程序級別的API:這部分API讓咱們可以在外部程序中啓動並調用到Windows Live Writer的功能,以COM組件的形式提供。若是你要編寫一個Firefox工具條上的小按鈕,例如 「Blog It!」 之類,那麼顯然應該使用這類API。
b.文章內容插件:這部分API容許開發者對正在書寫的文章內容進行修飾,實現與Windows Live Writer中自帶的「Insert Link...」、「Insert Picture...」等相似的功能。若要編寫文章內容插件,則須要從ContentSource或SmartContentSource兩個基類中選擇其一併繼承自它。這兩個基類提供了編寫文章內容插件所須要的基礎設施。ContentSource和SmartContentSource的區別以下:ide
ContentSource:若是你須要編寫的插件將要在內容中插入一段簡單的,插入以後再也不修改(所謂「單向插入」)的內容片段,例如一個超連接,或是自定義的一段版權信息等,那麼應該選擇該類型的基類。Windows Live Writer中自帶的「Insert Link...」就屬於這類插件。
SmartContentSource:若是你須要編寫的插件將在內容中插入一段較爲複雜的,插入以後還可能要修改(所謂「雙向交互」)的內容片杜阿,例如一張圖片、一幅地圖等,那麼則應該選擇這個類型的基類。Windows Live Writer中自帶的「Insert Picture...」就屬於這類插件。函數
可見,開發公式插件時選擇ContentSource就能夠了。工具
而後,編程實現插件的基本功能。學習
1.使用Visual Studio 2010新建C# Windows窗體應用程序。網站
2.設計插件的界面,界面以下:ui
3.實現各按鍵的功能,包括粘貼、預覽、插入、取消,以下:
public partial class MainForm : Form { private static readonly string PicUrlPattern = @"http://chart.apis.google.com/chart?cht=tx&chl={0}"; private static readonly string ImgTag = "<img src=\"{0}\" alt=\"{1}\" />"; public MainForm() { InitializeComponent(); } private void 粘貼_Click(object sender, EventArgs e) { string content = Clipboard.GetText(); textBox_tex.Text = content; } private void 預覽_Click(object sender, EventArgs e) { if (check()) { pictureBox_Preview.ImageLocation = ImgUrl; } } private void 插入_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } private void 取消_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } public string ImgUrl { get { return String.Format(PicUrlPattern, HttpUtility.UrlEncode(textBox_tex.Text)); } } public string ImgInTag { get { return String.Format(ImgTag, ImgUrl, textBox_tex.Text); } } private bool check() { if (textBox_tex.Text.Trim() == "") { MessageBox.Show(this, "請填寫latex"); return false; } return true; } }
注意:HttpUtility在System.Web庫中,須要添加引用System.Web.dll,並在文件頭部添加using System.Web。若是沒有找到System.Web.dll,把項目屬性中的目標框架修改成.NET Framework 2.0便可,推薦使用2.0,發現.net 4.0開發的插件和個人WLW版本不兼容。
調試程序,直至窗口能夠正常運行。
建立接口類,將上述窗口轉化爲WLW插件。
a.添加對WindowsLive.Writer.Api的引用(WLW的安裝目錄下WindowsLive.Writer.Api.dll),並添加using WindowsLive.Writer.Api;。
b.將項目屬性中輸出類型修改成類庫,刪除Program.cs文件。
c.新建一個類,繼承自ContentSource,並覆蓋相應方法。
[WriterPlugin("adf1e416-b2e9-44e1-8612-c405bbcf1359", "插入Latex", PublisherUrl = "http://www.cnblogs.com/houkai/", ImagePath = "tex.png", Description = "插入公式") ] [InsertableContentSource("插入公式")] public class LiveWriterLatexPlugin : ContentSource { public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content) { using (MainForm form = new MainForm()) { DialogResult result = form.ShowDialog(); content = form.ImgInTag; return result; } } }
注意咱們爲該類添加了WriterPlugin屬性:
第一個參數爲一個Guid,能夠經過Guid生成器獲得便可,如http://www.guidgenerator.com/online-guid-generator.aspx,起標識的做用。
第二個參數爲該插件的名稱,將在Windows Live Writer的插件管理器中看到。
第三個參數PublisherUrl爲發佈者的網站地址。
第四個參數ImagePath爲插件的圖標文件路徑,下載或本身製做一個好看的png圖片(png格式透明,比較好看),添加到項目中,修改圖片的」生成操做」爲「嵌入的資源」便可。
第五個參數Description爲插件的一小段描述介紹,表示插入選項中該插件的詳細信息。
該類還應用了InsertableContentSource屬性,此屬性本用於定義插件在WLW的「Insert」菜單和「Insert」快捷面板的名稱,但新版的WLW已經去除了插入菜單與側邊欄,所以應用此屬性只是爲了保持向前兼容。
注意CreateContent()方法的第二個參數爲ref string newContent,這個ref string就表示由該插件生成的HTML代碼。
最後編譯Release生成DLL文件,將DLL文件放到WLW安裝目錄的Plugins下,重啓WLW便可。
個人Latex公式插件可下載。有不少博客中介紹了WLW插件的開發,你們有興趣能夠學習插件開發的詳細內容。剩下的內容就是Latex下如何進行數學公式的編輯了,下節再介紹吧。
維護版本(因爲google chart api地址修改,原插件已失效)
最新的Latex插件能夠下載
實例: