『シナリオ自動インデント設定』マクロ Ver1.04
脚本執筆支援ツール
(文責:高山カツヒコ)


  シナリオ書式自動整形ツールです。
  無償ですので、ご自由にお使い下さい。
  配布も自由です。
  本マクロの著作権は高山カツヒコに帰属します。
  個人的にマクロプログラムを修正して使うのは構いませんが、修正したマクロは第三者に配布しないで下さい。
  おきまりの文句で恐縮ですが、当マクロによって発生したいかなる障害も責任を負いかねますので、ソコの所はご了承ください。

文書サンプル・使用前


改行のみで書かれた文書をこのマクロで処理すると――


文書サンプル・使用後


――このように、セリフやト書きを自動的に検出し、シナリオ書式に整形してくれます。



  ご存じの通り、シナリオの書式には一般的なフォーマットがあります。

 ● 縦書き、縦20文字。(原稿用紙からの通例。 尺の目安になる)
 ● シーンを表す『柱』の頭には ”□” ないしは ”○” などの印をつけ、前を一行空ける。
 ● 舞台説明や劇行動を表す『ト書き』の行は2文字下げる。(手書きの場合は、3文字下げる人も多い)
 ● 『セリフ』は、頭に人物名を書き、セリフは「」でくくる。 2行以上にわたる時は、2行目から1文字下げる。
 ● 基本的に200字詰め原稿用紙をベースにしたフォーマットで、時間にして、原稿用紙2枚を約1分と計算する。

  書式サンプル

  一太郎ビューア無料ダウンロード

  このシナリオ書式、手書きの場合は、ト書きやセリフの字下げのために空白を空けるのに手間はかからないのですが、ワープロを使う場合は逆に、書式の整形に意外と手間がかかるものです。
  一度体裁を整えた後で、2稿、3稿と直す時の体裁の手直しも、結構手間がかかります。

  このマクロは、文書から自動的に“セリフ”、“ト書き”、“柱”を検出し、適切な字下げを自動的に行う、シナリオ書式用自動整形ツールです。
  また、半角の“!!”や“!?”に縦中横を設定し、縦書き文書中で横に寝た文字を直します。
  ペラ枚数の計算も自動で行ってくれます。
  字下げの文字数も自由に設定できるので、コピーで配るアフレコ台本を作る時にも重宝します。
  基本的に、JustSystem 社のワープロソフト、一太郎8以降で作動します。
  7太郎以前のバージョンでは正常に動作しません。



機能

  まず、このマクロの機能ですが、自動的に、

 1. 『ト書き』の全行に、字下げをインデントで設定する。(文字数が自由に設定可能)
 2. 『セリフ』の2行目以降に、字下げをインデントで設定する。(文字数が自由に設定可能)
 3. 『柱』の2行目から、字下げをインデントで設定する。
    そして、『柱』の前の行との間に1行の間を作る。
 4. “×”で始まる行を一端消去して、“  ×    ×    ×”に置き換える。
 5. 半角の “「」” を全角の “「」” に変換する。
 6. 文章頭、文章末のよけいな空白を削除する。
 7. 余計な改行コードを削除する。
 8. !! や !? などの半角文字に縦中横を設定し、文字が横に転ばないようにする。
 9. 200字原稿用紙換算の枚数を計算する。(一行の字数が20の時のみ)
 10. マクロ終了後、自動的に印刷を始めることもできます。

  このマクロとは直接関係はありませんが、一太郎やWordでは禁則処理の関係で文字数を20字に設定しておくと、19文字目で改行されてしまい作業上困る事があります。
  裏技ですが、一太郎の場合は“スタイル設定”で、用紙を“コクヨ ケ-70”にすると、原稿用紙に準じた禁則処理になり、21文字目に禁則文字をぶら下げる事ができます。
  しかし、そのままでは方眼目が邪魔ですから、“表示”メニューの中の“表示切り替え”の中の“グリッド詳細設定”で、グリッドの色を白にすると、方眼目を消す事ができます。



