先插一段小广告为下文做铺垫
我一直觉得WebMatrix是一个很不错的ASP.NET开发工具, 虽然这个小软件是在遥远的 v1.x 年代的产品, 但功能齐全, 使用方便, 而且个头小, 安装后总共才2.8M的个头(想想 Web Developer Express的个头), 自带一个服务器, 安装后还可以直接把程序目录拷贝到 U盘里随身携带, 非常适合那些自己没有电脑但又想学习ASP.NET开发的童鞋(我以前大学 时没买电脑前就是这么干的啦). 不过它有个很大的缺点, 就是不能很好的支持中文. 在 文本编辑器里输入中文后, 光标显示的位置不对.... 一个对策就是不输入中文就好啦, 顺便还可以锻炼英文 :-)
最近一直在研究WebMatrix, 为什么要研究它? 有几个目的和原因:
学习如何设计并实现一个结构良好且有扩展性的程序
学习如何从零开始实现一个代码编辑器
WebMatrix这个程序功能齐全, 具有一定扩展性(支持插件), 个头不大不小(核心部分 估计有50000行左右代码, 花一两个星期摸透, 非常适合进行研究
这是微软出品的, 就算程序设计的不是很完美, 但至少不会是错误的
响应上面的小广告, 对其进行改造, 使其能够完美支持中文
我花了大概一个星期左右, 基本摸清了整个程序的结构和流程, 发现其实这个程序设 计的还是很不错的. 各模块职责分明, 配合良好, 扩展性很强也很容易进行扩展, 非常符 合 "对修改关闭, 对扩展开放" 这个软件设计思想.
对程序研究得比较清楚之后, 最主要的任务就是
对其进行改造,
使其能够完美支持中文
啦. 经研究发现, WebMatrix里的文本编辑器在输出文本时, 使用了一个固定的字符宽 度(杯具的开始), 这个固定宽度在仅仅使用英文时是没有问题的, 但是如果有中文(或其 他非拉丁系文字), 就会出problems了: 计算出来的文本宽度不对, 这个就直接导致了两 个问题:
当前文本行里的光标位置不对
被选中部分的文字显示不正常
如图: