<

![endif]-->

いっちゃんのブログ(仮)
fc2ブログ

Indesignのダイアログでなく、Visual Basicのダイアログを動かしてみる。

Indesignのダイアログでなく、Visual Basicのダイアログを動かしてみる。

1.「ファイル-新しいプロジェクト」を選ぶと新しいプロジェクトダイアログが開く。テンプレートは「Windowsフォーム アプリケーション」を選び、プロジェクト名は適当に決める。
2.「プロジェクト-参照の追加」でCOMタブをクリック。Adobe Indesign CS2_J Type Library 1.0を選んでOKを押す。
3.Form1.vbにラベル1個、テキストボックス1個、ボタンを2個配置した。
3-1Form1のプロパティ
 FormBorderStyle:FixedDialog
 Size:276, 110(適当)
 Text:ルビ入力支援(ダイアログのタイトル)
 TopMost:True(ダイアログを常に手前に表示する)
3-2ラベルL_rubyのプロパティ
 (Name):L_ruby
 Location:12, 15(適当)
 Text:ルビ:
3-3テキストボックスrubyTextBoxのプロパティ
 (Name):rubyTextBox
 ImeMode:On(入力時にIMEがオンになる)
 Location:47, 12(適当)
 Size:206, 19
3-4OKボタンBT_OKのプロパティ
 (Name):BT_OK
 Location:87, 48(適当)
 Size:75, 23(適当)
 Text:OK
3-5テキストボックスクリアボタンBT_CLRのプロパティ
 (Name):BT_CLR
 Location:178, 48(適当)
 Size:75, 23(適当)
 Text:クリア
4.Form1.vbに下記のようなコードを書いた。最初に書いたソースとの違いはIndesignのGUI部分を取り払い、ルビ振りのメインルーチンをAddRubyというサブルーチンにまとめた。よって、ルビ入力後にOKボタンを押してもよいし、入力の最後にEnterキーを押してもルビ振りが実行されるようになった。

Imports System.Text.RegularExpressions ' 正規表現エンジンの使用を宣言
Public Class Form1
' OKボタンが押されたらルビ付加のメインルーチンを実行する
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_OK.Click
addRuby()
End Sub
' クリアキーでルビ入力を消去
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_CLR.Click
rubyTextBox.Text = ""
End Sub
' ルビ付加のメインルーチン
Private Sub addRuby()
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 tmpFlag As Boolean = True
' ルビ入力のテキストボックスより文字列を取り出す
Dim rubyText As String = rubyTextBox.Text
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
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("文字を選択してください")
End If
Else
MsgBox("ドキュメントを開いて下さい")
End If

End Sub
Private Sub rubyTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles rubyTextBox.KeyPress
' ルビ入力後にリターンキーが押された?
If e.KeyChar = Microsoft.VisualBasic.Chr(13) Then
Call addRuby()
End If
End Sub

続きを読む »

テーマ : ブログ - ジャンル : ブログ

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

とりあえずは動いた。

テーマ : ブログ - ジャンル : ブログ