かなtoBSE.Dr.plのソース
・かなtoBSE.Dr.pl(MacJPerl)のソースを<PRE>〜</PRE>タグで囲んで、表示しています。
|
# かなtoBSEトランスレータ
# ダブルクリックされた時の処理
unless (@ARGV){
&MacPerl'Answer(<<'mess');
このPerlスクリプトは、ドロップレット形式です。
仮名で分かち書きされた、テキストファイルを、
ドラッグ&ドロップして下さい。
〜 m(_ _)m“I am very sory.” 〜
Ver.2001.04.30. 02:08 PM
mess
exit;
}
# ▼ # 初期設定 # ▼ # --------------------------------------------------------------------------- ここから ▼
# 全角2字→BSE対応リスト(ハッシュ)作成
%zentwo = qw{
きゃ _@*_ きゅ _@%_ きょ _@[_ キャ _@*_ キュ _@%_ キョ _@[_
ぎゃ _^*_ ぎゅ _^%_ ぎょ _^[_ ギャ _^*_ ギュ _^%_ ギョ _^[_
しゃ _@:_ しゅ _@?_ しょ _@W_ シャ _@:_ シュ _@?_ ショ _@W_
じゃ _^:_ じゅ _^?_ じょ _^W_ ジャ _^:_ ジュ _^?_ ジョ _^W_
ちゃ _@O_ ちゅ _@N_ ちょ _@T_ チャ _@O_ チュ _@N_ チョ _@T_
ぢゃ _^O_ ぢゅ _^N_ ぢょ _^T_ ヂャ _^O_ ヂュ _^N_ ヂョ _^T_
にゃ _@K_ にゅ _@M_ にょ _@S_ ニャ _@K_ ニュ _@M_ ニョ _@S_
ひゃ _@U_ ひゅ _@X_ ひょ _@!_ ヒャ _@U_ ヒュ _@X_ ヒョ _@!_
びゃ _^U_ びゅ _^X_ びょ _^!_ ビャ _^U_ ビュ _^X_ ビョ _^!_
ぴゃ _.U_ ぴゅ _.X_ ぴょ _.!_ ピャ _.U_ ピュ _.X_ ピョ _.!_
みゃ _@Z_ みゅ _@Y_ みょ _@)_ ミャ _@Z_ ミュ _@Y_ ミョ _@)_
りゃ _@E_ りゅ _@D_ りょ _@J_ リャ _@E_ リュ _@D_ リョ _@J_
いぇ _@F_ しぇ _@]_ ちぇ _@Q_ イェ _@F_ シェ _@]_ チェ _@Q_
じぇ _^]_ ジェ _^]_
うぃ _5B_ うぇ _5F_ うぉ _5I_ ウィ _5B_ ウェ _5F_ ウォ _5I_
くぁ _5*_ くぃ _5<_ くぇ _5$_ くぉ _5[_ クァ _5*_ クィ _5<_ クェ _5$_ クォ _5[_
つぁ _5O_ つぃ _5R_ つぇ _5Q_ つぉ _5T_ ツァ _5O_ ツィ _5R_ ツェ _5Q_ ツォ _5T_
ふぁ _5U_ ふぃ _5V_ ふぇ _5&_ ふぉ _5!_ ファ _5U_ フィ _5V_ フェ _5&_ フォ _5!_
ぐぁ _4*_ グァ _4*_
hぁ _4U_ hぃ _4V_ hぇ _4&_ hぉ _4!_ ヴァ _4U_ ヴィ _4V_ ヴェ _4&_ ヴォ _4!_
てぃ _@R_ とぅ _5N_ てゅ _.N_ ふゅ _.+_ ティ _@R_ トゥ _5N_ テュ _.N_ フュ _.+_
でぃ _^R_ どぅ _4N_ でゅ __N_ ぶゅ __+_ ディ _^R_ ドゥ _4N_ デュ __N_ ブュ __+_
きぇ _@$_ にぇ _@P_ ひぇ _@&_ キェ _@$_ ニェ _@P_ ヒェ _@&_
ぐぃ _4<_ ぐぇ _4$_ ぐぉ _4[_ グィ _4<_ グェ _4$_ グォ _4[_
すぃ _@¥_ ずぃ _^¥_ ふょ _.>_ hょ __>_ スィ _@¥_ ズィ _^¥_ フョ _.>_ ヴョ __>_
引開 8 引閉 0 濁音 " 半濁 , 拗音 @ 拗濁 ^ 拗半 .
―― _33_ …… _111_ 波線 _--_ ←→ _[33O_
右矢 _33O_ 左矢 _[33_ 両矢 _[33O_ 空欄 __XXL_
伏◯ _"Z_ 伏△ _"(_ 伏□ _"Y_ 伏数 _"=_ 伏他 _")_
位取 ' 小数 1 小英 .
};
# 全角2字の変換キーワード(keys)を配列に用意
@twokey = keys(%zentwo);
# 全角1字→BSE対応リスト(ハッシュ)作成
%zenone = qw{
あ A い B う C え F お I ア A イ B ウ C エ F オ I
か * き < く % け $ こ [ カ * キ < ク % ケ $ コ [
が _"*_ ぎ _"<_ ぐ _"%_ げ _"$_ ご _"[_ ガ _"*_ ギ _"<_ グ _"%_ ゲ _"$_ ゴ _"[_
さ : し ¥ す ? せ ] そ W サ : シ ¥ ス ? セ ] ソ W
ざ _":_ じ _"¥_ ず _"?_ ぜ _"]_ ぞ _"W_ ザ _":_ ジ _"¥_ ズ _"?_ ゼ _"]_ ゾ _"W_
た O ち R つ N て Q と T タ O チ R ツ N テ Q ト T
だ _"O_ ぢ _"R_ づ _"N_ で _"Q_ ど _"T_ ダ _"O_ ヂ _"R_ ヅ _"N_ デ _"Q_ ド _"T_
な K に L ぬ M ね P の S ナ K ニ L ヌ M ネ P ノ S
は U ひ V ふ X へ & ほ ! ハ U ヒ V フ X ヘ & ホ !
ば _"U_ び _"V_ ぶ _"X_ べ _"&_ ぼ _"!_ バ _"U_ ビ _"V_ ブ _"X_ ベ _"&_ ボ _"!_
ぱ _,U_ ぴ _,V_ ぷ _,X_ ぺ _,&_ ぽ _,!_ パ _,U_ ピ _,V_ プ _,X_ ペ _,&_ ポ _,!_
ま Z み ( む Y め = も ) マ Z ミ ( ム Y メ = モ )
や / ゆ + よ > ヤ / ユ + ヨ >
ら E り H る D れ G ろ J ラ E リ H ル D レ G ロ J
わ ' ゐ 2 ゑ 6 を 9 ワ ' ヰ 2 ヱ 6 ヲ 9
っ 1 ー 3 ん 0 ッ 1 ー 3 ン 0
h _"C_ ヴ _"C_
ぁ _^A_ ぃ _^B_ ぅ _^C_ ぇ _^F_ ぉ _^I_ ァ _^A_ ィ _^B_ ゥ _^C_ ェ _^F_ ォ _^I_
ゃ _^/_ ゅ _^+_ ょ _^>_ ゎ _^'_ ャ _^/_ ュ _^+_ ョ _^>_ ヮ _^'_
。 4 、 ; ・ " ? 5 ! 6 「 - 」 - ( 7 ) 7 “ 8 ” 0 ゛ " ゜ , : 3 ; 2
[ _;'_ ] _,2_ 『 _;-_ 』 _-2_ < _"7_ > _71_ 《 _;7_ 》 _72_
― _33_ … _111_ 〜 _--_ → _33O_ ← _[33_
疑 5 感 6 数 # 外 ; 大 , 英 ; 伊 . 詩 _ 継 -
波 _--_ 空 __XXL_
点 1 . 1
加 5 減 9 乗 * 分 / + 5 − 9 × * / /
除 _//_ 等 _33_ 比 _"1_ 対 _"1_ ÷ _//_ = _33_
% P & & # % * *
‘ _,8_ ’ _0'_
};
# 全角1字の変換キーワード(keys)を配列に用意
@onekey = keys(%zenone);
# ギリシャ文字→BSE対応リスト(ハッシュ)作成
%girisya = qw{
Α _.A_ Β _.B_ Γ _.G_ Δ _.D_ Ε _.E_ Ζ _.Z_ Η _.:_ Θ _.?_ Ι _.I_ Κ _.K_
Λ _.L_ Μ _.M_ Ν _.N_ Ξ _.X_ Ο _.O_ Π _.P_ Ρ _.R_ Σ _.S_ Τ _.T_ Υ _.U_
Φ _.F_ Χ _.&_ Ψ _.Y_ Ω _.W_
α _@A_ β _@B_ γ _@G_ δ _@D_ ε _@E_ ζ _@Z_ η _@:_ θ _@?_ ι _@I_ κ _@K_
λ _@L_ μ _@M_ ν _@N_ ξ _@X_ ο _@O_ π _@P_ ρ _@R_ σ _@S_ τ _@T_ υ _@U_
φ _@F_ χ _@&_ ψ _@Y_ ω _@W_
};
$henkanseikou = 0; # ファイル変換が成功した回数をセットする変数
$henkansippai = 0; # ファイル変換が失敗した回数をセットする変数
$syuuryou = 0; # 問題が起きた時に、ダイアログで“終了”ボタンが押されたらセットする変数
$dropfilesu = @ARGV; # このスクリプトにドラッグされたファイルの数をセットする変数
# ▲ # 初期設定 # ▲ # --------------------------------------------------------------------------- ここまで ▲
# ▽ # ファイル変換作業 # ▽ # ------------------------------------------------------------------- ここから ▽
FILELOOP: foreach $file (@ARGV) { # ▽ ドロップされたファイルのフルパスを$fileに代入
## ▼▼ ## データ読み込み ## ▼▼ ## ----------------------------------------------------------- ここから ▼▼
## ドロップされたファイルの、タイプとクリエータを取得
($creator, $type) = &MacPerl'GetFileInfo($file);
## ドロップされたファイル($file)から、ファイル名とそこまでのパス名を取得する
$karifile = $file; #-# $fileを保存
@karifullpath = split (/:/, $karifile); #-# フルパスを配列で保存
$karifilename = pop @karifullpath; #-# ファイル名(配列の最後の要素)を取得
$karipath = join(':', @karifullpath); #-# パス名を(配列を:で繋いで)取得
#▼#####< S T D O U T : ファイルタイプをチェック >#####▼################################
if ($type ne 'TEXT'){ #
print "\n\n",'〜〜〜〜〜 Caution! 〜〜〜〜〜',"\n\n"; #
print '『',$karipath,'』に有る、',"\n"; #
print '“',$karifilename,'”は、テキストファイルでは有りません!!',"\n"; #
print ' テキストファイルをドロップして下さい。',"\n"; #
print "\n",'〜〜〜〜〜 Caution! 〜〜〜〜〜',"\n\n"; #
## ▼▼ ダイアログを表示して、残りのファイルを処理するか尋ねる #
$comment = "注意!“$karifilename”は、テキストファイルでは無かった為、処理を中止しました。\n 〜 テキストファイルをドロップして下さい。 〜\n\n";
&errdialog;
## ▲▲ #
} #
#▲#####< S T D O U T : ファイルタイプをチェック >#####▲################################
#▼#####< S T D O U T : ファイル拡張子をチェック >#####▼################################
@dotsplit = split(/\./, $karifilename);
if ($dotsplit[$#dotsplit] eq "BSE") {
print "\n\n",'〜〜〜〜〜 Caution! 〜〜〜〜〜',"\n\n"; #
print '『',$karipath,'』に有る、',"\n"; #
print '“',$karifilename,'”は、BSE形式(拡張子が.BSE)のファイルの様です。',"\n"; #
print ' かなで分かち書きされた、テキストファイルをドロップして下さい。',"\n"; #
print "\n",'〜〜〜〜〜 Caution! 〜〜〜〜〜',"\n\n"; #
## ▼▼ ダイアログを表示して、残りのファイルを処理するか尋ねる #
$comment = "注意!“$karifilename”は、BSE形式のファイルだった為、処理を中止しました。\n 〜 “かな”で分かち書きされたファイルを、ドロップして下さい。 〜\n";
&errdialog;
## ▲▲
}
#▲#####< S T D O U T : ファイル拡張子をチェック >#####▲################################
#▼#####< S T D O U T : ファイル名の長さをチェック >#####▼##############################
if ((length $karifilename) > 27){ #
++$henkansippai; #
print "\n\n",'〜〜〜〜〜 I am very sorry. 〜〜〜〜〜',"\n\n"; #
print '【警告!!】『',$karifilename,'』は、ファイル名が長過ぎます。',"\n"; #
print ' Macで扱えるファイル名の長さは、半角で 31文字までです。',"\n"; #
print ' 変換が成功した場合、ファイル名の後ろに『.BSE』を付加したファイルを、',"\n"; #
print ' 新規に作成しますので、ファイル名の後ろには、半角4文字分の余裕が必要です。',"\n"; #
print ' 例:『',$karifilename,'.BSE』(31文字を超えています)',"\n"; #
print ' ※ ファイル名『',$karifilename,'』を、半角27文字以下に修正して下さい。',"\n"; #
print ' (全角1文字は、半角2文字分になります。)',"\n\n"; #
print '***** 『',$karifilename,'』の変換・整形を中止しました。 *****',"\n"; #
print '〜〜〜〜〜 I am very sorry. 〜〜〜〜〜',"\n\n"; #
## ▼▼ ダイアログを表示して、残りのファイルを処理するか尋ねる #
$comment = "注意!“$karifilename”\nは、ファイル名が長過ぎる為、処理を中止しました。\n※変換成功時に“ファイル名.BSE”で保存しますので、\nファイル名は半角で、27文字以下にして下さい。\n";
&errdialog;
## ▲▲ #
} #
#▲#####< S T D O U T : ファイル名の長さをチェック >#####▲##############################
## ▼▼ドロップされたファイル($file)を、ファイルハンドルINでオープン
@mototext = (); #-# ファイルから読み込んだテキストが、行単位で入る配列
open (IN, $file) or die "ファイルを開く事が出来ませんでした。:$!";
while() { #-# ▽▽ 行単位でファイルの終わり迄繰り返す
chomp; ##-# $_の行末に有る改行文字(\n)を削除
if ($_ =~ /\r/){$_ =~ tr/\r//d;} ##-# テキストがDOS(LFCR)の時、行頭の\r(CR)を削除
$_ =~ s/[ \s]/ /g; ##-# $_の全角のスペースと空白文字を、全て半角スペースに変換する
push @mototext, $_; ##-# 配列@mototextに読み込んだテキストを追加
} #-# △△
close (IN); ## INでオープンされた元ファイルを閉じる
## ▲▲
#-# BSE形式ファイルのヘッダ情報作成
$headtext = ' ' x 504; #-# ヘッダ変数の宣言と、504個の半角スペースの代入
$pagesuu = '1'; #-# 変換した時の総ページ数。初期値は1
$gyoumoji = '32'; #-# 1行の文字数を設定(標準(B5片面)は32文字)
$pagegyou = '22'; #-# 1頁の行数を設定(標準(B5片面)は頁行を入れて22行)
#-# カスタム『書式』設定 ####################▼ここから
print "\n〜〜〜〜〜 Welcome to かな to BSE 〜〜〜〜〜\n";
print "『$karipath』の\n『$karifilename』の変換を行います。\n\n";
print "『$karifilename』の変換後の書式を設定して下さい。\n";
do {
do {
$gyoumoji = &MacPerl'Ask("質問1・1行の文字数を入力して下さい。 (10 〜 65 文字)","32");
} until $gyoumoji >= 10 and $gyoumoji <= 65;
$gyoumoji = abs($gyoumoji);
print "質問1・1行 $gyoumoji文字 に設定されました。\n";
do {
$pagegyou = &MacPerl'Ask("質問2・1ページの行数を入力して下さい。 (5 〜 99 行)","22");
} until $pagegyou >= 5 and $pagegyou <= 99;
$pagegyou = abs($pagegyou);
print "質問2・1ページ $pagegyou行 に設定されました。\n";
$pageprint = &MacPerl'Answer("質問3-1・ページ番号を付けますか?
注)ページ番号は1〜 9999ページまで付ける
事が出来ますが、9999ページを超えると、1
ページに戻ります。","はい","いいえ");
if ($pageprint) {
do {
$kaisipage = &MacPerl'Ask("質問3-2・開始ページ番号を入力して下さい。 (1 〜 9999 ページ)","1");
} until $kaisipage >= 1 and $kaisipage <= 9999;
$kaisipage = abs($kaisipage);
$donopageprint = &MacPerl'Answer("質問3-3・どのページにページ番号を付けますか?
注)ページ番号は通常、片面印刷の場合、全ページに
両面印刷の場合には、奇数ページに付けます。","全ページ","奇数ページ","偶数ページ");
if ($donopageprint == 0) {$q32ans = "偶数ページに付ける";}
elsif ($donopageprint == 1) {$q32ans = "奇数ページに付ける";}
elsif ($donopageprint == 2) {$q32ans = "全ページに付ける";}
$pagecomment = "ページ番号 $kaisipage ページから$q32ans";
print "質問3・ページ番号 $kaisipage ページから$q32ansに設定されました。\n";
} else {
$pagecomment = "ページ番号を付けない";
print "質問3・ページ番号を付けないに設定されました。\n";
}
$settei = &MacPerl'Answer("【確認】 以下の様に設定されました。
この設定で作業を開始してもよろしいですか?\n
・1行 $gyoumoji 文字 ・1ページ $pagegyou 行
・$pagecomment","はい","やり直す");
} until $settei;
print "決定された設定: 1行 $gyoumoji文字 1ページ $pagegyou行
$pagecomment で作業します。\n\n";
$pagegyou = sprintf("%0.2d", $pagegyou); #-# 頁数の桁を2桁に整形する(ex.05)
#-# カスタム『書式』設定 ####################▲ここまで
#-# その他の変数の宣言と初期化
@bsetext = (); #-# BSE文字列に変換されたテキストが、行単位で入る配列
@bseerrtext = (); #-# BSE文字列に変換中に起きたエラーメッセージが入る配列
@seikeigyou = (); #-# BSE形式に整形されたテキストが、行単位で入る配列
#-# カスタム設定 ####################▼ここから▼#####################
if ($pageprint) { #▼-# 頁行を設定する時
$bsesuuji = $kaisipage; #-# BSE形式に変換する為に頁行を代入
$bsesuuji =~ tr/[1-9]0/[A-I]J/; #-# ページを数値からBSE文字列に変換する
if ($donopageprint == 0) { #▽-# 『偶数ページ』のみに付ける場合
unless ($kaisipage % 2) { ##▼# $kaisipageを2で割った余りが0なら
push @seikeigyou, ' ' x ($gyoumoji - 5) . '#' . $bsesuuji; ## 最初の頁行の$bsesuujiを配列@seikeigyouに追加
} else { ##▲▼# 余りが出たら
push @seikeigyou, ''; ## 最初の頁行として、空行を配列@seikeigyouに追加
} ##▲#
} elsif ($donopageprint == 1) { #△▽-# 『奇数ページ』のみに付ける場合
if ($kaisipage % 2) { ##▼# $kaisipageを2で割った余りが1なら
push @seikeigyou, ' ' x ($gyoumoji - 5) . '#' . $bsesuuji; ## 最初の頁行の$bsesuujiを配列@seikeigyouに追加
} else { ##▲▼# 余りが出なかったら
push @seikeigyou, ''; #-# 最初の頁行として、空行を配列@seikeigyouに追加
} ##▲#
} elsif ($donopageprint == 2) { #△▽-# 『全てのページ』に付ける場合
push @seikeigyou, ' ' x ($gyoumoji - 5) . '#' . $bsesuuji; #-# 最初の頁行の$bsesuujiを配列@seikeigyouに追加
} #△-#
++$kaisipage; #-# 頁行を1増やす
} else { #▲▼-# 頁行を設定しない時
push @seikeigyou, ''; #-# 最初の頁行として、空行を配列@seikeigyouに追加
} #▲-#
#-# カスタム設定 ####################▲ここまで▲#####################
$keikokupage = '150'; #-# @seikeigyouがこの頁数に達したら警告する(BSE形式では150頁を超えると問題が有る)
$gyousuu = 1; #-# @seikeigyouの行数処理に使う変数の、初期値を設定
$counter = 0; #-# @mototext,@bsetextの処理で、各配列の何要素目かを示すのに使う
#▼#####< S T D O U T : 文字数から予想されるページ数を割り出し警告する >#####▼#####################################
my ($motomojisuu,$mototextcounter,$errkeikoku,$yosougyousuu); # 変数の宣言 #
OVERKEIKOKU: foreach (@mototext){ # ▽ @mototextが有る間、ループ # ▽
++$mototextcounter; ## 行数カウンタに1足す ##
$motomojisuu = $_ =~ s/./$&/g; ## 文字数/行を変数に入れる ##
$motomojisuu = int($motomojisuu * 1.1); ## BSEもじに変換後増えるので係数を掛ける ##
if ($motomojisuu <= $gyoumoji){ ## ▼▼ 文字数が$gyoumoji以下の時、 ## ▼▼
$yosougyousuu += 1; #-# $yosougyousuuに1を足す #-#
} ## ▲▲ ## ▲▲
elsif ($motomojisuu > $gyoumoji){ ## ▼▼ 文字数が$gyoumojiを超える時、 ## ▼▼
$yosougyousuu += int($motomojisuu / $gyoumoji); #-# 割った値の整数値を加算 #-#
if ($motomojisuu % $gyoumoji){ $yosougyousuu += 1;} #-# 割った時余りが出たら1を足す #-#
} ## ▲▲ ## ▲▲
if (($yosougyousuu / ($pagegyou - 1)) >= $keikokupage){ ## ▼▼ 変換後の予想頁数が基準を超えたら ## ▼▼
$errkeikoku = 1; #-# 警告用の変数をセット #-#
last OVERKEIKOKU ; #-# 直ちに、このループを抜ける #-#
} ## ▲▲ ## ▲▲
} # △ # △
if ($errkeikoku){ # ▼ エラーが起きた時、 # ▼
++$henkansippai; # エラー回数カウンタに1を足す #
print "\n\n",'〜〜〜〜〜 I am very sorry. 〜〜〜〜〜',"\n\n"; ## ##
print '【警告!!】『',$karifilename,'』をBSE形式に変換・整形すると、',"\n"; ## ##
print 'およそ ',$mototextcounter,'行目で、変換後のファイルが ',$keikokupage,'頁を超える事が予想されますので、',"\n"; ##
print '『',$karifilename,'』の ',$mototextcounter,'行目より、数行手前でファイルの分割をして下さい。',"\n\n"; ##
print '***** 『',$karifilename,'』の変換・整形を中止しました。 *****',"\n"; ## ##
print '〜〜〜〜〜 I am very sorry. 〜〜〜〜〜',"\n\n"; ## ##
## ▼▼ ダイアログを表示して、残りのファイルを処理するか尋ねる ##
$comment = "注意!“$karifilename”を、BSE形式に変換すると、$mototextcounter行辺りで、$keikokupage頁を超える事が予想されます。\n$mototextcounter行より、数行前でファイルを分割して下さい。\n";
&errdialog;
## ▲▲ ##
} # ▲ # ▲
#▲#####< S T D O U T : 文字数から予想されるページ数を割り出し警告する >#####▲#####################################
## ▲▲ ## データ読み込み ## ▲▲ ## ----------------------------------------------------------- ここまで ▲▲
## ▼▼ ## てきすと to BSE文字列への変換作業 ## ▼▼ ## ---------------------------------------- ここから ▼▼
#▼#####< S T D O U T >#####▼##############################################
print "***** 『$karifilename』をBSE文字列へデータ変換処理中です… *****\n"; #
#▲#####< S T D O U T >#####▲##############################################
foreach $text(@mototext){ # ▽ @mototextの要素(行)数だけ、ループ
#▼####< S T D O U T >#####▼##############################
++$counter; # 変換中の行数が入る変数
$counter = sprintf("%0.3d", $counter); # 行数の書式を3桁にする
if ($text =~ /^\s+$/){ # ▼ $textに空白文字しか無い時、
print "行$counter には、空白文字しか有りませんでした。\n"; ##
$text = ''; ## $textを空行にする
} # ▲
elsif ($text =~ /^$/){ # $textが空行の時、
print "行$counter には、文字が有りませんでした。\n";} #
if ($text){ $text =~ s/\s+$//; } # $textが真の時、行末の空白文字を削除する
my $countb = 0; # 文節の初期値を設定
#▲#####< S T D O U T >#####▲#############################
if ($text) { # ▼ 読み込んだ行($text)が、真の時、以下を実行
#▼####< S T D O U T >#####▼#
print "行",$counter,':'; #
#▲####< S T D O U T >#####▲#
$text =~ s/ +|[^ ]+/$&斬/g; ## 半角スペースと文字列の間に“斬”を付加する
@gyou = split(/斬/, $text); ## 1行を、“斬”(文節)で区切り、配列に入れる
foreach $bunsetu (@gyou) { ## ▼▼ 文節の数だけループする
my $motobunsetu = $bunsetu; ## エラー処理の為、$bunsetuを$motobunsetuに保存
if ($bunsetu =~ /[^ ]+/){ #-# ▼-▼ 文節(文字)が有る(空白以外の)時、以下を実行
#-## ▼-▼▼ 1文節中の、英・数字・英記号を変換する --------------------------------------- # ▼-▼▼
if ($bunsetu =~ /%/){$bunsetu =~ tr/%/P/;} # 半角%をPに変換する
if ($bunsetu =~ /[a-z]/){$bunsetu =~ tr/a-z/A-Z/;} # 半角英小文字の変換(大文字はそのまま)
if ($bunsetu =~ /[A-Za-z]/){$bunsetu =~ tr/A-Za-z/A-ZA-Z/;} # 全角英字の変換
if ($bunsetu =~ /[0-9|\d]/){$bunsetu =~ tr/[1-9]0[1-9]0/[A-I]J[A-I]J/;} # 数字を変換する
if ($bunsetu =~ /^\"(.+)\"$/){$bunsetu =~ s/^\"(.+)\"$/8${1}0/;} # 半角の"で囲まれた文字列の変換 ex. "abc" 8abc0
if ($bunsetu =~ /^\"(.+)$/){$bunsetu =~ s/^\"(.+)$/8$1/;} # 半角の"で始まる、文字列の変換 ex. "abc 8abc
if ($bunsetu =~ /(.+)\"$/){$bunsetu =~ s/(.+)\"$/${1}0/;} # 半角の"で終わる、文字列の変換 ex. abc" abc0
if ($bunsetu =~ /[\!\#\(\)\,\.\:\;\?\+]/){$bunsetu =~ tr/[\,\;\:\.\+\!\(\)\?\#]/[123456778%]/;} # 半角記号を変換する
if ($bunsetu =~ /\[/){$bunsetu =~ s/\[/_\,7_/g;} # 半角[を変換する
if ($bunsetu =~ /\]/){$bunsetu =~ s/\]/_7\'_/g;} # 半角]を変換する
if ($bunsetu =~ /\=/){$bunsetu =~ s/\=/_33_/g;} # 半角=を変換する
#-## ▲-▲▲ 1文節中の、英・数字・英記号を変換する --------------------------------------- # ▲-▲▲
#-## ▼-▼▼ 1文節中の、全角文字を変換する ------------------------- # ▼-▼▼
my $henkanzumi = $bunsetu; # 文節を変数に入れ、BSE文字を削除する
$henkanzumi =~ s/[A-Z0-9\!\"\#\$\%\&\'\(\)\-\=\^\@\[\;\+\:\*\]\,\<\.\>\/\?_¥_]//g;
if ($henkanzumi){ # もし、文字が残っていたら、全角2字の変換を実行
foreach $check (@twokey) {$bunsetu =~ s/$check/$zentwo{$check}/g;} # 全角2文字を変換
}
$henkanzumi = $bunsetu; # 文節を変数に入れ、BSE文字を削除する
$henkanzumi =~ s/[A-Z0-9\!\"\#\$\%\&\'\(\)\-\=\^\@\[\;\+\:\*\]\,\<\.\>\/\?_¥_]//g;
if ($henkanzumi){ # もし、文字が残っていたら、全角1字の変換を実行
foreach $check (@onekey) {$bunsetu =~ s/$check/$zenone{$check}/g;} # 全角1文字を変換
}
if ($bunsetu =~ /[Α-ω]/){$bunsetu =~ s/[Α-ω]/$girisya{$&}/g;} # ギリシャ文字を変換
#-## ▲-▲▲ 1文節中の、全角文字を変換する ------------------------- # ▲-▲▲
} #-# ▲-▲ 文節(文字)が有る時 終わり
#▼####< S T D O U T >#####▼#####################################
if ($bunsetu =~ /[^ ]+/){ # ▼ 文節(スペース以外の文字)が有る時、
++$countb; # 文節の変数に1を足す
$countb = sprintf("%0.2d", $countb); # 文節の書式を2桁にする
my $mihenkan = $bunsetu; ## 文節を変数に入れ、BSE文字を削除する
$mihenkan =~ s/[A-Z0-9\!\"\#\$\%\&\'\(\)\-\=\^\@\[\;\+\:\*\]\,\<\.\>\/\?_¥_]//g;
if ($mihenkan){ ## ▼▼ それでも文字が残っていたら、その文字と警告を表示
if ($countb > 1 and ($countb % 10) == 1){ print "\n",' ';} ##-# 11文節毎に改行を入れる
print $countb,'=× '; #-# 文節の元テキストの変換が失敗している時、×を表示
my $errmojiretu = ' ・'.$counter.'行目:文節 '.$countb.'『'.$motobunsetu.'』の『'.$mihenkan.'』が変換できません。';
push @bseerrtext, $errmojiretu; #-# エラーの内容を、配列に追加保存
} ## ▲▲
else { ## ▼▼
if ($countb > 1 and ($countb % 10) == 1){ print "\n",' ';} ##-# 11文節毎に改行を入れる
print $countb,'=◯ '; ## 文節の元テキストの変換が成功している時、◯を表示
} ## ▲▲
} # ▲
#▲####< S T D O U T >#####▲#####################################
} ## ▲▲ 文節の数だけループ 終わり
#▼####< S T D O U T >#####▼#
print "\n"; #
#▲####< S T D O U T >#####▲#
$text = join('', @gyou); # 文節ごとに分けた1行を繋いで元に戻す
push @bsetext, $text; # 元に戻した1行($text)を配列@bsetextに追加
} # ▲ 読み込んだ行($text)が、真の時の処理 終わり
else { push @bsetext, $text;} # 読み込んだ行($text)が、偽(空白行)の時の処理
} # △ @mototextの要素(行)数だけ、ループ 終わり
#▼####< S T D O U T : BSE文字列に変換出来ない文字が有った時、警告 >#####▼##############
if (@bseerrtext){ #
#
++$henkansippai; # エラー回数カウンタに1を足す
print "\n",'【警告!!】『',$karifilename,'』の中に変換出来ない文字が見付かりました。',"\n"; ##
foreach (@bseerrtext){ print $_,"\n"; } ##
print ' ※『',$karifilename,'』を確認後、修正して下さい。',"\n\n"; ##
print '***** BSE文字列へのデータ変換を中止しました。 *****',"\n"; ##
print '〜〜〜〜〜 I am very sorry. 〜〜〜〜〜',"\n\n"; ##
## ▼▼ ダイアログを表示して、残りのファイルを処理するか尋ねる ##
$comment = "注意!“$karifilename”の中に、変換出来ない文字が見付かりました。\n“MacJPerl”ウィンドウに表示された、エラー箇所を参照して、ファイルを修正して下さい。\n";
&errdialog;
## ▲▲ ##
} else { #
print '***** BSE文字列へのデータ変換は、全て問題無く終わりました。 *****',"\n\n"; #
} #
#▲####< S T D O U T : BSE文字列に変換出来ない文字が有った時、警告 >#####▲##############
undef @mototext; # @mototextをクリア
undef $counter; # $counterをクリア
## ▲▲ ## てきすと to BSE文字列への変換作業 ## ▲▲ ## ---------------------------------------- ここまで ▲▲
## ▼▼ ## BSE形式(行数/頁、文字数/行)に整形 ## ▼▼ ## -------------------------------------- ここから ▼▼
#▼####< S T D O U T >##################################▼#
print '***** BSE形式でデータを整形中です………… *****',"\n"; #
#▲####< S T D O U T >##################################▲#
foreach $text(@bsetext){ # ▽ @bsetextが有る間、ループ
++$counter; # 変換中の行数が入る変数($keikokupage頁以上になった時の元ファイルの何行目に当たるかを知る為)
#▼####< S T D O U T >#####▼################
my $karicounter = $counter; # $counterを$karicounterに保存
$karicounter = sprintf("%0.3d", $karicounter); # 行数の桁を3桁に整形する(ex.001)
print '行',$karicounter; # 変換中の行の表示
#▲####< S T D O U T >#####▲################
#####---▼▼▼---### 1行が$gyoumoji文字数以下の時の変換作業 ###---▼▼▼---#####
my $karitext = $text; # $textを保存
$karitext =~ tr/_//d; # $karitextから全角_アンダーバーを削除
$karitext =~ tr/¥/\\/; # 全角¥を半角\に変換する
if (($karitext =~ s/./$&/g) <= $gyoumoji){ # ▼ BSE変換後の文字列$karitextが、$gyoumoji文字以下の時、
++$gyousuu; ## 行数に1を足す
if ($gyousuu <= $pagegyou){ ## ▼▼ 行数が$pagegyou以下の時、
push @seikeigyou, $karitext; ##-# 文字列$karitextを配列@seikeigyouに追加
} ## ▲▲
elsif ($gyousuu > $pagegyou){ ## ▼▼ 行数が$pagegyouを超えた時、
$gyousuu = 1; #-# 行数をリセット
++$pagesuu; #-# ページ数に1を足す
#▼####< S T D O U T : 頁数が$keikokupage頁を超えた時、警告 >#####▼
&overkeikoku;
#▲####< S T D O U T : 頁数が$keikokupage頁を超えた時、警告 >#####▲
#-# カスタム設定 ####################▼ここから▼#####################
&custompageadd;
#-# カスタム設定 ####################▲ここまで▲#####################
++$gyousuu; #-# 行数に1を足す
push @seikeigyou, $karitext; #-# 文字列を配列@seikeigyouに追加
} ## ▲▲
} # ▲
#####---▲▲▲---### 1行が$gyoumoji文字数以下の時の変換作業 ###---▲▲▲---#####
#####---▼▼▼---### 1行が$gyoumoji文字数より上の時の変換作業 ###---▼▼▼---#####
elsif (($karitext =~ s/./$&/g) > $gyoumoji) { # ▼ 変換後の文字列$karitextが、$gyoumojiを超える時、
if ($text =~ / / and $text =~ /_/){ # ▼ $textに半角“スペース”,全角“_”の両方が有る時、
$text =~ s/ +|[^ ]+/$&斬/g; ## $textに“[半角スペースかそれ以外の文字列]”に“斬”を追加
$text =~ s/斬$//; ## 行末の“斬”を削除する
$text =~ tr/_/区/; ## 全角“_”を“区”に変換
$text =~ tr/区//s; ## 連続する“区”を1つにまとめる
$text =~ s/区$//; ## 行末の“区”を削除する
$text =~ tr{!"#$%&'()=^@[];+:*,<.>/?_}{!”#$%&’()=^@「」;+:*,<.>/?_}; ## BSEをBSEに変換
$text =~ tr/-/‐/; ## 半角BSEを、全角BSEに変換
$text =~ tr/A-Z0-9/A-Z0-9/; ## 半角BSEを、全角BSEに変換
$text =~ tr/ / /; ## 半角スペースを、全角スペースに変換
my @kariover = split(/斬/, $text); ## “斬”で$textを分割し、@karioverに入れる
foreach (@kariover){ ## ▽▽ @karioverが有る間、ループ
if ($_ =~ /区/){ #-# ▼-▼“区”が含まれている時、
my $kariovertext = $_; #-## $kariovertextに値を保存
$kariovertext =~ tr/区//d; #-## $kariovertextから“区”を削除
if (($kariovertext =~ s/./$&/) > $gyoumoji){ #-## ▼-▼▼ $kariovertextが$gyoumojiより大きい時、
my @kugiri = split(/区/, $_); #-#-# $_を“区”で区切って、配列@kugiriに入れる
push @overgyou, @kugiri; #-#-# @overgyouに@kugiriを追加
} #-## ▲-▲▲
elsif (($kariovertext =~ s/./$&/) <= $gyoumoji){ #-## ▼-▼▼ $kariovertextが$gyoumoji以下の時、
push @overgyou, $kariovertext; #-#-# @overgyouに$kariovertextを追加
} #-## ▲-▲▲
} #-# ▲-▲
else { #-# ▼-▼ “区”が含まれていない時、
push @overgyou, $_; #-## @overgyouに$_を追加
} #-# ▲-▲
} ## △△ ループ 終わり
} # ▲
elsif ($text =~ / / and $text !~ /_/){ # ▼ $textに半角“スペース”が有り、全角“_”が無い時、
$text =~ s/ +|[^ ]+/$&斬/g; ## $textに“[半角スペースかそれ以外の文字列]”に“斬”を付加
$text =~ s/斬$//; ## 行末の斬を削除する
$text =~ tr{!"#$%&'()=^@[];+:*,<.>/?_}{!”#$%&’()=^@「」;+:*,<.>/?_}; ## BSEをBSEに変換
$text =~ tr/-/‐/; ## 半角BSEを、全角BSEに変換
$text =~ tr/A-Z0-9/A-Z0-9/; ## 半角BSEを、全角BSEに変換
$text =~ tr/ / /; ## 半角スペースを、全角スペースに変換
@overgyou = split(/斬/, $text); ## “斬”で$textを分割し、@overgyouに入れる
} # ▲
elsif ($text !~ / / and $text =~ /_/){ # ▼ $textに半角“スペース”が無く、全角“_”が有る時、
$text =~ tr/_/斬/; ## 全角“_”を“斬”に変換
$text =~ tr/斬//s; ## 連続する“斬”を1つにまとめる
$text =~ s/斬$//; ## 行末の“斬”を削除する
$text =~ tr{!"#$%&'()=^@[];+:*,<.>/?_}{!”#$%&’()=^@「」;+:*,<.>/?_}; ## BSEをBSEに変換
$text =~ tr/-/‐/; ## 半角BSEを、全角BSEに変換
$text =~ tr/A-Z0-9/A-Z0-9/; ## 半角BSEを、全角BSEに変換
@overgyou = split(/斬/, $text); ## “斬”で$textを分割し、@overgyouに入れる
} # ▲
elsif ($text !~ / / and $text !~ /_/){ # ▼ $textに半角“スペース”,全角“_”の両方が無い時、
$text =~ tr{!"#$%&'()=^@[];+:*,<.>/?_}{!”#$%&’()=^@「」;+:*,<.>/?_}; ## BSEをBSEに変換
$text =~ tr/-/‐/; ## 半角BSEを、全角BSEに変換
$text =~ tr/A-Z0-9/A-Z0-9/; ## 半角BSEを、全角BSEに変換
push @overgyou, $text; ## $textを@overgyouに入れる
} # ▲
OVERLOOP: while (@overgyou){ # ▽@overgyouに値の有る間、ループ
$mae = shift @overgyou; ## $maeに@overgyouから要素を1つ取り込む
if (@henkangyou){ ## ▼▼@henkangyouは真?(2行目以降?)
if ($mae =~ /^ +/){ $mae =~ s/^ +//; } #-# $maeの行頭空白が有れば削除する
unless ($mae){ next OVERLOOP;} #-# 空白を削除して$maeが無くなった時、OVERLOOPへ抜ける
} ## ▲▲
if (($mae =~ s/./$&/g) >= $gyoumoji){ ## ▼▼$maeが$gyoumoji以上の時
while (($mae =~ s/./$&/g) >= $gyoumoji){ #-# ▽-▽$maeが$gyoumoji以上の間、ループ
my $karioki = substr($mae, 0, ($gyoumoji)*2); #-## $maeから$gyoumoji×2バイト分を取り出し、
push @henkangyou, $karioki; #-## 取り出した文字列$kariokiを@henkangyouに追加
$mae =~ s/^$karioki//; #-## $maeから取り出した文字列$kariokiを$maeから削除
} #-# △-△
} ## ▲▲
if ($mae =~ /./){ ## ▼▼$maeに文字が有る時、
if (@overgyou){ #-# ▼-▼@overgyouは真?
$ato = shift @overgyou; #-# $atoに@overgyouから要素を1つ取り込む
if (($ato =~ s/./$&/g) > $gyoumoji){ #-## ▼-▼▼$atoが$gyoumojiより大きい時
$mae .= $ato; #-## $maeに$atoを連結
my $kariplus = substr($mae, 0, ($gyoumoji)*2); #-## $maeから$gyoumoji×2バイト分を取り出し、
push @henkangyou, $kariplus; #-## 連結した文字列$kariplusを@henkangyouに追加
$mae =~ s/^$kariplus//; #-## $maeから、取り出した文字列を$maeから削除
unshift @overgyou, $mae; #-## 残りの文字列を@overgyouの先頭に戻す
undef $mae; #-## $maeをクリアする
next OVERLOOP; #-## OVERLOOPへ抜ける
} #-## ▲-▲▲
elsif (($ato =~ s/./$&/g) == $gyoumoji){ #-## ▼-▼▼ $atoが$gyoumojiと同じ長さの時
if (@henkangyou){ #-#-# ▼▼@henkangyouは真?(2行目以降か?)
if ($mae =~ /^ +/){ $mae =~ s/^ +//; } #-#-## $maeの行頭空白が有れば削除する
} #-#-# ▲▲
$mae =~ s/ +$//; #-#-# $maeの行末の空白を削除
push @henkangyou, $mae; #-#-# $maeを@henkangyouに追加
push @henkangyou, $ato; #-#-# $atoを@henkangyouに追加
undef $mae; #-#-# $maeをクリアする
undef $ato; #-#-# $atoをクリアする
next OVERLOOP; #-#-# OVERLOOPへ抜ける
} #-## ▲-▲▲
elsif (($ato =~ s/./$&/g) < $gyoumoji) { #-## ▼-▼▼$atoが$gyoumojiより小さい時
$renketu = $mae.$ato; #-## $maeと$atoを仮に連結
if (($renketu =~ s/./$&/g) > $gyoumoji){ #-#-# ▼-▼-▼仮連結文字列が$gyoumojiより大きい時
if ($mae =~ / +$/){ $mae =~ s/ +$//; } #-#-## $maeに行末空白が有れば削除する
push @henkangyou, $mae; #-#-## $maeを@henkangyouに追加
undef $mae; #-#-## $maeをクリアする
unshift @overgyou, $ato; #-#-## $atoを@overgyouの先頭に入れる
undef $ato; #-#-## $atoをクリアする
next OVERLOOP; #-#-## OVERLOOPへ抜ける
} #-#-# ▲-▲-▲
elsif (($renketu =~ s/./$&/g) == $gyoumoji){ #-#-# ▼-▼-▼仮連結文字列が$gyoumojiと同じ長さの時、
$mae .= $ato; #-#-## $maeに$atoを連結
if ($mae =~ / +$/){ $mae =~ s/ +$//; } #-#-## $maeに行末空白が有れば削除する
push @henkangyou, $mae; #-#-## $maeを@henkangyouに追加
undef $mae; #-#-## $maeをクリアする
next OVERLOOP; #-#-## OVERLOOPへ抜ける
} #-#-# ▲-▲-▲
elsif (($renketu =~ s/./$&/g) < $gyoumoji){ #-#-# ▼-▼-▼仮連結文字列が$gyoumojiより小さい時、
$mae .= $ato; #-#-## $maeに$atoを連結
unshift @overgyou, $mae; #-#-## 連結した$maeを@overgyouの先頭に戻す
undef $mae; #-#-## $maeをクリアする
next OVERLOOP; #-#-## OVERLOOPへ抜ける
} #-#-# ▲-▲-▲
} #-## ▲-▲▲
} #-# ▲-▲
else { #-# ▼-▼@overgyouの中身が無くなっている時、
if (@henkangyou){ #-## ▼-▼▼@henkangyouは真?(2行目以降?)
$mae =~ s/^ +//; #-#-# $maeの行頭空白を削除
$mae =~ s/ +$//; #-#-# $maeの行末空白を削除
push @henkangyou, $mae; #-#-# $maeを@henkangyouに追加
undef $mae; #-#-# $maeをクリアする
} #-## ▲-▲▲
else { #-## ▼-▼▼
$mae =~ s/ +$//; #-#-# $maeの行末空白を削除
push @henkangyou, $mae; #-#-# $maeを@henkangyouに追加
undef $mae; #-#-# $maeをクリアする
} #-## ▲-▲▲
} #-# ▲-▲
} ## ▲▲
} # △ @overgyouがある間、ループ
foreach $hentxt(@henkangyou){ # ▽ @henkangyouがある間、ループ
++$gyousuu; # 行数に1を足す
if ($gyousuu <= $pagegyou){ ## ▼▼ 行数が$pagegyou以下の時、
$hentxt =~ tr{!”#$%&’()=^@「」;+:*,<.>/?_}{!"#$%&'()=^@[];+:*,<.>/?_}; #-# BSEをBSEに変換
$hentxt =~ tr/‐/-/; #-# 全角のBSEを半角のBSEに変換
$hentxt =~ tr/¥/\\/; #-# 全角のBSEを半角のBSEに変換
$hentxt =~ tr/A-Z0-9/A-Z0-9/; #-# 全角のBSEを半角のBSEに変換
$hentxt =~ tr/ / /; #-# 全角スペースを半角スペースに変換
push @seikeigyou, $hentxt; #-# 文字列を配列@seikeigyouに追加
} ## ▲▲
elsif ($gyousuu > $pagegyou){ ## ▼▼ 行数が$pagegyouを超えた時、
$gyousuu = 1; #-# 行数をリセット
++$pagesuu; #-# ページ数に1を足す
#▼####< S T D O U T : 頁数が$keikokupage頁を超えた時、警告 >#####▼
&overkeikoku;
#▲####< S T D O U T : 頁数が$keikokupage頁を超えた時、警告 >#####▲
#-# カスタム設定 ####################▼ここから▼#####################
&custompageadd;
#-# カスタム設定 ####################▲ここまで▲#####################
++$gyousuu; #-# 行数に1を足す
$hentxt =~ tr{!”#$%&’()=^@「」;+:*,<.>/?_}{!"#$%&'()=^@[];+:*,<.>/?_}; #-# BSEをBSEに変換
$hentxt =~ tr/‐/-/; #-# 全角のBSEを半角のBSEに変換
$hentxt =~ tr/¥/\\/; #-# 全角のBSEを半角のBSEに変換
$hentxt =~ tr/A-Z0-9/A-Z0-9/; #-# 全角のBSEを半角のBSEに変換
$hentxt =~ tr/ / /; #-# 全角スペースを半角スペースに変換
push @seikeigyou, $hentxt; #-# 文字列を配列@seikeigyouに追加
} ## ▲▲
} # △ @henkangyouがある間、ループ
undef @henkangyou; # @henkangyouをクリアする
} # ▲
#####---▲▲▲---### 1行が$gyoumoji文字数より上の時の変換作業 ###---▲▲▲---#####
#▼####< S T D O U T >#####▼#########################
print '=◯ '; # ここまで処理が来ていると言う事は、処理が成功しているので◯
if ($counter > 1 and ($counter % 5) == 0){print "\n";} # 5行毎に改行を入れる
#▲####< S T D O U T >#####▲#########################
} # △ @bsetextがある間、ループ
#▼####< S T D O U T >#####▼##################################################################
print "\n",' 『',$karifilename,'』は整形後、',$pagesuu,'頁と ',$gyousuu,'行になりました。',"\n"; #
print '***** BSE形式でデータを整形 が終了しました *****',"\n\n"; #
#▲####< S T D O U T >#####▲##################################################################
undef @bsetext; # @bsetextをクリア
undef $counter; # $counterをクリア
## ▲▲ ## BSE形式(行数/頁、文字数/行)に整形 ## ▲▲ ## -------------------------------------- ここまで ▲▲
## ▼▼ ## データ書き込み ## ▼▼ ## ----------------------------------------------------------- ここから ▼▼
#▼####< S T D O U T : 出力形式の選択・クリエータの設定 >#####▼##########################
print '〜〜〜〜〜 “',$karifilename,'.BSE”の出力形式を選択して下さい… 〜〜〜〜〜',"\n\n"; #
print "【Mac】:Mac(改行コード:CR)形式で保存します。\n"; #
print " “$karifilename”を作成した時と同じソフトで編集できます。\n"; #
print " “$karifilename”のクリエータは、“$creator”です。\n"; #
print "【DOS】:MS-DOS, Windows形式(改行コード:CRLF)で保存します。\n"; #
print ' MS-DOS, Windowsのワープロ・テキストエディタで編集できます。',"\n"; #
print ' Macで開くと、行の先頭に一つ余分な記号が表示されます。',"\n"; #
print " “$karifilename",'.BSE”のクリエータ“',"$creator”を、Macの“PC Exchange”\n"; #
print ' が使う、“dosa”に変更します。(書類のアイコンに“PC”が付いた絵になります)',"\n"; #
print "【Jedit3】:Mac(改行コード:CR)形式で、“Jedit3”で編集できる様に保存します。\n"; #
print ' “Jedit3”のインストールされたMacで、ダブルクリックすると“Jedit3”が起動します。',"\n"; #
print " “$karifilename",'.BSE”をクリエータ“JED3”で保存します。',"\n\n"; #
## ▼▼ ダイアログを表示して、ファイルの保存形式を尋ねる #
my $kaigyoucode = &MacPerl'Answer(
"“$karifilename.BSE”の保存形式を選んで下さい。
【Mac】:Mac形式(CR),“$creator”で保存。
【DOS】:MS-DOS, Windows形式(CRLF)で保存。
【Jedit3】:エディタを“Jedit3”にして保存。",
"Mac","Dos","Jedit3");
## ▲▲ #
print '“',$karifilename.BSE,'”を、',"\n"; #
if ($kaigyoucode == 2){ #
print "Mac(改行コード:CR)形式で保存します。\n\n"; ##
} #
elsif ($kaigyoucode == 1){ #
print "MS-DOS, Windows形式(改行コード:LFCR)で保存します。\n"; ##
print "“$karifilename”のクリエータは、元“$creator”でした。\n\n"; ##
$creator = 'dosa'; ##
} #
elsif ($kaigyoucode == 0){ #
print "Mac(改行コード:CR)のJedit3形式で保存します。\n"; ##
print "※“Jedit3”を使うと、他の様々なテキスト形式への、変換が可能です。\n"; ##
print "“$karifilename”のクリエータは、元“$creator”でした。\n\n"; ##
$creator = 'JED3'; ##
} #
print '***** ファイルの出力中です………… *****',"\n"; #
#▲####< S T D O U T : 出力形式の選択・クリエータの設定 >#####▲##########################
## ▼▼ 変換先ファイル($file.BSE)を、ファイルハンドルOUT(保存ファイル)でオープン
open (OUT, ">$file.BSE") or die "ファイルを保存する事が出来ません。:$!";
#-# 変換先ファイル($file.BSE)のタイプとクリエータをセット
&MacPerl'SetFileInfo("$creator", "$type", "$file.BSE");
#-# 変換先ファイルにヘッダ情報と整形されたテキストを書き込む
$pagesuu = sprintf("%0.4d", $pagesuu); #-# 頁数の桁を4桁に整形する(ex.0012)
$headtext .= $pagesuu.$gyoumoji.$pagegyou; #-# 総頁数、文字数、行数をヘッダ変数に追加する
if ($kaigyoucode == 1){ #-# ▼-▼ MS-DOS(LFCR)形式が選ばれた時、
print OUT $headtext,"\n\r"; ##-# ファイルにヘッダ情報を書き込む
foreach (@seikeigyou){ print OUT $_,"\n\r";} ##-# BSE形式に変換・整形されたテキストを書き込む
} #-# ▲-▲
else { #-# ▼-▼ Mac,Jedit形式が選ばれた時、
print OUT $headtext,"\n"; ##-# ファイルにヘッダ情報を書き込む
foreach (@seikeigyou){ print OUT $_,"\n";} ##-# BSE形式に変換・整形されたテキストを書き込む
} #-# ▲-▲
close (OUT); ## OUTでオープンした保存ファイルを閉じる
## ▲▲
#▼####< S T D O U T >#####▼###################################
print '『',$karipath,"』の中に\n"; #
print 'ファイル名『',$karifilename,'.BSE』で保存しました。',"\n"; #
print '***** ファイルの出力が終了しました *****',"\n"; #
print "〜〜〜〜〜 Thank you. 〜〜〜〜〜\n\n"; #
#▲####< S T D O U T >#####▲###################################
## ▲▲ ## データ書き込み ## ▲▲ ## ----------------------------------------------------------- ここまで ▲▲
++$henkanseikou; # 変換成功回数カウンタに1を足す
--$dropfilesu; # ドロップされたファイル数を1減らす
} # △ foreach $file (@ARGV) このループ 終わり
# △ # ファイル変換作業 # △ # ------------------------------------------------------------------- ここまで △
if ($henkanseikou > 0){$seikoumoji = '成功:'.$henkanseikou.' ';}
else {$seikoumoji = '成功:なし';}
if ($henkansippai > 0){$sippaimoji = '失敗:'.$henkansippai.' ';}
else {$sippaimoji = '失敗:なし';}
if ($syuuryou == 0){ # ▼ 自然終了又は、“続ける”ボタンで処理を続けていた時、
if ($henkanseikou > 0){ ## ▼▼ 変換が1回でも成功した事が有る時、
if ($henkansippai < 1){ #-# ▼-▼ 失敗が無かった時、
&MacPerl'Answer(
"ドロップされた、ファイルの変換は、全て成功しました。
───『かなtoBSE』を終わります。
〜 \(^o^)/“Thank you.” 〜
","終了");
exit;
} #-# ▲-▲ 失敗が無かった時、
else { #-# ▼-▼ 失敗が有った時、
&MacPerl'Answer(
"ドロップされた、ファイルの変換が、全て終わりました。 処理結果“$seikoumoji,$sippaimoji”
───『かなtoBSE』を終わります。
〜 (;_;)/“I am sorry.” 〜
","終了");
exit;
} #-# ▲-▲ 失敗が有った時
} ## ▲▲ 変換が1回でも成功した時
else { ## ▼▼ 変換が1回も成功し無かった時、
&MacPerl'Answer(
"ドロップされた、ファイルの変換は、全て失敗に終わりました。
───『かなtoBSE』を終わります。
〜 (ToT)/“I am very sorry.” 〜
","終了");
exit;
} ## ▲▲ 変換が1回も成功し無かった時、
} # ▲ 自然終了叉は、“続ける”ボタンで処理を続けていた時、
else { # ▼ 終了ボタンが押されてループを終了した時、
if ($henkanseikou > 0){ ## ▼▼ 変換が1回でも成功した事が有る時、
&MacPerl'Answer(
"“終了”ボタンが押されたので、処理を終わります。 処理結果“$seikoumoji,$sippaimoji”
───『かなtoBSE』を終わります。
〜 (;_;)/“I am sorry.” 〜
","終了");
exit;
} ## ▲▲ 変換が1回でも成功した事が有る時、
else { ## ▼▼ 変換が全く成功しなかった時、
&MacPerl'Answer(
"“終了”ボタンが押されたので、処理を終わります。 ファイルの変換は、全て失敗しました。
───『かなtoBSE』を終わります。
〜 (ToT)/“I am very sorry.” 〜
","終了");
exit
} ## ▲▲ 変換が全く成功しなかった時、
} # ▲ 終了ボタンが押されてループを終了した時
##-## サブルーチン ##-##
#▼####< S T D O U T : 頁数が$keikokupage頁を超えた時、警告 >#####▼
sub overkeikoku { #
if ($pagesuu >= $keikokupage){ # ▼
++$henkansippai; ## エラー回数カウンタに1を足す
print "\n\n",'【警告!!】『',$karifilename,'』の ',$counter,'行目を整形中に、',$keikokupage,'頁を超えました。',"\n"; ##
print ' BSE形式では、',$keikokupage,'頁を超えるファイルで、問題が起きる可能性が有ります。',"\n"; ##
print ' 『',$karifilename,'』を ',$counter,'行目より前で、分割して下さい。',"\n\n"; ##
print '***** BSE形式でデータを整形を中止しました。 *****',"\n"; ##
print '〜〜〜〜〜 I am very sorry. 〜〜〜〜〜',"\n\n"; ##
## ▼▼ ダイアログを表示して、残りのファイルを処理するか尋ねる ##
$comment = "注意!“$karifilename”の$counter行目を整形中に、$keikokupage頁を超えました。 $counter行目より数行手前で、分割して下さい。\n※ BSE形式では、$keikokupage頁以降が欠落する事が有ります。";
&errdialog; ##
## ▲▲ ##
} # ▲
} #
#▲####< S T D O U T : 頁数が$keikokupage頁を超えた時、警告 >#####▲
#▼-# カスタム設定 ページ数追加 #-##################################▼#
sub custompageadd { #▼ここから▼#
if ($pageprint) { #▼-# 頁行を設定する時
if ($kaisipage > 9999) { #▽-# 頁行が9999頁を超えた時
$kaisipage = 1; #-# 頁行を1に戻す
++$pagesuu; #-# ページ数に1を足して白紙の0ページを作る
for ($i = 1; $i <= $pagegyou; $i++) { #▼-# 1ページの行数$pagegyouの分
push @seikeigyou, ''; ## 空行を追加する
} #▲-#
} #△-#
$bsesuuji = $kaisipage; #-# BSE形式に変換する為に頁行を代入
$bsesuuji =~ tr/[1-9]0/[A-I]J/; #-# ページを数値からBSE文字列に変換する
if ($donopageprint == 0) { #▽-# 『偶数ページ』のみに付ける場合
unless ($kaisipage % 2) { ##▼# $kaisipageを2で割った余りが0なら偶数ページなので
push @seikeigyou, ' ' x ($gyoumoji - 5) . '#' . $bsesuuji; ## 頁行の$bsesuujiを配列@seikeigyouに追加
} else { ##▲▼# 余りが出たら
push @seikeigyou, ''; ## 頁行として、空行を配列@seikeigyouに追加
} ##▲#
} elsif ($donopageprint == 1) { #△▽-# 『奇数ページ』のみに付ける場合
if ($kaisipage % 2) { ##▼# $kaisipageを2で割った余りが1なら奇数ページなので
push @seikeigyou, ' ' x ($gyoumoji - 5) . '#' . $bsesuuji; ## 頁行の$bsesuujiを配列@seikeigyouに追加
} else { ##▲▼# 余りが出なかったら
push @seikeigyou, ''; #-# 頁行として、空行を配列@seikeigyouに追加
} ##▲#
} elsif ($donopageprint == 2) { #△▽-# 『全てのページ』に付ける場合
push @seikeigyou, ' ' x ($gyoumoji - 5) . '#' . $bsesuuji; #-# 頁行の$bsesuujiを配列@seikeigyouに追加
} #△-#
++$kaisipage; #-# 頁行を1増やす
} else { #▲▼-# 頁行を設定しない時
push @seikeigyou, ''; #-# 頁行として、空行を配列@seikeigyouに追加
} #▲-#
} #▲ここまで▲#
#▲-# カスタム設定 ページ数追加 #-##################################▲#
#▼▼# エラー時にダイアログを表示して、残りのファイルを処理するか尋ねる #▼▼#
sub errdialog { #
--$dropfilesu; # ドロップされたファイル数から1を引く
if ($dropfilesu >= 1) { # 1を引いてもまだファイルが残っていたら、
my $selectbuton = &MacPerl'Answer("$comment"." ―― 残りのファイルの処理を、続けますか?","続ける","終了");
if ($selectbuton == 1){next FILELOOP;} ## “続ける”を押した時、$selectbuton = 1
else {$syuuryou = 1; last FILELOOP;} ## “終了”を押した時、 $selectbuton = 0
} else { # ファイルが残っていなかったら、
&MacPerl'Answer($comment,"終了"); ## 終了する
last FILELOOP; ##
} #
} #
#▲▲# エラー時にダイアログを表示して、残りのファイルを処理するか尋ねる #▲▲#
|