部落格園寫作利器MarkWord

波多爾斯基發表於2021-01-12

很多年以前開始使用markdown寫部落格的時候,當時部落格園的web編輯器還不是那麼好用,就特別想有一個優秀的編輯器可以直接釋出到部落格園的。偶然間發現一個非常好用的MarkWord,可以實現markdown本地編輯後釋出到遠端的功能,重點是實時預覽、圖片可以直接Ctrl+C Ctrl+V,寫作的過程簡直縱享絲滑,不可謂不優秀!

主要特性:

  • 支援Markdown編寫實時預覽
  • 支援樣式自定義與切換
  • 支援圖片直接複製與貼上
  • 支援一鍵釋出到部落格園等支援metablog協議的網站
  • 支援自定義類別
  • 支援釋出到草稿

軟體的原理就不多說了,可以理解為通過編譯Markdownhtml,然後釋出;然後圖片複製和貼上的原理就是儲存到本地的一個臨時資料夾中,釋出的時候通過上傳API釋出上去。軟體的體驗非常好,我用了很長的一段時間。後來部落格園官方對Markdown有了支援,這種編譯方式,會將style等內容一併嵌入,如果自己部落格的style經常更換的,很容易造成樣式錯亂。我就一直琢磨,能不能不釋出Html內容,而轉為直接釋出Markdown原始碼呢?

改造

翻看部落格園官方的說明,通過meta釋出的時候,只要將分類設定為[Markdown]就可以支援直接釋出Markdown源。於是我簡單改造了一下,禁用了軟體各種style功能,純粹只發布Markdown,依然保留直接Ctrl+C Ctrl+V的功能。

圖片上傳

if (img != null)
{
    string filePath = Config.imgcacheDir + "\\" + System.IO.Path.GetRandomFileName() + ".png";
    img.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
    //原來的
    //markEdit.textEditor.SelectedText = string.Format("![img](file:///{0})", System.Web.HttpUtility.UrlEncode(filePath).Replace("+", "%20"));
    //改造
    markEdit.textEditor.SelectedText = $"![img]({new Uri(filePath).AbsoluteUri})";
}

新增[Markdown]分類

//直接使用markdown釋出 see BLL/BlogsHelper.cs
blogsPost.description = Blogs;

//開始查詢圖片並更新到伺服器
//HtmlDocument htmlDoc = new HtmlDocument();
WebClient webClient = new WebClient();
//htmlDoc.LoadHtml(blogsPost.description);
//var ImgList = htmlDoc.DocumentNode.Descendants("img");
//使用了正則來尋找圖片。
var rex = "!\\[[^\\]]+\\]\\([^\\)]+\\)";
var ImgList = Regex.Matches(Blogs,rex);

int procCount = 3 + ImgList.Count;

最終效果如下:

當時也順便遷移了一下到.NET CORE,詳細內容請移步遷移WPF專案到.NET Core

最終的程式程式碼釋出到netcore分支,不過我只做了關鍵程式碼的修改,我也用了很久了,編寫和釋出Markdown是沒有問題了,但其他功能我也沒有試驗過,建議大家編寫博文的時候經常儲存。

使用說明

使用netcore分支,在release下直接編譯即可,需要.NET CORE 3.1 Desktop SDK,因此需要VS2019。詳細使用方法請閱讀原作者的部落格

補充:現在部落格園的Web Markdown編輯器已經可以支援直接Ctrl+C Ctrl+V上傳了,還能自動儲存,體驗已經很不錯了(就差一個實時預覽了),本文就是使用Web編輯器編寫而成。

資源

再次感謝原作者的優秀軟體!

相關文章