▶ 実 行
▶ 実行
クリア
!『https://n3s.nadesi.com/plain/mojisyuPlus.nako3』を取り込む。//サロゲートペア文字や異体字セレクタを判定。 # 禁則処理 ## 禁則文字一覧 変数 禁則文字一覧={ // ・行頭禁則 「終わり括弧類」:「』」&『」)〕]}〉》】⦆〙〗»〟’”』&『)]}」』, 「句読点類」:『。.、,』&『、。,.』, 「ハイフン類」:『‐〜゠–』&『--』, 「区切り約物」:『!?』&『‼⁇⁈⁉』&『!?』, 「中点類」:『・:;』&『・:;』, 「繰返し記号」:『ヽヾゝゞ々〻』, 「長音記号」:『ー』&『ー』, 「小書き仮名」:『ぁぃぅぇぉァィゥェォっゃゅょゎゕゖッャュョヮヵヶ』&『ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ』&『ァィゥェォャュョッ』, // ・行末禁則 「始め括弧類」:「『」&『「(〔[{〈《【⦅〘〖«〝‘“』&『([{「』, // ・分割禁止 「分離禁止文字」:『—…‥〳〴〵』&『―』, 「前置省略記号」:『¥$£#€№』, 「後置省略記号」:『°′″℃¢%‰㏋ℓ㌃㌍㌔㌘㌢㌣㌦㌧㌫㌶㌻㍉㍊㍍㍑㍗㎎㎏㎜㎝㎞㎡㏄』, // ・仮名と分離禁止 「濁点半濁点」:『゛゜』&『゙゚』 } ## 禁則文字指定 変数 行頭禁則文字=禁則文字一覧["終わり括弧類"]&禁則文字一覧["句読点類"]&禁則文字一覧["区切り約物"]&禁則文字一覧["中点類"]&禁則文字一覧["繰返し記号"]&禁則文字一覧["長音記号"]&禁則文字一覧["濁点半濁点"]&「—…―~」&異体字セレクタ一覧取得。 変数 行末禁則文字=禁則文字一覧["始め括弧類"]。 ## 一字追い込み # 次行行頭が行頭禁則文字ならば、一字だけ追い込む。 ●(対象行の行を)一字追い込み処理 次行行頭=対象行の1だけ文字左部分。 此行末尾=行の1だけ文字右部分。 もし、(((行頭禁則文字の0から次行行頭を文字検索)>0)かつ((対象行の文字数)≠0))ならば、: 行=行&(対象行の1から1を文字抜き出す)。 対象行=対象行の1から1を文字削除。 [対象行,行]で戻る。 ここまで。 ## 追い出し禁則 # 行末禁則(この行の末尾が行末禁則文字ならば、それを次の行に送る) # 行頭禁則(次行行頭が行頭禁則文字ならば、この行の末尾を次の行に送る) # 禁則文字が連続する間、再帰で処理する。 ●(対象行の行を行文字数で)追い出し禁則処理 次行行頭=対象行の1だけ文字左部分。 此行末尾=行の1だけ文字右部分。 # 行の全てが同じジャンルの禁則文字だったら処理しない。 もし、((行を「[{行頭禁則文字の『]』を『\]』に置換}]{波カッコ}{行文字数},{波カッコ閉じ}」で正規表現マッチ)=NULL)かつ _ ((行を「[{行末禁則文字}]{波カッコ}{行文字数},{波カッコ閉じ}」で正規表現マッチ)=NULL)ならば、: もし、(((行の文字数)≧行文字数)かつ((行末禁則文字の0から此行末尾を文字検索)>0))または _ (((行頭禁則文字の0から次行行頭を文字検索)>0)かつ((対象行の文字数)≠0))ならば、: 対象行=(行の(行の文字数)から1を文字抜き出す)&対象行。 行=行の(行の文字数)から1を文字削除。 対象行の行を行文字数-1で追い出し禁則処理。# 再帰 違えば、: [対象行,行]で戻る。 違えば、: 空で戻る。# 禁則文字が行文字数以上連続した場合 ここまで。 # 行揃え ●(原稿を行文字数で)行揃え 変数 対象行=空。変数 行=空。変数 変換済み原稿=空。 変数 次行行頭=空。変数 此行末尾=空。 原稿=原稿を改行で区切る。# 本文の行単位で処理する。 原稿を反復: 対象行=対象。 もし、対象行=空ならば、 # 空行の場合。 変換済み原稿=変換済み原稿に空を一行追加。 違えば、 (対象行の文字数)≠0の間: F=いいえ。 抜き出し文字数=対象行から行文字数で抜き出し文字数カウント。 行=対象行の1から抜き出し文字数を文字抜き出す。 対象行=対象行の1から抜き出し文字数を文字削除。 # 一字追い込み 対象行の行を一字追い込み処理。 対象行,行=それ。 # 追い出し禁則 対象行の行を行文字数で追い出し禁則処理。 もし、それ==空でなければ、: 対象行,行=それ。 変換済み原稿=変換済み原稿に行を一行追加。 ここまで。 変換済み原稿で戻る。 ここまで。 ●(対象行から字数で抜き出し文字数を)抜き出し文字数カウント もし、抜き出し文字数=空ならば、抜き出し文字数=字数。 行=対象行の1から字数を文字抜き出す。 対象行=対象行の1から字数を文字削除。 特殊文字個数=(行の上位サロゲート個数)+(行の異体字セレクタ個数)+(行の半角文字個数)/2。 抜き出し文字数=抜き出し文字数+特殊文字個数。 もし、特殊文字個数=0ならば、 抜き出し文字数で戻る。 違えば、もし、特殊文字個数<1ならば、 抜き出し文字数+1で戻る。 違えば、 対象行から特殊文字個数で抜き出し文字数を抜き出し文字数カウント。 ここまで。 ここまで。 # 頁分割 //行揃え済みの原稿を行数ごとに分割する。 //「#改ページ」だけの行があれば、そこで分割する。(#は全角) ※なでしこのコードにも改ページを埋め込めるよう、改ページ記号を変更。 ●(原稿を頁行数で)頁分割 変数 頁データ=空配列。変数 C=0。 原稿=原稿を改行で区切る。 最終行=(原稿の配列要素数)-1。 もし、原稿[最終行]=空ならば、原稿の最終行を配列削除。 (原稿の配列要素数)>0の間 原稿から「#改ページ」を配列検索。 もし、(それ≧0)かつ(それ≦頁行数)ならば、 頁データ[C]=原稿の0からそれを配列取出す。 原稿の0を配列削除。 違えば、 頁データ[C]=原稿の0から頁行数を配列取出す。 ここまで。 C=C+1。 ここまで。 頁データで戻る。 ここまで。 # おまけ ●(原稿の)青空記号削除 原稿の「[#改.*?]」を「#改ページ」に正規表現置換。# とりあえず改丁、改段も全て改ページ扱い。 それの「[#.*?]」を空に正規表現置換。# それ以外は全て削除。 ここまで。 ●(原稿の)青空ルビ削除 原稿の「《.*?》」を空に正規表現置換。 それの「|」を空に正規表現置換。 ここまで。 #------------------------------------------------------ # 以下はテスト もし、プラグイン名=「メイン」ならば、 テストデータ=『あいうえお」 あいうえお」」」 かきくけこ。 かきくけこ。。。 さしすせそ- さしすせそ-- たちつてと! たちつてと!! なにぬねの・ なにぬねの・・・ はひふへほ々 はひふへほ々々 まみむめもー まみむめもーー みゃみゅみょ やゆよよ…… らりるれ「ろ わをん💧💧💧 わをん❤️❤️❤️ パピプペッポ ABCDEFGHIJKLMNOPQRSTUVWXYZ 。。。。。。。。。。』 文字数エディタ=5のエディタ作成。「で」のラベル作成。 変換ボタン=「行揃え」のボタン作成。改行作成。 テキスト=テストデータのテキストエリア作成。改行作成。 表示エリア=空のテキストエリア作成。 文字数エディタの「幅」に「50px」をDOMスタイル設定。 テキストの「幅」に「90%」をDOMスタイル設定。 表示エリアの「幅」に「90%」をDOMスタイル設定。 テキストの「高さ」に「350px」をDOMスタイル設定。 表示エリアの「高さ」に「400px」をDOMスタイル設定。 ●行揃え実行 原稿=テキストのテキスト取得。 字数=文字数エディタのテキスト取得して、それを整数変換。 原稿を字数で行揃え。それを表示エリアへテキスト設定。 ここまで。 行揃え実行。 変換ボタンをクリックした時には、行揃え実行。。。 ここまで。