使用方法


  まず、処理にかける原稿の書き方ですが、

● 『柱』の文頭は、 “□” か、 “○” で始めて下さい。
  このマクロは、○や、□から始まる行を柱として認識し、処理します。
  (他の記号にしたい時は、プログラムの9行目か10行目の “□” や “○” を、好きな記号に変更して下さい)

● 『セリフ』の最後は、全角の “” で終えて下さい。
  このマクロは、文章の最後が 全角の“」”で終わるっていると、それをセリフ行と認識して処理します。
  『ト書き』を “” で終えたい時は、 “」。” とか、“」、” とか、最後に他の文字を足して “” で終わらないようにしておいて下さい。

● “  ×    ×    ×”、にしたい行は “×” で始めて下さい。
  それ以外の文では決して文頭に “×” は使わないで下さい。 “×” で始まる文は一端消去されてしまいます。
  (他の記号にしたい場合は、プログラムの11行目の “×” と、12行目の “  ×    ×    ×” を、好きな記号に変更して下さい)

● [書式(T)-文書スタイル(Y)][スタイル] で1行の字数を20字に設定しておくと、200字換算のペラ枚数を自動計算します。


  次に、操作方法ですが、

  一太郎で、自動インデントをかける文書を開いた状態で、 [ツール(L)-マクロ(Z)-実行・編集(X)][マクロ実行・編集] を開き、 [システムマクロ] の中の 『シナリオ自動インデント設定Ver1.04』 を選択して、 [実行(P)] ボタンを押します。
  後は、処理したい項目のチェックボックスの中にチェックを入れて、 [START] ボタンを押すと処理が始まります。

  処理の序盤に、縦中横に関してのみ確認を求められますので、 [OK] を押して下さい。その後は、全て自動的に進行します。
  このマクロでは、全角の ” 」” で終わる文をセリフと判断しますので、 ”」” の後ろに余計な空白が付いていると、セリフと判断されなくなります。 また、半角の”」” でもセリフと判断されません。
  ですので 『半角「」を全角「」に変換する。』 『文頭、文末の空白を整理する。』 を、チェックしておくことを推奨します。
  一太郎の“画面表示設定”で、改行記号を表示するように設定しておくと、確認がしやすくて良いでしょう。

  初稿に初めて処理をかける時は、全てのチェックボックスにチェックを入れておく事を推奨します。
  2稿以降に処理をかける時や、訂正後の再処理の時には、必要な部分にだけチェックを入れておくと、処理時間が節約できます。

  かけたインデントを解除するには、[CTR+A]で全てを選択し、“書式”メニューの中の“インデント/タブ”の中の“インデント解除”で、全て解除できます。

  もし、バグとか、不都合とか、こうすると使いやすいとか、こういう機能が欲しいとか、その他ご意見ありましたらお知らせ下さい。
  また思いついた時にでもバージョンアップします。



マクロのインストール方法

  一太郎にこのマクロを設定する手順です。
  まず、このページの下にある 「!!『シナリオ自動インデント設定』マクロ Ver1.04」 から始まるマクロプログラムを、 「!! == プログラム・エンド ==」 までの246行すべてを、マウスで選択状態にし、クリップボードにコピーします。
  (Windowsだと、右クリックでコピーを選択)

  次に、一太郎を起動します。

  [JSマクロ編集] をインストールしてある場合は、
  [ツール(T)-マクロ(Z)-実行・編集(X)][マクロ実行・編集] を開き(図 1)、そこで [システムマクロ] を選択して、 [新規(A)] ボタンを押します。


(図 1)

(図 1)


  すると [マクロ新規] が開きますので、マクロ名に、

  『シナリオ自動インデント設定Ver1.04』

  と、入力し、見出し欄に、

