- 作成者投稿
- 2012年9月27日 8:33 am #11231匿名休止中
PlantUML を使って、UML図を作成し、ビュワで開くマクロです。
使い方は、ソースコードのコメントを参照下さい。PlantUML の例えば次のようなコードを選択して実行すると、この場合には、シーケンス図が表示されます。
@startuml
title シーケンス図
scale 2.0
participant 送り手 #Yellow
participant 受け手 #Pink
送り手 -> 受け手 : データ
@enduml私はこのマクロを CTRL-U に割り当てています。
//////////////////////////////////////////////////////////////////
// @startuml~@enduml までの間にカーソルを置いて起動することにより、
// 内容をクリップボードにコピーし、ファイル化して、
// PlantUML に渡すことにより、UML 図を作成し、ビュワで開く。
// 初回は、ビュワを起動するために @startulm の行にカーソルを置く。
// 次回以降は、上記以外の行にカーソルを置くことで、ビュワ(=.png が Microsoft Office Picture Manager に割り付けられていると仮定)
// の再起動を行わないで表示更新のみが行われる。
// 動作の前提条件
// PlantUML がインストールされている。
// C:binEmEditor フォルダをワークフォルダとして使用する。
// C:binPlantUML フォルダに plantuml.jar があると仮定する。
//////////////////////////////////////////////////////////////////
// 後でカーソルを戻すために現在の位置を記録する。
// カーソルは、@startuml よりも後ろで、@enduml よりも前に置いてあると仮定する。
yPosOld = document.selection.GetActivePointY(eePosView); // 現在行
xPosOld = document.selection.GetActivePointX(eePosView); // 現在桁
// @startuml を探す。
bIsStartFound = document.selection.Find(“@startuml”, eeFindPrevious);
if (!bIsStartFound) {
alert(“Couldn’t find @startuml”);
Quit();
}
yPosStart = document.selection.GetActivePointY(eePosView); // @startuml のある行が見つかった。
xPosStart = document.selection.GetActivePointX(eePosView) – 9; // @startuml のある行が見つかった。
// 引き続き @enduml を探す。
bIsEndFound = document.selection.Find(“@enduml”, eeFindNext);
if (!bIsEndFound) {
alert(“Couldn’t find @enduml”);
Quit();
}
yPosEnd = document.selection.GetActivePointY(eePosView); // @enduml のある行が見つかった。
// 選択範囲の開始位置を @startuml の始まりの位置に設定する。
// これで、@startuml~@enduml の範囲が選択される。
document.selection.SetAnchorPoint(eePosView, xPosStart, yPosStart);
// 選択範囲のテキストを変数に得る。
strUml = document.selection.Text;
// 選択範囲をコピーする。
document.selection.Copy();
// 選択範囲を解除する。
document.selection.Collapse();
// 検索のハイライトを解除する。
document.HighlightFind=false;
// カーソルの位置を戻す。
document.selection.SetActivePoint(eePosView, xPosOld, yPosOld);
// ファイルシステムオブジェクトを作成し、PlantUML.txt に書き込む。
objFileSystem = new ActiveXObject(“Scripting.FilesystemObject”);
objfileUmlTxt = objFileSystem.OpenTextFile(“C:binEmEditorPlantUML.txt”, 2, true/*create*/); // 1:Read, 2:Write, 8:Append
objfileUmlTxt.Write(strUml);
objfileUmlTxt.Close();
// PlantUML を呼び出す。
WshShell = new ActiveXObject(“WScript.Shell”); // シェルを用意する。
WshShell.Run(“C:binPlantUMLplantuml.jar -jar C:binEmEditorPlantUML.txt”, 1, true); // シェルで外部プログラムを動作させる。
if (yPosOld == yPosStart) {
WshShell.Run(“C:binEmEditorPlantUML.png”, 1, false); // シェルで外部プログラムを動作させる。
} - 作成者投稿
- このトピックに返信するにはログインしてください。