IMZRH的日志

努力成为一个有用的人

导航

发布Live Writer 插件---格式刷

Posted on 2010-08-03 14:28  张荣华  阅读(1888)  评论(6编辑  收藏  举报

一直觉得在用Live Writer写Blog时没有格式刷功能不是很方便,比如有一些字体都需要红色加粗显示一下,就需要我手工重复设置这些字体的样式,这重复劳动也太多了吧?在忍受了一段时间后,我终于决定要自己写一个格式刷的插件。对格式刷插件要求很简单,能简单的实现将源字符串的格式复制到目标字符串上,咱就这么点要求,不高吧?

实现思路

其实Live Writer的可扩展性很好,用c#来为Live Writer写一个插件是很容易的事,往往一些功能比较简单的插件几十行代码就能搞定了。下面我来说说格式刷插件的实现思路。

  1. 先将用户选择的文本(即源字符串)的HTML标签和字符分离出来,比如在<p class=”someclass”><strong><em>this is a test </em></strong></p>这个源字符串中,我们需要将HTML标签( <p class=”someclass”><strong><em></em></strong></p> )和字符(this is a test )分离出来,最终我们只需要HTML标签,字符可以抛弃。
  2. 待用户选择了目标字符串后,同样将目标字符串的HTML标签和字符分别出来,抛弃目标字符串的HTML标签,保留字符,将对字符应用源字符串的HTML标签。

代码示例

01:  using System;
02: using System.Collections.Generic;
03: using System.Text;
04: using System.Windows.Forms;
05: using System.IO;
06: using WindowsLive.Writer.Api;
07: using System.Xml;
08: using System.Text.RegularExpressions;
09:
10:
11: namespace ZhangRonghua.FormatBrush
12: {
13: [WriterPlugin("01c28aeb-4848-4912-9114-9341d7779f95", "格式刷",
14: PublisherUrl = "http://zhangronghua.cnblogs.com",
15: Description = "选中源后,点击本图标;然后选中目标,再点击本图标即完成格式刷操作。",
16: Name = "格式刷",
17: ImagePath = "Image.FormatBrush.ico")]
18: [InsertableContentSource("格式刷", SidebarText = "格式刷")]
19: public class FormatBrush : ContentSource
20:
{
21: public static int ClickCount = 0;
22: public static StringBuilder Style = new StringBuilder();
23:
24:
25: public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)
26: {
27: ClickCount++;
28: //log("ClickCount", ClickCount.ToString());
29:
30:
if (ClickCount%2 != 0)
31: {
32: var isFirstFinish = false;
33: Style.Remove(0, Style.Length);
34:
35: var r = new Regex("<[^>]*>");
36: var mcs = r.Matches(content);
37:
38:
39: foreach (Match m in mcs)
40: {
41: if (!isFirstFinish && m.Value.StartsWith("</"))
42: {
43: isFirstFinish = true;
44:
45: Style.Append("{0}");
46: }
47: Style.Append(m.Value);
48: }
49: }
50: else
51:
{
52: var r = new Regex("<[^>]*>");
53: content = r.Replace(content, string.Empty);
54:
55:
56: content = string.Format(Style.ToString(), content);
57: }
58:
59: //log("Style", Style.ToString());
60: //log("Content" , content);
61:
62:
return DialogResult.OK;
63: }
64:
65: private void log(string name, string message)
66: {
67: FileStream log = null;
68: StreamWriter streamWriter = null;
69: try
70:
{
71: log = new FileStream(@"C:\log.txt", FileMode.Append);
72: streamWriter = new StreamWriter(log);
73: streamWriter.WriteLine(DateTime.Now.ToString() + "\t\t" + name + ":" + message);
74: }
75: finally
76:
{
77: if (null != streamWriter)
78: {
79: streamWriter.Close();
80: }
81:
82: if (null != log)
83: {
84: log.Close();
85: }
86: }
87: }
88: }
89: }
 

使用说明及截图

下载代码后将生成的Zhangronghua.FormatBrush Copy到Live Writer的Plugins目录下,重启Live Writer就可以使用本插件了,使用步骤如下:

  1. 选中源字符串。
  2. 点击“格式刷”插件按钮。
  3. 选中目标字符串。
  4. 点击“格式刷”插件按钮,完成操作。

formatbrush

代码下载

点击这里下载,如果不能下载,请学红杏。 另外如果你还没有最好用的网盘软件DropBox,请点击这里注册,你我各增加250M的空间。