让Paste as Visual Studio Code支持Visual Studio 2010粘贴的中文--自己动手丰衣足食

Paste as Visual Studio Code 是Windows Live writer上很好的插件,我们许多人都用它写blog。代码就可以从Visual Studio直接粘贴到博文中,并以彩色显示。我们很需要它。可是官方的版本不支持中文。如果代码里有中文字符,从Visual Studio2010粘贴中文到Live writer,发现代码的中文都变成了乱码,或者有些字丢失了。开始不明白是什么原因,就琢磨了一下。下面把步骤写一下,供需要的同仁参考。

1. 解出其源代码

  找到该插件的DLL, C:\Program Files (x86)\Windows Live\Writer\Plugins\LavernockEnterprises.PasteAsVSCode.dll,用Reflector打开。右键点最上面一层的“LavernockEnterprises.PasteAsVSCode”节点,选“Export”,然后再选定一个路径,就可以将其所有类都找出其源代码。其间会要求定位“WindowsLive.Writer.Api.dll”,找到就是了,在C:\Program Files (x86)\Windows Live\Writer。即Live writer安装的目录。WindowsLive.Writer.Api.dll也会被Reflector打开。不需要解出WindowsLive.Writer.Api.dll的源码。如此这样就可以将其全部源码都解出。

2. 整理其代码

  找到源代码输出的目录,发现有一个LavernockEnterprises.PasteAsVSCode.csproj,还有一个LavernockEnterprises目录。双击LavernockEnterprises.PasteAsVSCode.csproj,打开了Visual Studio 2010. 因为目前Reflector输出的csproj文件的版本是Visual Studio 2008支持的,需要转换成Visual Studio 2010支持的格式。Visual Studio 2010会先转换它。一路点Next(呵呵,机械性的),最后转换结束。先保存,.sln文件就保存了。点一下Build->Rebuild solution。发现不能编译。后来发现是对WindowsLive.Writer.Api.dll的引用损坏。就将该引用删除,然后重新从C:\Program Files (x86)\Windows Live\Writer下加了一下对WindowsLive.Writer.Api.dll的引用。再编译,就可以通过了。

3. 分析其代码

  看了一下该工程,里面就四个cs文件是主要的:PasteAsVSCodeProperties.cs,PasteAsVSCodeGenerator.cs,PasteAsVSCodeEditor.cs,PasteAsVSCode.cs。大概浏览了一下,

发现其内的一个叫”PasteAsVSCodeGenerator“的类中有一个方法是叫这样的名字:

private string GenerateHtmlFromRtf(string rtf)

就是用于产生HTML的核心代码。该方法很长,也挺复杂,一时间不容易懂。于是就调试该方法。该工程是一个Class library类型的工程,不可能作为主程序启动。那么就打开工程“LavernockEnterprises.PasteAsVSCode”的Properties窗口。

走到Debug页,在Start Action节选定”Start external program, 然后再点击右边的查找文件按钮(三个点的按钮)。找到WindowsLiveWriter.exe并选定它。如图。另外,到LiveWriter插件的目录,即此处C:\Program Files (x86)\Windows Live\Writer\Plugins,将官方版本的DLL改名成LavernockEnterprises.PasteAsVSCode.dll1,然后再到Properties窗口的Build页,将Output path设定成C:\Program Files (x86)\Windows Live\Writer\Plugins。这是要做什么?其实就是将你编译的DLL替换官方的DLL。一切准备停当,可以开始调试了。

4.   调试其代码

   在GenerateHtmlFromRtf方法内部设断点,按F5键运行程序,只见Windows Live Writer在启动。等启动完成了。在Visual Studio 2010里面打开一个有中文字的cs文件。选取一段有中文字的代码,Ctrl + C复制,再切换到Live Writer,点插件里面的“Paste As Visual Studio Code“,很快就会在断点处断下来。然后一步步跟着走程序。这个Visual Studio贴出来的内容是Rtf格式的。GenerateHtmlFromRtf方法负责将Rtf格式全部转化成HTML代码。现在就是对中文支持不好。就是要找到其根源。这么一行代码复制到剪贴板上之后,

  1. this.Text = "VS2010复制内容乱码修正";

