JavaScriptで書いたルビ支援入力のスクリプトをVisual Basicで書いてみた。
IndesignのJavaScriptで書いたルビ支援入力のスクリプトをVisual Basicで書いてみた。
Visual Basicは持っていなかったので、無償のVisual Basic 2008 Express Editionをダウンロードするところから始まった。
1.下記URLからVisual Basic 2008 Express Editionをダウンロードし、そしてインストール。
http://www.microsoft.com/japan/msdn/vstudio/express/
2.Visual Basic 2008 Express Editionを起動。
3.「ファイル-新しいプロジェクト」を選ぶと新しいプロジェクトダイアログが開く。テンプレートは「コンソールアプリケーション」を選び、プロジェクト名は適当に決める。
4.「プロジェクト-参照の追加」でCOMタブをクリック。Adobe Indesign CS2_J Type Library 1.0を選んでOKを押す。
5. Module1.vbに下記のようなコードを書いた。
Imports System.Text.RegularExpressions ' 正規表現エンジンの使用を宣言
Module Module1
Sub Main()
Dim app As InDesign.Application
Dim mySel
app = CreateObject("InDesign.Application.CS2_J")
' ドキュメントが開いているか?
If (app.Documents.Count <> 0) Then
mySel = app.ActiveDocument.Selection
' 文字が選択されているか?
If (mySel.count = 1) Then
If (TypeOf mySel(1) Is InDesign.Character = True) Or (TypeOf mySel(1) Is InDesign.Text = True) Or (TypeOf mySel(1) Is InDesign.Word = True) Then
' ダイアログ表示準備
Dim oyamoji As String = mySel(1).contents
Dim myDialog = app.Dialogs.Add
myDialog.Name = "ルビ入力支援"
Dim myDialogColumn = myDialog.DialogColumns.Add
Dim myDialogRow = myDialogColumn.DialogRows.Add
Dim myLabel = myDialogRow.StaticTexts.Add
myLabel.StaticLabel = "親文字:" & oyamoji
Dim myDialogRow2 = myDialogColumn.DialogRows.Add()
Dim myLabel2 = myDialogRow2.StaticTexts.Add()
myLabel2.StaticLabel = "ルビ:"
Dim rubyTBox = myDialogRow2.TextEditboxes.Add()
rubyTBox.MinWidth = 200
' ダイアログ表示
Dim myReturn = myDialog.Show()
' OKが押されたか?
If (myReturn = True) Then
Dim tmpFlag As Boolean = True
Dim rubyText As String = rubyTBox.EditContents
Dim re As New Regex(" | ", RegexOptions.Singleline)
' ルビ入力がない、またはルビ入力の中に全角か半角の空白がなければフラグはfalse
If (rubyText.Length = 0) Or (re.IsMatch(rubyText)) = False Then tmpFlag = False
Dim matches As MatchCollection = re.Matches(rubyText)
' フラグがtrueで、親文字の字数とルビ入力の空白で区切られた文字の個数が一致するか?
If (tmpFlag = True) And (mySel(1).characters.count = matches.Count + 1) Then
' ルビ入力を空白ごとに切り出す
Dim rubyText2 = re.Split(rubyText)
Dim i As Integer
Dim j As Integer = mySel(1).characters.Count
' 親文字1字ずつに対しモノルビでルビを振る
For i = 1 To j Step 1
mySel(1).characters(i).rubyFlag = True
mySel(1).characters(i).rubyType = 1249013859
mySel(1).characters(i).rubyString = rubyText2(i - 1)
Next i
Else
' 親文字に対しグループルビでルビを振る
rubyText = re.Replace(rubyText, "")
mySel(1).rubyFlag = True
mySel(1).rubyType = 1249011570
mySel(1).rubyString = rubyText
End If
End If
' ダイアログ消去
myDialog.Destroy()
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("ドキュメントを開いて下さい")
End If
End Sub
End Module
とりあえずは動いた。
Visual Basicは持っていなかったので、無償のVisual Basic 2008 Express Editionをダウンロードするところから始まった。
1.下記URLからVisual Basic 2008 Express Editionをダウンロードし、そしてインストール。
http://www.microsoft.com/japan/msdn/vstudio/express/
2.Visual Basic 2008 Express Editionを起動。
3.「ファイル-新しいプロジェクト」を選ぶと新しいプロジェクトダイアログが開く。テンプレートは「コンソールアプリケーション」を選び、プロジェクト名は適当に決める。
4.「プロジェクト-参照の追加」でCOMタブをクリック。Adobe Indesign CS2_J Type Library 1.0を選んでOKを押す。
5. Module1.vbに下記のようなコードを書いた。
Imports System.Text.RegularExpressions ' 正規表現エンジンの使用を宣言
Module Module1
Sub Main()
Dim app As InDesign.Application
Dim mySel
app = CreateObject("InDesign.Application.CS2_J")
' ドキュメントが開いているか?
If (app.Documents.Count <> 0) Then
mySel = app.ActiveDocument.Selection
' 文字が選択されているか?
If (mySel.count = 1) Then
If (TypeOf mySel(1) Is InDesign.Character = True) Or (TypeOf mySel(1) Is InDesign.Text = True) Or (TypeOf mySel(1) Is InDesign.Word = True) Then
' ダイアログ表示準備
Dim oyamoji As String = mySel(1).contents
Dim myDialog = app.Dialogs.Add
myDialog.Name = "ルビ入力支援"
Dim myDialogColumn = myDialog.DialogColumns.Add
Dim myDialogRow = myDialogColumn.DialogRows.Add
Dim myLabel = myDialogRow.StaticTexts.Add
myLabel.StaticLabel = "親文字:" & oyamoji
Dim myDialogRow2 = myDialogColumn.DialogRows.Add()
Dim myLabel2 = myDialogRow2.StaticTexts.Add()
myLabel2.StaticLabel = "ルビ:"
Dim rubyTBox = myDialogRow2.TextEditboxes.Add()
rubyTBox.MinWidth = 200
' ダイアログ表示
Dim myReturn = myDialog.Show()
' OKが押されたか?
If (myReturn = True) Then
Dim tmpFlag As Boolean = True
Dim rubyText As String = rubyTBox.EditContents
Dim re As New Regex(" | ", RegexOptions.Singleline)
' ルビ入力がない、またはルビ入力の中に全角か半角の空白がなければフラグはfalse
If (rubyText.Length = 0) Or (re.IsMatch(rubyText)) = False Then tmpFlag = False
Dim matches As MatchCollection = re.Matches(rubyText)
' フラグがtrueで、親文字の字数とルビ入力の空白で区切られた文字の個数が一致するか?
If (tmpFlag = True) And (mySel(1).characters.count = matches.Count + 1) Then
' ルビ入力を空白ごとに切り出す
Dim rubyText2 = re.Split(rubyText)
Dim i As Integer
Dim j As Integer = mySel(1).characters.Count
' 親文字1字ずつに対しモノルビでルビを振る
For i = 1 To j Step 1
mySel(1).characters(i).rubyFlag = True
mySel(1).characters(i).rubyType = 1249013859
mySel(1).characters(i).rubyString = rubyText2(i - 1)
Next i
Else
' 親文字に対しグループルビでルビを振る
rubyText = re.Replace(rubyText, "")
mySel(1).rubyFlag = True
mySel(1).rubyType = 1249011570
mySel(1).rubyString = rubyText
End If
End If
' ダイアログ消去
myDialog.Destroy()
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("ドキュメントを開いて下さい")
End If
End Sub
End Module
とりあえずは動いた。
<<Indesignのダイアログでなく、Visual Basicのダイアログを動かしてみる。 | HOME | ルビ入力を行うスクリプト>>
COMMENTS
COMMENT FORM
TRACKBACK
| HOME |