スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AppleScriptでも書いてみた。

ついでにXcodeを使ってAppleScriptでも書いてみた。

1.Xcodeから新しいプロジェクトでAppleScript Dropletを選択する。
2.プロジェクトマネージャからMainMenu.nibをダブルクリップする。ここでInterface Builderが起動する。
3.Tools-Show Inspectorを選択してインスペクタを表示させる。
4.MainMenuのパレットのInstanceタブをクリックし、File's Ownerアイコンをクリックする。インスペクタのドロップダウンメニューでAppleScriptをする。Event HandlerのApplication-Launchedをクリックして、チェック印を入れる。
5.Interface Builderを終了させる。
6.プロジェクトマネージャに戻り、Applicatio.Applescriptをダブルクリックすると、エディタが表示される。
7.on launched theObject

end launched
の間にメインルーチンのApple Scriptを挿入し、また2つのサブルーチンを挿入した。なおサブルーチンは福井県立大学の田中求之様とScript Note様のサイトより拝借した。

on launched theObject

tell application "Adobe InDesign CS2_J"
activate
set docCount to count documents
--ドキュメントが開いているか?
if docCount is not 0 then
set mySel to selection of active document
set mySelName to class of item 1 of mySel
--文字が選択されているか?
if length of mySel is 1 and mySelName is character or mySelName is text or mySelName is word then
--ダイアログ表示準備
set oyamoji to contents of item 1 of mySel
--タイトル
set myDialog to make dialog with properties {name:"ルビ入力支援"}
tell myDialog
tell (make dialog column)
--columnの中にrowを作ると中のコンテンツが左寄せになる
tell (make dialog row)
make static text with properties {static label:"親文字:" & oyamoji}
end tell
tell (make dialog row)
make static text with properties {static label:"ルビ:"}
set rubyTBox to make text editbox with properties {min width:200}
end tell
end tell
end tell
--ダイアログ表示
set myReturn to show myDialog
--OKが押されたか?
if myReturn is true then
--フラグ初期値はtrue
set tmpFlag to true
--ルビ入力を変数に格納
set rubyText to edit contents of rubyTBox
--ルビ入力が無ければフラグはfalse
if length of rubyText is 0 then set tmpFlag to false
set result to do shell script "
perl ~/chk_spc.pl " & rubyText
--ルビ入力の中に全角or半角の空白が含まれていなければフラグはfalse
if result is 0 then set tmpFlag to false
set result to do shell script "
perl ~/cnt_spc.pl " & rubyText
--フラグがtrueで、親文字の字数と空白で区切ったルビの数が一致するか?
if tmpFlag is true and length of oyamoji = result + 1 then
--ルビ入力の区切り文字を全角空白で統一
set rubyText2 to my replace2(rubyText, " ", " ")
--ルビ入力を全角空白で切り出す
set rubyText2 to my split2(rubyText, " ")
--モノルビで親文字一字ごとにルビを付加
repeat with i from 1 to length of oyamoji
set ruby flag of character (i) of item 1 of mySel to true
set ruby type of character (i) of item 1 of mySel to per character ruby
set ruby string of character (i) of item 1 of mySel to item i of rubyText2
end repeat
else
--ルビ入力の空白を削除
set rubyText to do shell script "
perl ~/del_spc.pl " & rubyText
--グループルビでルビを付加
set ruby flag of item 1 of mySel to true
set ruby type of item 1 of mySel to group ruby
set ruby string of item 1 of mySel to rubyText
end if
end if
end if
end if
end tell
quit

end launched

--http://mtlab.ecn.fpu.ac.jp/WSM_2001/010824112227.htmlより引用
on replace2(src, tg, rp)

set oldDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to tg
set myList to text items of src
set AppleScript's text item delimiters to rp
set myText to myList as string
set AppleScript's text item delimiters to oldDel
return myText

end replace2

--http://psychocat.net/scriptNote/article.php?id=95より引用
on split2(textValue, deliChar)
set textValue to textValue as Unicode text
set defaultDelimita to AppleScript's text item delimiters --現在のdelimitersを記憶
set AppleScript's text item delimiters to deliChar --今回の定義
set textValue to text items of textValue as list
set AppleScript's text item delimiters to defaultDelimita --delimitersを戻す
return textValue
end split2
スポンサーサイト

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

とりあえずは動いた。

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

ルビ入力を行うスクリプト

ルビ入力をIndesignのダイアログで行うスクリプトを書いてみた。
しかしルビを一度振るごとにスクリプトが終了してしまうので面白くない。
VBか何かで書けばいいのだろうか。
//
// ルビ入力支援スクリプト
//
// 【使い方】
// 親文字を選択し、このスクリプトを実行。ルビを入力しOKボタンを押す。
//
// 注1:ルビ入力をせずにOKを押すとルビは解除される。
// 注2:ルビを親文字ごとに空白で区切って入力すると、モノルビになる。
// 注3:親文字の字数とルビ入力の空白で区切られ文字の数が一致しない場合はグループルビになる。
// 注4:ルビを空白で全く区切らずに入力すると、グループルビになる。
//

// ドキュメントが開いているか?
if(app.documents.length != 0) {
var mySel = app.activeDocument.selection;
// 文字が選択されているか?
if( (mySel.length == 1) && (mySel[0].constructor.name == "Character") ||
(mySel[0].constructor.name == "Text") || (mySel[0].constructor.name == "Word") ) {
var oyamoji = mySel[0].contents;
// ダイアログの生成
var myDialog = app.dialogs.add( {name:"ルビ入力支援"} );
with(myDialog) {
with(dialogColumns.add() ){
with(dialogRows.add() ){
staticTexts.add({staticLabel:"親文字:" + oyamoji});
}
with(dialogRows.add() ){
staticTexts.add({staticLabel:"ルビ:"});
var rubyTBox = textEditboxes.add({minWidth:200 });
}
}
}
// ダイアログ表示
var myReturn = myDialog.show();
// OKが押されたか?
if (myReturn == true) {
var tmpFlag = true;
var rubyText = rubyTBox.editContents;
// ルビ入力がなければフラグはfalse
if(rubyText.lengh == 0) tmpFlag = false;
// 入力したルビに空白文字がなければフラグはfalse
if(rubyText.match(/ | /g) == null) tmpFlag = false;
// フラグがtrueならば空白で区切られたルビの数をカウント
if(tmpFlag == true) delimitCnt = rubyText.match(/ | /g).length;
// フラグがtrueで、親文字の字数と空白で区切られたルビの数が一致していればモノルビ
if( (tmpFlag == true) && (mySel[0].characters.length == delimitCnt + 1) ) {
// 空白区切りを全角に変換
rubyText = rubyText.replace(/ /g, " ");
// 全角空白で切り出す
rubyText = rubyText.split(" ");
// モノルビで親文字一字ごとにルビを付加
for(i=0; i < mySel[0].characters.length; i++) {
mySel[0].characters[i].rubyFlag = true;
mySel[0].characters[i].rubyType = 1249013859;
mySel[0].characters[i].rubyString = rubyText[i];
}
} else {
// ルビ入力の空白を削除
rubyText = rubyText.replace(/ | /g, "");
// グループルビでルビを付加
mySel[0].rubyFlag = true;
mySel[0].rubyType = 1249011570;
mySel[0].rubyString = rubyText;
}
}
// ダイアログを消去
myDialog.destroy();
} else alert("親文字を選択して下さい。");
} else alert("ドキュメントを開き、親文字を選択して下さい。");

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

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。