『 シナリオ書式のインデントを自動的に設定します。
柱の最初に"□"か"○"を。 セリフの最後には、"」"を付けてください。
"×    ×    ×"以外の行頭には、決して"×"を使わないで下さい。
また、字数を20字に設定しておくと200字換算の枚数が計算されます。』

  と、4行にわたって注意書きを入力します(図 2)。


(図 2)


  そして [OK] ボタンを押すと、 [JSマクロ編集] が起動します。
  そのマクロ編集のエディットウィンドゥにカーソルを持っていき、クリップボードから先ほどのマクロプログラムを貼り付けます。
  (Windowsでは、右クリックで貼り付け(P)を選択)
  そして、 [ファイル(F)-反映(S)] でセーブしてから、 [JSマクロ編集] を閉じます(図 3)。
  以上、終わりです。


(図 3)

(図 3)





  [JSマクロ編集] をインストールしていない一太郎の場合は、[ツール(T)-マクロ(Z)-記録開始(R)][マクロ記録] を開き、そこへカーソルをもって行き上記の要領でマクロプログラムを貼り付けます。
  そして [終了] ボタンを押すと [マクロ登録] が開くので、マクロ名を

  『シナリオ自動インデント設定Ver1.04』

  と、登録して、上記と同じ注意書きを入力します。
  そしてマクロの種類を [システム(S)] にチェックして [OK] ボタンを押せば、登録完了です。




  以後、 [ツール(T)-マクロ(Z)-実行・編集(X)][マクロ実行・編集] を開き(再び、図 1)、そこで [システムマクロ] を選択すると、 『シナリオ自動インデント設定Ver1.04』 がありますので、それを選択して [実行(P)] ボタンを押せば(図 4)、処理が開始します(図 5)。


(図 4)

(図 4)


(図 5)

(図 5)



マクロ本体



!!『シナリオ自動インデント設定』マクロ Ver1.04
!!               for 一太郎8以降(SuperPlayRite)
!!  Copyright2002/02/16 by高山カツヒコ(川崎ヒロユキ脚本研究所)


ErrorBreakMode(0,0,0)
KeyBreakMode(1)
%セリフ末 = "」"                !!セリフ文の末の文字は"」"とします。
%柱記号A = "□"                !!柱の先頭文字は"□"とします。
%柱記号B = "○"                !!柱の先頭文字は"○"とします。
%バツ記号 = "×"                !!先頭が"×"の行は、以下になおします。
%バツ行 = "   ×    ×    ×"


!!      == 使用説明 ==
CreateDialog(%m) 
LocationDialog(%m, 3, 3,54,20)
CreateStaticString(%m,"S1",13,1,"シナリオ自動インデント設定 Ver1.04")
CreateStaticString(%m,"S2",21,3,"――使用説明――")
CreateStaticString(%m,"S3",9,5," シナリオの書式を自動成形するマクロです。")
CreateStaticString(%m,"S4",11,6,"□・○で始まる文は柱として前を一行開けます。")
CreateStaticString(%m,"S5",11,7,"」 で終わる文は、セリフとして、2行目から")
CreateStaticString(%m,"S6",9,8,"インデントで文字を下げます。(文字数指定可)")
CreateStaticString(%m,"S7",11,9,"×で始まる文はいったん削除して × × ×")
CreateStaticString(%m,"S8",9,10,"にします。(× × ×以外の文頭には、決し")
CreateStaticString(%m,"S9",9,11,"て × を使わないで下さい。削除されます。)")
CreateStaticString(%m,"S10",11,12,"上記以外の文はト書きと判断してインデント")
CreateStaticString(%m,"S11",9,13,"で字下げを行います。(文字数指定可)")
CreateStaticString(%m,"S12",11,14,"!!、!?の半角文字に縦中横を設定します。")
CreateStaticString(%m,"S13",11,15,"字数を20字に設定しておくと200字換算")
CreateStaticString(%m,"S14",9,16,"の枚数が計算されます。")
CreateStaticString(%m,"S15",11,17,"自動的に印刷の開始も出来ます。")
CreateOKButton(%m,"OB",23,19," OK ")
%a = DeleteAfterShowDialog(%m)


