Javascript实例教程(19) 使用HoTMetal(4)


Posted in Javascript onDecember 23, 2006
HoTMetal中使用javascript

4. 怎样编写文档格式的脚本

下面举个宏的例子:根据预定义的页面的布置准则来格式化文档。为了观察这个宏的效应,请关闭Enable Source Layout(允许源程序布局)按钮,具体从菜单中选择Tools(工具)->Customization(定制)。我们首先打开应用程序来初始化一些全局的变量。另外宏的名字必须为n_Application_Open,具体的代码如下:

<MACRO name="On_Application_Open" lang="JScript"><![CDATA[

var viewWYSIWYG = 0;

var viewTagsOn = 1;

var viewSource = 2;

]]></MACRO>

这个宏必须在打开HoTMetaL应用程序的时候才被调用。它唯一的目的就是定义三个常数,这些常数用于其它的宏。这些常数只是代表了三个相应的HoTMetaL视图。操作HoTMetaL的编辑窗口的左边按钮边角上的窗口标签,你可以看到WYSIWYG(即所见即所得)视图,TagsOn视图和源程序视图。

下面得宏是检查当前视图是否是源视图并且根据预定义的准则格式化整个文档。如果视觉图不是源视图,一个消息就会打印出来显示给用户,并且告诉用户切换视图,代码如下:

<MACRO name="Format Current Document" lang="JScript" id="153" desc="Apply source layout to entire document">

<![CDATA[

if (ActiveDocument.ViewType == viewSource) {

ActiveDocument.Layout();

}

else {

Application.Alert("Applying source layout only works in source view.\nSwitch to source view and try again.");

}

]]></MACRO>

这里要注意,我们在这里已经使用了两个HotMetaL的对象:ActiveDocument 和 Application。这个Layout()方法格式化了当前文档。而Alert()方法弹出了一个警告方框。
好吧,现在让我们来测试一下这个宏。请在HotTMetaL中打开一个文档并将视图切换到源程序视图。你可以在ProgGuide目录中选择其中一段。并且通过使用Tools(工具)->Customization(定制)关闭Enable Source Layout按钮。接着将其中一行用加入空格往右移,再从工具菜单中调用宏对话框。这时会展现出定义在HotMetaL.mcr文件的宏的列表。然后运行Refresh Macros宏来装载你刚才编辑的新的宏。你将会看到Format Current Document (格式当前文档)宏。你可以运行它并且注意那个缩进的行回到它的原位置。接下来我们测试一下Alert()方法。现在将视图切换到TagsOn视图并再次运行宏,会弹出如图1的对话框:

Javascript实例教程(19) 使用HoTMetal(4)

(图1)

现在假设你想格式化文档中所选择的部分。这个请求的宏(称为Format Current Selection)跟上面所述的宏(Format Current Document)很类似。它们之间的不同只是在:Format Current Document中 Layout()方法是操作ActiveDocument 对象,而Format Current Selection中 Layout()方法是操作Selection对象:

<MACRO name="Format Current Selection" lang="JScript" id="53" desc="Apply source layout to the current selection">

<![CDATA[

if (ActiveDocument.ViewType == viewSource) {

Selection.Layout();

} else{

Application.Alert("Applying source layout only works in source view.\nSwitch to source view and try again.");

}

]]></MACRO>
下面让我们好好看看上面这个宏是如何工作的。我们在打开的文档中缩进了两行。第一行是以”does not specify”开头的,而另外一句是以"referred to in this ma:"开头的。如图2所示:

Javascript实例教程(19) 使用HoTMetal(4)

(图2)

现在我们选择三行,这三行包括了以"does not specify:"开头的行,如图3所示:

Javascript实例教程(19) 使用HoTMetal(4)

(图3)

最后我们点击中在窗口左上角上的绿色箭头,接着宏的名字(Format Current Selection)就显示在下拉菜单的窗口中,如图4所示:

Javascript实例教程(19) 使用HoTMetal(4)

(图4)

值得一提的是,被选择的行已经被格式化为原来的段落边界。以"referred to in this ma"为开头的第二行保持缩进状态而没有被格式化。

Javascript 相关文章推荐
Javascript创建自定义对象 创建Object实例添加属性和方法
Jun 04 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
boostrapTable的refresh和refreshOptions区别浅析
Jan 22 Javascript
js 博客内容进度插件详解
Feb 19 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
Jan 22 Javascript
ES6关于Promise的用法详解
May 07 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
Javascript实例教程(19) 使用HoTMetal(3)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(2)
Dec 23 #Javascript
Javascript实例教程(19) 使用HoTMetal(1)
Dec 23 #Javascript
用于自动添加Digg This!按钮的JavaScript
Dec 23 #Javascript
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 #Javascript
获取Javscript执行函数名称的方法
Dec 22 #Javascript
在Javascript中定义对象类别
Dec 22 #Javascript
You might like
PHP中文汉字验证码
2007/04/08 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
javascript间隔刷新的简单实例
2013/11/14 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
AngularJS 避繁就简的路由
2016/07/01 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
javascript 日期相减-在线教程(附代码)
2017/08/17 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
python求最大连续子数组的和
2018/07/07 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
Python类继承和多态原理解析
2020/02/05 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
营销人才自我鉴定范文
2013/12/25 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
小学生作文评语大全
2014/04/21 职场文书
信访维稳工作汇报
2014/10/27 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
三下乡活动心得体会
2016/01/23 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL