■SAMPLE 1
次のスクリプトは新しいメニューおよびコマンドを作成し、イベント処理を追加しています。
ユーザがメニューのコマンドを選択すると、メッセージを表示します。
New Menu Label('My Menu') NewVar(mymenuobj) Addto('!MakerMainMenu');
New Command name('MyCommand') Addto(mymenuobj) EventProc(myMenuEvent) label('My Command');
・・・
Event myMenuEvent
MsgBox '[My Command]が選択されました';
EndEvent
■SAMPLE 2
文書内の全ての文字書式名をコンソールに書き出すスクリプトです。ドキュメントの要素をループ処理しています。
New StringList NewVar(CharFmtNameList);
LOOP ForEach(CharFmt) In(ActiveDoc) LoopVar(CharVar)
SET CurrCharFmt = CharVar.Name;
Add Member(CurrCharFmt) To(CharFmtNameList);
ENDLOOP
Sort List(CharFmtNameList);
WRITE console CharFmtNameList;
■SAMPLE 3
文書内の全てのマスタページ名をコンソールに書き出すスクリプトです。
併せて、現在のドキュメント名とマスターページの数を出力しています。
SET Master_count = 0;
WRITE console ActiveDoc.Name;
LOOP ForEach(MasterPage) In(ActiveDoc) LoopVar(Master_var)
WRITE console Master_var.Name;
Master_count = Master_count + 1;
ENDLOOP
WRITE console 'マスタページの数:' + Master_count;
■Sample 4
すべての段落のテキストにデフォルトフォントを適用します。
LOOP ForEach (Pgf) In(ActiveDoc) LoopVar(pgfobj)
SET pageId = pgfobj.Page;
IF pageId not = 0
IF pageId.objectname = 'BodyPage'
TextSelection = pgfobj.TextRange;
Execute Fc TxtDefault;
EndIF
EndIF
ENDLOOP
■Sample 5
もうすこし実用的なサンプルを紹介します。
次のスクリプトは、FrameMaker 上に作成した検索・置換リストを元に、対象ファイル内のテキストを一括検索・置換するスクリプトです。使用方法は下記の通りです。簡単なスクリプトですが、基本的なスクリプトの組み立て方をみていただけると思います。
> STEP 1

FrameMaker 上に作成した検索・置換リストを作成し、選択します。タブ区切りで左列が検索対象。右列が置換文字列です(改行の前にもタブが入っていますが、実装を簡略化するための仕様ですので、ご容赦ください)。 |
 |
> STEP 2

FrameMaker 上の検索・置換リストを選択してスクリプトを実行すると、ファイル選択ダイアログが表示されます。検索・置換対象のファイルを指定して、 [開く] ボタンを押下します。 |
> STEP 3

選択したファイルが開かれ、一括検索・置換の実行の確認が表示されます。 |
 |
> STEP 4

[はい] を押下すると、検索・置換リストの内容に沿った検索・置換処理が行われ、スクリプトが終了します。 |
IF ActiveDoc = 0
MsgBox '文書を選択して下さい。';
LeaveSub;
EndIF
SET vText = TextSelection.TEXT;
SET vTextCount = vText.count;
Get String FromString(vText) StartPos(vTextCount) EndPos(vTextCount) NewVar(vGetEndText);
IF vGetEndText not= CHARTAB;
MsgBox 'リストの書式が正確でないか、テキストが選択されていません。スクリプトを中止します。';
LeaveSub;
ENDIF
New StringList NewVar(vList1);
New StringList NewVar(vList2);
Loop While(vText)
Find String(CHARTAB) InString(vText) ReturnPos(vPos) ReturnStatus(vFound);
SET vEndPos = vPos - 1;
Get String FromString(vText) StartPos(1) EndPos(vEndPos) NewVar(vGetText1);
Add Member(vGetText1) To(vList1);
SET vStartPos = vPos + 1;
Get String FromString(vText) StartPos(vStartPos) NewVar(vText);
Find String(CHARTAB) InString(vText) ReturnPos(vPos) ReturnStatus(vFound);
SET vEndPos = vPos - 1;
Get String FromString(vText) StartPos(1) EndPos(vEndPos) NewVar(vGetText2);
Add Member(vGetText2) To(vList2);
SET vStartPos = vPos + 1;
Get String FromString(vText) StartPos(vStartPos) NewVar(vText);
If vText = CHARTAB
vText = 0;
EndIF
EndLoop
SET Alpha_List_count1 = vList1.count;
SET Alpha_List_count2 = vList2.count;
IF Alpha_List_count1 not= Alpha_List_count2
MsgBox 'リストの数が一致していません。';
LeaveSub;
ENDIF
DialogBox Type(Choosefile) Title(' ファイル名を選択してください ')
Mode(OpenFile) Button(buttonvar)
NewVar(vTargetFileName) Init('*.fm');
if buttonvar = CancelBUTTON
LEAVESUB;
EndIf
Open Document File (vTargetFileName) NewVar(vTargetFile);
ActiveDoc = vTargetFile;
MsgBOX 'リストによる一括検索・置換を始めますか?'
MODE(YesNo) Button(btnVar);
IF btnVar = NoBUTTON
LEAVESUB;
ENDIF
LOOP While(lpindex <= Alpha_List_count1) LoopVar(lpindex) Init(1) Incr(1)
Get Member Number(lpindex) From(vList1) NewVar(vList1_Text);
Get Member Number(lpindex) From(vList2) NewVar(vList2_Text);
SET text_found=1;
Loop While(text_found)
Find FromTextLoc
String(vList1_Text) ReturnStatus(text_found);
IF text_found
SET TextSelection.Text = vList2_Text;
SET vNumCount = vNumCount + 1;
EndIF
EndLoop
EndLoop
MsgBOX vNumCount + '個検索置換しました。';
|