!!      == チェックボックス(選択/解除)を選ぶダイアログ作成 ==
CreateDialog(%set) 
LocationDialog(%set, 3, 3,54,21)
CreateStaticString(%set,"SS1",13, 01, "シナリオ自動インデント設定 Ver1.04")
CreateCheckBox(%set,"CB00",10,03," 半角「」を全角「」に変換する。(推奨)",1)
CreateCheckBox(%set,"CB01E",10,04," 文末の空白を整理する。(推奨)",1)
CreateCheckBox(%set,"CB01S",10,05," 文頭の空白を整理する。",0)
CreateCheckBox(%set,"CB02",10,06," 改行コードを整理する。", 0)
CreateCheckBox(%set,"CB03",10,07," ×行を整理する。", 0)
CreateCheckBox(%set,"CB04",10,08," 2文字以下の半角英文字に縦中横を行う。",0)
CreateCheckBox(%set,"CB05",10,09," 2文字以下の半角数字/括弧に縦中横を行う。",0)
CreateCheckBox(%set,"CB06",10,10," 半角 !!・!?・?? に縦中横を行う。",1)
CreateCheckBox(%set,"CB07",10,11," インデントを設定する。",1)
CreateNumericField(%set,"INDS",14,12, 2, 0, 15, 1,1)
CreateNumericField(%set,"INDT",14,13, 2, 0, 15, 2,1)
CreateStaticString(%set,"SS3",20,12,"セリフのインデント字数")
CreateStaticString(%set,"SS4",20,13,"ト書きのインデント字数")
CreateCheckBox(%set,"CB08",10,14," 枚数計算をする。(20字の時のみ)",1)
CreateCheckBox(%set,"CB09",10,15," 印刷を開始する。", 0)
CreateStaticString(%set,"SS5",19,16,"カーソル↑↓:項目の選択")
CreateStaticString(%set,"SS6",19,17,"スペースキー :選択/解除")
CreateStaticString(%set,"SS7",10,18,"作業中断は、Ctrl+Break/Shift+Ctrl+Pause")
CreateStaticString(%set,"SS8",13,19,"(98キーボードの場合、CTRL+STOP)")
CreateOKButton(%set,"OB",23,20," START ")
%a = DeleteAfterShowDialog(%set)


!! == 半角"「" "」" を 全角"「" "」" に変換 ==
if (%a("CB00")) = 1 then
        Message("半角 「 を 全角 「 に変換します。",0)
        ReplaceStringAll("「","「", 3, 0, 0)
        Message("半角 」 を 全角 」 に変換します。",0)
        ReplaceStringAll("」","」", 3, 0, 0)
end if


!! == 縦中横の設定 ==
if (%a("CB06")) = 1 then
        Message("!! に、縦中横を設定します。",0)
        SelectStringAll("!!",3,0,0)
        SetTateChuYoko()
        Message("!? に、縦中横を設定します。",0)
        SelectStringAll("!?",3,0,0)
        SetTateChuYoko()
        Message("?! に、縦中横を設定します。",0)
        SelectStringAll("?!",3,0,0)
        SetTateChuYoko()
        Message("?? に、縦中横を設定します。",0)
        SelectStringAll("??",3,0,0)
        SetTateChuYoko()
        CancelAllRange()
end if
if (%a("CB04")) = 1 or (%a("CB05")) = 1 then
        Message("半角文字に、縦中横を設定します。",0)
        JumpStart()
        RangeMode(1)            !! 文字単位での範囲指定 
        RangeStart()            !! 範囲指定開始 
        JumpEnd()
        RangeEnd(1, 1)          !! 範囲指定終了 
        SelectSetTateChuYoko((%a("CB04")*2)+(%a("CB05")), 0, 2)
        CancelAllRange()
end if


