●文章の整形および禁則処理スクリプト
 Ver:1.0
 形式:JavaScript
 言語:JavaScript
 環境:IE6
 備考:他のブラウザでも動くかと思います。たぶん。


・履歴
 ・6/10新規 Ver:1.0
   文章の整形および簡単な禁則処理を行うスクリプトです。
   現在、私が書いている小説の1行の文字数は35文字。しかし、
  縦書きSVGでは30文字にする予定。いちいち手で直してられる
  か、ということで作ってみました。
   スクリプトは、画面からコピペしてください。ソースからコピペ
  すると、比較条件がエンティティになってしまいます。


・使用方法
 ・fnFixString( strContents, intLineLength )
   名称:文章整形関数
   機能:引数で渡された文字列を整形する。
   引数:strContents   − 整形対象の文字列
      intLineLength − 1行の文字数
   戻値:整形済み文字列
   備考:禁則処理について、以下の処理は実行されません。
       ・行末禁止文字
       ・二文字以上連続する行頭禁止文字
       ・分離禁止文字
      また、行頭が全角空白の場合は段落と判断し、改行を行います。


 ・isHeadEx( strTarget )
   名称:行末禁止文字判断関数
   機能:引数で渡された文字が行末禁止文字かどうかを判断する。
   引数:strTarget − 判断対象の文字
   戻値:True	− 対象は行末禁止文字である。
      False	− 対象は行末禁止文字ではない。
   備考:行末禁止文字は以下の通りです。
      "(","「","『","〔","{","【"


 ・isFootEx( strTarget )
   名称:行頭禁止文字判断関数
   機能:引数で渡された文字が行頭禁止文字かどうかを判断する。
   引数:strTarget − 判断対象の文字
   戻値:True	− 対象は行頭禁止文字である。
      False	− 対象は行頭禁止文字ではない。
   備考:行頭禁止文字は以下の通りです。
      ",","、","。",".","・",":",";","?","!","―","…","ー","−",
      "→","←","↑","↓",
      ")","」","』","〕","}","】",
      "々","ん",
      "ぁ","ぃ","ぅ","ぇ","ぉ","っ","ゃ","ゅ","ょ",
      "ァ","ィ","ゥ","ェ","ォ","ッ","ャ","ュ","ョ"


・スクリプト
  // 文章整形関数
  function fnFixString( strContents, intLineLength ){
    var aryString = new Array(intLineLength);
    var strReturn = "";

    for( var cntLine=0,cntAll=0 ; cntAll<strContents.length ; cntAll++ ){
      // 現在の対象が改行の場合。
      if( strContents.substr(cntAll,1) == "\n" ){
        // 次の文字が改行および全角空白の場合は、改行する。
        if( strContents.substr(cntAll+1,1) == "\n"
             || strContents.substr(cntAll+1,1) == " " ){
          strReturn += aryString.join("") + "\n";
          for( var cntAry=0 ; cntAry<intLineLength ; cntAry++ ){
            aryString[cntAry] = "";
          }
          cntLine = 0;
        // 次の文字が行末禁止文字の場合は、改行する。
        }else if( isHeadEx(strContents.substr(cntAll+1,1)) == true ){
          strReturn += aryString.join("");
          if( strReturn.substr(strReturn.length-1,1) != "\n" ){
            strReturn += "\n";
          }
          for( var cntAry=0 ; cntAry<intLineLength ; cntAry++ ){
            aryString[cntAry] = "";
          }
          cntLine = 0;
        }
      // 現在の対象が改行ではない場合。
      }else if( strContents.substr(cntAll,1) != "\n" ){
        aryString[cntLine] = strContents.substr(cntAll,1);
        cntLine++;
        // 1行の最大文字数に達した場合、改行する。
        if( cntLine == intLineLength ){
          strReturn += aryString.join("");
          // 次の文字が行頭禁止文字の場合、ぶらさがり処理を行う。
          if( isFootEx(strContents.substr(cntAll+1,1)) == true ){
            strReturn += strContents.substr(cntAll+1,1);
            cntAll++;
          }
          strReturn += "\n";
          for( var cntAry=0 ; cntAry<intLineLength ; cntAry++ ){
            aryString[cntAry] = "";
          }
          cntLine = 0;
        }
      }
    }
    strReturn += aryString.join("");

    return strReturn;
  }

  // 行末禁止文字判断関数
  function isHeadEx( strTarget ){
    var aryKinsi = new Array("(","「","『","〔","{","【");
    var flgReturn = false;

    for( var cnt=0 ; cnt<aryKinsi.length ; cnt++ ){
      if( strTarget == aryKinsi[cnt] ){
        flgReturn = true;
        break;
      }
    }

    return flgReturn;
  }

  // 行頭禁止文字判断関数
  function isFootEx( strTarget ){
    var aryKinsi = new Array(
  ",","、","。",".","・",":",";","?","!","―","…","ー","−",
  "→","←","↑","↓",
  ")","」","』","〕","}","】",
  "々","ん",
  "ぁ","ぃ","ぅ","ぇ","ぉ","っ","ゃ","ゅ","ょ",
  "ァ","ィ","ゥ","ェ","ォ","ッ","ャ","ュ","ョ");
    var flgReturn = false;

    for( var cnt=0 ; cnt<aryKinsi.length ; cnt++ ){
      if( strTarget == aryKinsi[cnt] ){
        flgReturn = true;
        break;
      }
    }

    return flgReturn;
  }
【 Back 】