Javascript實(shí)例教程(19) 使用HoTMetal(4)
更新時(shí)間:2006年12月23日 00:00:00 作者:
4. 怎樣編寫(xiě)文檔格式的腳本
下面舉個(gè)宏的例子:根據(jù)預(yù)定義的頁(yè)面的布置準(zhǔn)則來(lái)格式化文檔。為了觀察這個(gè)宏的效應(yīng),請(qǐng)關(guān)閉Enable Source Layout(允許源程序布局)按鈕,具體從菜單中選擇Tools(工具)->Customization(定制)。我們首先打開(kāi)應(yīng)用程序來(lái)初始化一些全局的變量。另外宏的名字必須為n_Application_Open,具體的代碼如下:
<MACRO name="On_Application_Open" lang="JScript"><![CDATA[
var viewWYSIWYG = 0;
var viewTagsOn = 1;
var viewSource = 2;
]]></MACRO>
這個(gè)宏必須在打開(kāi)HoTMetaL應(yīng)用程序的時(shí)候才被調(diào)用。它唯一的目的就是定義三個(gè)常數(shù),這些常數(shù)用于其它的宏。這些常數(shù)只是代表了三個(gè)相應(yīng)的HoTMetaL視圖。操作HoTMetaL的編輯窗口的左邊按鈕邊角上的窗口標(biāo)簽,你可以看到WYSIWYG(即所見(jiàn)即所得)視圖,TagsOn視圖和源程序視圖。
下面得宏是檢查當(dāng)前視圖是否是源視圖并且根據(jù)預(yù)定義的準(zhǔn)則格式化整個(gè)文檔。如果視覺(jué)圖不是源視圖,一個(gè)消息就會(huì)打印出來(lái)顯示給用戶,并且告訴用戶切換視圖,代碼如下:
<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>
這里要注意,我們?cè)谶@里已經(jīng)使用了兩個(gè)HotMetaL的對(duì)象:ActiveDocument 和 Application。這個(gè)Layout()方法格式化了當(dāng)前文檔。而Alert()方法彈出了一個(gè)警告方框。
好吧,現(xiàn)在讓我們來(lái)測(cè)試一下這個(gè)宏。請(qǐng)?jiān)贖otTMetaL中打開(kāi)一個(gè)文檔并將視圖切換到源程序視圖。你可以在ProgGuide目錄中選擇其中一段。并且通過(guò)使用Tools(工具)->Customization(定制)關(guān)閉Enable Source Layout按鈕。接著將其中一行用加入空格往右移,再?gòu)墓ぞ卟藛沃姓{(diào)用宏對(duì)話框。這時(shí)會(huì)展現(xiàn)出定義在HotMetaL.mcr文件的宏的列表。然后運(yùn)行Refresh Macros宏來(lái)裝載你剛才編輯的新的宏。你將會(huì)看到Format Current Document (格式當(dāng)前文檔)宏。你可以運(yùn)行它并且注意那個(gè)縮進(jìn)的行回到它的原位置。接下來(lái)我們測(cè)試一下Alert()方法?,F(xiàn)在將視圖切換到TagsOn視圖并再次運(yùn)行宏,會(huì)彈出如圖1的對(duì)話框:

(圖1)
現(xiàn)在假設(shè)你想格式化文檔中所選擇的部分。這個(gè)請(qǐng)求的宏(稱為Format Current Selection)跟上面所述的宏(Format Current Document)很類似。它們之間的不同只是在:Format Current Document中 Layout()方法是操作ActiveDocument 對(duì)象,而Format Current Selection中 Layout()方法是操作Selection對(duì)象:
<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>
下面讓我們好好看看上面這個(gè)宏是如何工作的。我們?cè)诖蜷_(kāi)的文檔中縮進(jìn)了兩行。第一行是以”does not specify”開(kāi)頭的,而另外一句是以"referred to in this ma:"開(kāi)頭的。如圖2所示:

(圖2)
現(xiàn)在我們選擇三行,這三行包括了以"does not specify:"開(kāi)頭的行,如圖3所示:

(圖3)
最后我們點(diǎn)擊中在窗口左上角上的綠色箭頭,接著宏的名字(Format Current Selection)就顯示在下拉菜單的窗口中,如圖4所示:

(圖4)
值得一提的是,被選擇的行已經(jīng)被格式化為原來(lái)的段落邊界。以"referred to in this ma"為開(kāi)頭的第二行保持縮進(jìn)狀態(tài)而沒(méi)有被格式化。
相關(guān)文章
setTimeout和setInterval的瀏覽器兼容性分析
setTimeout和setInterval的瀏覽器兼容性分析...2007-02-02
淺談javascript基礎(chǔ)之客戶端事件驅(qū)動(dòng)
下面小編就為大家?guī)?lái)一篇淺談javascript基礎(chǔ)之客戶端事件驅(qū)動(dòng)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
javascript 學(xué)習(xí)筆記(六)瀏覽器類型及版本信息檢測(cè)代碼
由于各瀏覽器對(duì)css以及js支持的差異性,我們?cè)谧銮岸碎_(kāi)發(fā)時(shí),經(jīng)常需要先檢測(cè)瀏覽器的類型及版本,然后會(huì)對(duì)各自的差異性來(lái)寫(xiě)代碼!2011-04-04
詳解JavaScript中雙等號(hào)引起的隱性類型轉(zhuǎn)換
JavaScript中由==判斷所引起的轉(zhuǎn)換會(huì)引發(fā)解釋器的一些列執(zhí)行步驟,接下來(lái)我們就來(lái)詳解JavaScript中雙等號(hào)引起的隱性類型轉(zhuǎn)換,需要的朋友可以參考下2016-05-05
Javascript模塊化編程(一)模塊的寫(xiě)法最佳實(shí)踐
Javascript模塊化編程,已經(jīng)成為一個(gè)迫切的需求。理想情況下,開(kāi)發(fā)者只需要實(shí)現(xiàn)核心的業(yè)務(wù)邏輯,其他都可以加載別人已經(jīng)寫(xiě)好的模塊但是,Javascript不是一種模塊化編程語(yǔ)言,它不支持類class,更遑論模塊module了2013-01-01
詳解JavaScript中undefined與null的區(qū)別
大多數(shù)計(jì)算機(jī)語(yǔ)言,有且僅有一個(gè)表示"無(wú)"的值,比如,C語(yǔ)言的NULL,Java語(yǔ)言的null,Python語(yǔ)言的none,Ruby語(yǔ)言的nil2014-03-03
淺談Javascript中勻速運(yùn)動(dòng)的停止條件
這篇文章主要給我們探討了Javascript中勻速運(yùn)動(dòng)的停止條件的原理及其與緩沖運(yùn)動(dòng)的區(qū)別,需要的朋友可以參考下2014-12-12
JavaScript cookie詳解及簡(jiǎn)單實(shí)例應(yīng)用
這篇文章主要介紹了JavaScript cookie詳解及簡(jiǎn)單實(shí)例應(yīng)用的相關(guān)資料,這里對(duì)js cookie 的介紹及基本屬性和簡(jiǎn)單應(yīng)用做了詳解,需要的朋友可以參考下2016-12-12

