日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自己改造 VSPaste 插件

發布時間:2023/11/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己改造 VSPaste 插件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前看了李永京老師講解的排版技巧,覺得受益匪淺,于是我也決定用 Live Writer 來發表 blog,并且看了里面提到的 VSPaste 插件,瀏覽一下,發現使用起來有兩處不怎么如意的地方:

  • 我的 VS 編輯器設置了背景顏色,而插件作者在后來的版本中加入了背景顏色的支持,但是輸出效果很不好看,而且輸出的 HTML 有一大堆 background:#.... ,我覺得我不需要不同背景顏色的代碼塊,在 .code{ } 里面定義更好……
  • Undent 問題,多數時候我并不想將全部代碼貼出來,但是選擇中間一部分代碼復制進文章編輯區以后縮進問題就難搞了,可能是 <pre> 標記的問題吧,Shift+Tab 不能用……
  • 最后的那一個空鏈接,這個影響不大,不過既然決定要改,順便去掉也未嘗不可……
  • 不怎么如意的地方:

    我是首先從研究 Live Writer 的插件怎么寫開始。查看安裝目錄,發現了一大堆形如 WindowsLive.Client.dll、WindowsLive.Writer.Controls.dll 的 dll 文件,暗喜,會不會是用 .Net 寫的呢?趕快 Reflector 一下,Cool! 是 .Net 寫的,有希望了!

    然而看了一大堆反編譯的代碼也看不出什么東西來,記得下載 Live Writer 的時候網站上好像有 SDK,于是又打開那個網頁找,只有CTP的,于是就看他們的 Team Blog,哈哈,給我找到了一段視頻,介紹怎么做一個 Hello World 插件,根本不用什么 SDK,開個VS library project,引用安裝目錄的 WindowsLive.Writer.Api.dll 就可以開始了!

    弄明白原理,也知道自己可以修改那個下載回來的插件(反編譯->修改->重新編譯),那就動手!

    第一個想到的反編譯工具是當然是 Reflector:

    導出后沒有修改過,直接編譯通過,我以為勝利了,誰知這插件不運行還好,一運行 Live Writer 就死掉了……我很奇怪,但是沒找到原因~~

    ?

    這個不行,ildasm 呢?啟動 VS2008 Command Prompt,選個好目錄,

    > ildasm vspaste.dll /out=vspaste.il

    cool,成功了

    > ilasm vspaste.il /dll

    cool,也成功了

    復制進安裝目錄,運行,COOL!這種做法沒問題!

    ?

    但問題隨之而來,我不懂 IL 啊…… 不過我能做的第一步就是將最后的空鏈接去掉,嘿嘿!

    ?

    還是需要 Reflector(當時我頭腦還沒有反應過來,思想還在手動改IL中,由于憑空寫我當時該怎么做可能有錯,就如實將我的笨方法拿出來了:))

    在反編譯的工程里查找 "background:",發現 HTMLRootProcessor 里面有個 SyncColors 方法,其中一段代碼如下:

    if (this.background.HasValue) {if (this.color.HasValue){this.writer.Write(';');}this.writer.Write("background:");this.writer.Write(this.colors.CssColor(this.background.Value)); }

    正是這段代碼實現了背景色的加入,我就在這里頭腦發昏了,想將這段 IL 去掉或者改成 if(false) 或者 if(1>2)……

    去掉是最好的了,但是居然報錯了,仔細看IL代碼,發現在 System.IO.TextWriter::Write(char) 上面有兩句是 brtrue.s? label,估計是 if 轉跳了,查了一下,還真沒猜錯,嘿嘿,在前面的 brtrue.s 加上一句 ldc.i4.1,if(true) goto ... 哈哈,編譯。Yeah!! 復制進去的代碼沒有背景顏色啦!

    ?

    長時間泡在IL里很頭痛,而且還有一個縮進功能還沒有實現!總不能自己寫IL啊~~該想想辦法了!

    猛然醒起 Reflector 還可以看IL的!

    辦法馬上就出來了!先在 Visual Studio 中改寫原來殘缺的 Undent 方法:

    public static string Undent( string s ) {var beginSpaces = new System.Text.RegularExpressions.Regex("^(?:<span[^>]*>|)( +)");var depth = beginSpaces.Match(s).Groups[1].Value.Length;if ( depth == 0 ) return s;var space2trim = new System.Text.RegularExpressions.Regex("^(<span[^>]*>|) {" + depth + "}", System.Text.RegularExpressions.RegexOptions.Multiline);var tmp = space2trim.Replace(s, "$1");var garbageSpan = new System.Text.RegularExpressions.Regex("^<span[^>]*></span>", System.Text.RegularExpressions.RegexOptions.Multiline);return garbageSpan.Replace(tmp, String.Empty); }

    編譯,將 dll 放到 Reflector,復制該方法的 IL 代碼:

    那么長……暈死我了……

    合并進 VsPaste.il 編譯后,我們的改造工程就完成了!改好的 dll 文件等一下發上來,需要的朋友可以直接下載,這個 dll 文件放到 Live Writer 安裝目錄的 Plugins 文件夾里面即可。

    最后,本人第一次在首頁發表隨筆,雖然很菜,但是覺得我做的這個修改對大家都有好處,也是原創內容,望各位管理員手下留情,如果還有其他我應該改進的地方,請各位多多指教!

    ========修改過的插件的下載地址: http://files.cnblogs.com/Diryboy/vspaste.rar

    轉載于:https://www.cnblogs.com/Diryboy/archive/2008/12/02/1345407.html

    總結

    以上是生活随笔為你收集整理的自己改造 VSPaste 插件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。