<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的對話框:
(圖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所示:
(圖2)
現在我們選擇三行,這三行包括了以"does not specify:"開頭的行,如圖3所示:
(圖3)
最后我們點擊中在窗口左上角上的綠色箭頭,接著宏的名字(Format Current Selection)就顯示在下拉菜單的窗口中,如圖4所示:
(圖4)
值得一提的是,被選擇的行已經被格式化為原來的段落邊界。以"referred to in this ma"為開頭的第二行保持縮進狀態而沒有被格式化。