其Rtf是:

{\rtf\ansi{\fonttbl{\f0 NSimSun;}}{\colortbl;\red0\green0\blue255;\red163\green21\blue21;}\f0 \fs19             \cf1 this\cf0 .Text = \cf2 "VS2010\uinput2\u22797 ?′\uinput2\u21046 ??\uinput2\u20869 ?ú\uinput2\u23481 èY\uinput2\u20081 ?ò\uinput2\u30721 ??\uinput2\u20462 DT\uinput2\u27491 ?y"\cf0 ;\par }

经过多轮的调试发现,其如下一行代码有问题:

Regex regex = new Regex(@"(?<![\\])((\\u(?<dec>-?\d+) \?)|(\\'(?<hex>[0-9a-f]{2}))|(\\[a-z*]+-?(?<dec>\d*) )|(\\[a-z*]+-?(?<dec>\d*))(?=[\W])|\{|\})|\t|\\\\|\\{|\\}|\\~");

准确地说是这段正则有问题(\\u(?<dec>-?\d+) \?)。Rtf里面有诸如\u20081 ?ò这样的字符。\u20081是中文的Unicode. ?ò可能是乱码。正是造成前述的正则不工作的原因。
于是将(\\u(?<dec>-?\d+) \?)改成(\\u(?-?\d+)\s..),这样可以处理每一个汉字的Unicode了,但是中文字还是没有出来,原来在另外一处也有类似的正则,也改成:

if (Regex.IsMatch(str5, @"\\u-?\d+\s.."))

于是,中文字就可以顺利地贴到Live Writer里面了。

下面只是一个展示,表示已经可以贴中文字。

有中文字的示例代码

  1. this.button1.Location = new System.Drawing.Point(2, 1);
  2. this.button1.Name = "button1";
  3. this.button1.Size = new System.Drawing.Size(205, 40);
  4. this.button1.TabIndex = 0;
  5. this.button1.Text = "修正剪贴板内容";
  6. this.button1.UseVisualStyleBackColor = true;
  7. this.button1.Click += new System.EventHandler(this.button1_Click);
  8. //
  9. // linkLabel1
  10. //
  11. this.linkLabel1.AutoSize = true;
  12. this.linkLabel1.Location = new System.Drawing.Point(70, 44);
  13. this.linkLabel1.Name = "linkLabel1";
  14. this.linkLabel1.Size = new System.Drawing.Size(120, 13);
  15. this.linkLabel1.TabIndex = 1;
  16. this.linkLabel1.TabStop = true;
  17. this.linkLabel1.Text = "三角猫 http://zu14.cn/";
  18. this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);

 

最后提供下载修改过的DLL。下载

时间: 2024-11-05 14:40:21

让Paste as Visual Studio Code支持Visual Studio 2010粘贴的中文--自己动手丰衣足食的相关文章

Visual Studio Code 支持 iOS Web 应用调试

微软JavaScript Diagnostics项目经理Kenneth Auchenberg在一篇文章中写道,有一个新的Visual Studio Code扩展,允许开发人员直接在他们的Mac和Windows编辑器上调试在iOS设备上运行的JavaScript Web应用和网站. Auchenberg解释说,以前,调试iOS Web应用需要在Mac上运行Safari Web查看器,或者使用一个专用的跨浏览器兼容性检查器,如BrowserStack.新的Visual Studio Code扩展"i

Visual Studio Code 支持 Java 语言

Java语言服务器是Java语言服务器协议的实现.如果你还记得的话,语言服务器协议为编辑和IDEs与语言智能供应商的整合提供了一个通用的方式.通过设计,所有的语言工具都可以奇迹地发生在Java语言服务器上,并且能够为工具提供相同水平的智能来支持协议.事实上,我们正在与Eclipse Che这类的社区一起努力,以使这个服务器也能够支持他们的工具. 截止至9月16日,即上星期五,我们把Java语言发行到了Visual Studio Code 市场.最初的版本有一个合适的特征列表会令Java开发者对V