!! == 空白の整理 ==
if (%a("CB01S")) or (%a("CB01E")) = 1 then
        Message("文頭・文末の空白を整理します。",0)
        JumpStart()
        do
                StartOfParagraph()
                if (%a("CB01S")) =1 then
                 do
                         %GC = GetCharacter()
                         if %GC = " " or %GC = " " then
                                 Delete()
                         end if
                         %GC = GetCharacter()
                 loop while %GC = " " or %GC = " "
    end if
                EndOfParagraph(1)
                %Line = GetRow()
                CursorLeft(1)
                if %Line <> GetRow() then
                        NextLine(1)
                        else
                                if (%a("CB01E")) = 1 then
                                 do
                                         %GC = GetCharacter()
                                         if %GC = " " or %GC = " " then
                                                 Delete()
                                                 CursorLeft(1)
                                         end if
                                         %GC = GetCharacter()
                                 loop while %GC = " " or %GC = " "
        end if
                end if
                NextParagraph(1)
        loop until OutOfDocument() = true
end if


!! == 改行コードの整理 ==
if (%a("CB02")) = 1 then
        Message("改行コードを整理します。",0)
        JumpEnd()
        InsertReturn(1) 
        JumpStart()
        do
                EndOfParagraph(1)
                %Line = GetRow()
                CursorLeft(1)
                if %Line <> GetRow() then
                        NextLine(1)
                        Delete()
                        CursorUp(1)
                end if
                NextParagraph(1)
        loop until OutOfDocument() = true

        JumpStart()
        NextParagraph(1)
        do
                StartOfParagraph()
                if GetCharacter() = %柱記号A or GetCharacter() = %柱記号B then
                        InsertReturn(1,1)
                end if
                NextParagraph(1)
        loop until OutOfDocument() = true
end if


!! == ×行の整理 ==
if (%a("CB03")) = 1 then
        Message("×行を整理します。",0)
        JumpStart()
        do
                if GetCharacter() = %バツ記号 then
                        Insert(%バツ行,1)
                        DeleteLine(1)
                        CursorUp(1)
                end if
                NextParagraph(1)
        loop until OutOfDocument() = true
end if


!! == インデント設定 ==
if (%a("CB07")) = 1 then
        Message("インデントを設定します。",0)
        JumpStart()
        do
                if  GetCharacter() = %柱記号A or GetCharacter() = %柱記号B then
                        Indent(1,2,0,-2,0)
                        else
                                EndOfParagraph(1)
                                %Line = GetRow()
                                CursorLeft(1)
                                if %Line <> GetRow() then
                                        NextLine(1)
                                        else
                                                if GetCharacter() = %セリフ末 then
                                                Indent(1,(%a("INDS"))*2,0,-(%a("INDS"))*2,0)
                                                else
                                                        Indent(1,(%a("INDT"))*2,0,0,0)
                                                end if
                                end if
                end if
                NextParagraph(1)
        loop until OutOfDocument() = true       
end if


!! == 枚数計算 ==
if (%a("CB08")) = 1 then
        JumpEnd()
        %layout = GetDocumentStyleLayout() 
        %LN = %layout("字数")
        if %LN = 20 then
                %LL = %layout("行数")
                %Page = GetPage()
                %Line = GetRow()
                %LAll = %Line + (%Page - 1) * %LL - 1
                Insert("    【二百字換算")
                Insert(Han(Ceil(%LAll / 10)))
                Insert("枚(")
                Insert(Han(%LAll div 10))
                Insert("枚+")
                Insert(Han(%LAll mod 10))
                Insert("行)】")
                RangeMode(2)
                RangeStart()
                RangeEnd()
                SelectSetTateChuYoko(1,0,3)
        end if
end if


!! == 印刷 ==
if (%a("CB09")) = 1 then
        PrintDocument()
end if


!! == 終了メッセージ ==
beep
Message("作業終了しました。",0)
end


!! == プログラム・エンド ==



TOP PAGE へ
TopPageへ