在我写这篇文字的时候,或者说在稍早一点对dp2circulation加拼音脚本相关功能进行改造的时候,我发现一个问题:
老的拼音功能相关代码,就是这系列文章一上来要求您删除的那些老代码,实现不了老的加拼音子字段规则。就是指200$a内汉字创建拼音子字段$A,$f内汉字创建拼音子字段$F,...,那个老规则。
问题出在那个获取拼音配置信息的函数GetPinyinCfgLine()和配套的构思上面。当匹配200字段的时候,总是取出200字段的第一个子字段$a的信息,无法取出同一字段的其他子字段的信息。
假如我们这样配置:
string[] cfgFields = new string [] {
"200(a-A)",
"200(f-F)",
...
}
那么,如果我们真的验证一下,会发现第二行配置"200(f-F)"永远不可能被取出来。
这就是老代码的缺点了。幸好,新的取拼音规则,为每个字段只取一个子字段的拼音,掩盖了这个缺点。
但是要编写删除老规则下拼音子字段的功能的时候,这个问题就会暴露出来。或者,如果您偏偏要写一个按照老规则加拼音子字段的功能,也会暴露出这个问题。
~~~
好了说到这里,假如您要写一个老规则的加拼音功能,代码什么样子呢?
首先需要在Main()函数里面适当位置加一个功能入口:
// 老规则加拼音
actions.NewItem("老规则加拼音", "按照老规则来加拼音", "OldAddPinyin", false);
然后在MyHost类中的适当位置加入一个OldAddPinyin()函数,代码如下:
void OldAddPinyin()
{
AddPinyin(this.OldPinyinCfgXml);
}
这里假定您已经按照前面的文字加入过OldPinyinCfgXml的定义。
~~~
上面这个“优点”,我们拿着放大镜来看,是不是可以算是给“神奇”加点分呢?