在Ubuntu中安装Visual Studio Code

在Ubuntu中安装Visual Studio Code 微软令人意外地发布了Visual Studio Code,并支持主要的桌面平台,当然包括linux.如果你是一名需要在ubuntu工作的web开发人员,你可以非常轻松的安装Visual Studio Code. 我将要使用Ubuntu Make来安装Visual Studio Code.Ubuntu Make,就是以前的Ubuntu开发者工具中心,是一个命令行工具,帮助用户快速安装各种开发工具.语言和IDE.也可以使用Ubuntu Mak

vs code-怎么汉化visual studio code?

问题描述 怎么汉化visual studio code? 我在vs的源码中找到了i18n/zh_cn.的汉化包,但是不知道怎么用. 解决方案 Visual Studio Code初体验Visual Studio Code 笔记visual studio code基础 解决方案二: 有必要汉化么?我就不信有不懂英语的人会用这么小众的东西.而且这就是一个壳,一切功能都是插件,你汉化壳有什么意义?好比我没见过有人用汉化的vim

Visual Studio Code现在支持iOS Web应用调试了

微软JavaScript Diagnostics项目经理Kenneth Auchenberg在一篇文章中写道,有一个新的Visual Studio Code扩展,允许开发人员直接在他们的Mac和Windows编辑器上调试在iOS设备上运行的JavaScript Web应用和网站. Auchenberg解释说,以前,调试iOS Web应用需要在Mac上运行Safari Web查看器,或者使用一个专用的跨浏览器兼容性检查器,如BrowserStack.新的Visual Studio Code扩展"i

Visual Studio Code现已支持Linux“快照包”安装

在添加了对"快照包"(snap packages)的支持后,微软的 Visual Studio Code 代码编辑器,现已能够在 Linux 平台上更轻松地安装.此前,用户不得不从 Visual Studio 官网下载一个 .deb 或 .rpm 的文件.虽然难度不高,但所需步骤比较多.相比之下,"快照包"可以通过终端中一条简单的命令行文本进行安装.感兴趣的开发者可以在 Linux 系统的"终端"应用程序中输入如下命令(需要权限)--"

Ubuntu 15.04系统怎么安装Visual Studio Code 2015?

  不是我不明白,这世界变化快!微软面向 Linux 平台推出了 Visual Studio 2015!昔日的对头,如今正走向融合.这么喜大普奔的事,我准备挑战一下微软重量级软件在 Linux 平台上的安装.然没想到哇.根本没有我想象中的挑战性.看完你就知道了. 1.百度 "Visual Studio Downloads"这一溜关键词,在搜索结果中打开 Visual Studio 的主页. 2.可以看到页面上有三个磁贴状方块,最右边的是 Visual Studio Code,我们点击它

Java开发者的福音:使用 Visual Studio Code 调试 Java 应用程序

对于使用 Visual Studio Code 的 Java 开发者来说,Language Support for Java(TM) by Red Hat 扩展提供了非常好的语言特性支持,比如智能感知和项目支持等.然而,我们也听到一些用户反馈需要调试 Java 程序.今天,我们万分激动地宣布,我们与 Red Hat 合作开发了能让开发者调试 Java 应用程序的轻量级扩展:Java Debugger for Visual Studio Code,它基于 Java Debug Server. 注意

【dotnet跨平台】Visual Studio Code常见问答

 [dotnet跨平台]Visual Studio Code常见问答 如果你没找到想要的问题答案,请看已知问题:https://github.com/microsoft/vscode/issues和我们的更新:https://code.visualstudio.com/Updates. 1. VS Code和VS Community(社区版)有什么区别? VS Code是流线型代码编辑器,同时支持一些开发操作如调试,任务运行和版本控制.它的目标是提供开发者需要的工具,开发者需要一个快速的"代