プログラミング工房
TOP
Flex基本
開発環境 JavaScript連携 PHP連携1 PHP連携2(AMFPHP) ウィンドウ ボタンスキン 矩形スキン ローカルファイル(テキスト) F5等の対策 ローカルファイル(イメージ) ダウンロード、アップロード 1枚の画像のカラーを変更 時間のかかる計算処理 外部SWFの読込み
Flexで3D
Flexだけで3D Papervision3Dを使ってみる 3Dオブジェクト カメラ、前後判定の工夫しました 自由な形状を作成
Flexでクラス
Class1(白黒ゲームの盤) Class2(白黒ゲームのプレイヤー) Class3(プレイヤーを外部SWF)
PHP
共通関数1
Flexの作品
お問合せの説明 サンプルのソース表示の説明 分子構造の表示(PDBファイル) マンデルブロ集合の画像作成 swf参加型白黒ゲーム(Reversi) ストップウォッチ WEB素材
AIR
AIRを使ってみる ソースファイルのHTML変換を作る
etc.
マンデルブロ集合のギャラリー ジュリア集合のギャラリー wonderflを使ってみました お問合せ

AIR-ソースファイルのHTML変換を作る

■2011.05.16:作成
サンプルのソース

ソースファイルのHTML変換:preConvAIR

プログラムのソースコードをHTMLに貼り付けるには以下のような変換が必要です。
元のソースコード
    //特殊文字の変更
    strBuff = strBuff.split("&").join( "&");
    strBuff = strBuff.split(">").join(">");
    strBuff = strBuff.split("<").join("&lt;");
変換後のソースコード
<pre class="srcBox">
    //特殊文字の変更
    strBuff = strBuff.split("&amp;").join( "&amp;amp;");
    strBuff = strBuff.split("&gt;").join("&amp;gt;");
    strBuff = strBuff.split("&lt;").join("&amp;lt;");
</pre>
この変換を行うためのプログラムをAIRで作りました。(このページのソース変換にも使用)

ソースファイルのHTML変換:preConvAIR
クリップボードのソースを貼り付けて、変換後、クリップボードに戻すものです。
これは、 プログラミング工房(分室)-C#の作品-ソースファイルのHTML変換 をAirにしたものです。

クリップボード処理

クリップボードの読込みはFlexではできませんが、Airならば読み込むことができます。
また、クリップボードの画像の対応もできるようです。
//クリップボードの値をソースに==============================================
private function getClipboard():void {
    var i:int;
    // クリップボードからテキストデータを取得
    var clipboard:Clipboard = Clipboard.generalClipboard;
    var strBuff:String = 
        clipboard.getData(ClipboardFormats.TEXT_FORMAT) as String;
    //改行の変更
    var arrDat:Array = strBuff.split("\r\n");
    strBuff = arrDat.join("\n");
    //TABを指定数スペースに変換
    var intTabSp:int = nsTab.value;
    arrDat = strBuff.split("\n");
    strBuff = "";
    for (i = 0; i < arrDat.length; i++) {
        if (i != 0) { strBuff += "\n";}
        strBuff += fncTabSp(intTabSp,arrDat[i]);
    }
    txtSource.text = strBuff;
}
             :
//変換結果をクリップボードに===================================================
private function setClipboard():void {
    var strBuff:String = txtPre.text;
    if (cbLF.selected == false) {   //改行コードをWindows形式
        strBuff = strBuff.split("\n").join("\r\n");
    }
    // OS のクリップボードを取得
    var clipboard : Clipboard = Clipboard.generalClipboard;
    // クリップボードに文字列をセット
    clipboard.setData(ClipboardFormats.TEXT_FORMAT , strBuff);
}

ソースコードをHTML変換

今回は以下のような変換を行っています。
 ・TABを指定した文字数のスペースに変換(クリップボードからコピーする時)
   (このときVB6のlenB関数と同じ動きの関数を作って使用しています。)
 ・"&"、">"、"<"を"&amp;"、"&gt;"、"&lt;"に置換
 ・全体の前後に<pre ">、</pre>をつけています。
//TABを指定文字のスペースに
private function fncTabSp(intTabSp:int, strData:String):String {
    var strRet:String = "";
    var strSp8:String = "        "; //8文字のスペース
    var arrDat:Array = strData.split("\t"); //TABで分解
    if (arrDat.length >= 1) {
        strRet = arrDat[0];
        for ( var i:int = 1; i < arrDat.length; i++) {
            var le:int = fncLenB(strRet);
            le = le % intTabSp;
            le = intTabSp - le;
            strRet += strSp8.substr(0,le) +arrDat[i];
        }
    }
    return strRet;
}
//文字数(全角2文字、半角1文字)
private function fncLenB(strData:String):int {
    var baData:ByteArray = new ByteArray();
    baData.writeMultiByte(strData, "shift-jis");
    return baData.length;
}

//ソース -> HTML 変換==========================================================
private function onHenkan():void {
    var strBuff:String = txtSource.text;
    //<per>タグ
    var strPreTag:String = "\<per\>\n";
    if (txtPreTag.text != "") {
         strPreTag = "\<pre " + txtPreTag.text + "\>\n";
    }
    //特殊文字の変更
    strBuff = strBuff.split("&").join( "&amp;");
    strBuff = strBuff.split(">").join("&gt;");
    strBuff = strBuff.split("<").join("&lt;");
    //<per>  </per>を付ける
    txtPre.text = strPreTag + strBuff + "\n\</pre\>";
    //変換後クリップボードに
    if (cbClipboard.selected == true) {
        setClipboard();
    }
}

パラメータの保存

パラメータはレジストリではなく
「C:\Users\[user]\AppData\Roaming\preConvARI\Local Store\[保存ファイル名]」
に保存します。(レジストリは使えないようです。)
//初期処理
protected function initDataSet():void {
    //パラメータ初期値セット
    nsTab.value = 4;
    cbClipboard.selected = true;
    cbLF.selected = true;
    txtPreTag.text = "";

    //パラメータの読み込み
    //C:\Users\[user]\AppData\Roaming\preConvARI\Local Store
    var file:File = 
            new File(File.applicationStorageDirectory.nativePath.toString()
            +"/preConvARI.xml");
    var stream:FileStream = new FileStream();
    var strReadData:String = "";
    try {
        stream.open(file, FileMode.READ);
        strReadData = 
            stream.readMultiByte(stream.bytesAvailable, File.systemCharset);
    } catch (e:*) {
        strReadData=""
    } finally {
        stream.close();
    }
    //パラメータセット 
    if (strReadData == "") { return; }
    try {
        var xmlData:XML = new XML(strReadData);
        setParmXml(xmlData);
    } catch (e:*) {
        //何もしない
    }
}
//終了時の処理(パラメータを保存)==============================================
private function onClose():void {
    var xmlData:XML = getParmXml();
    //C:\Users\[user]\AppData\Roaming\preConvARI\Local Store
    var file:File = 
            new File(File.applicationStorageDirectory.nativePath.toString()
            +"/preConvARI.xml");
    var stream:FileStream = new FileStream();
    stream.open(file, "write");
    stream.writeUTFBytes(xmlData.toString());
    stream.close();
}

今回のプログラムではパラメータは以下のように保存
C:\Users\[user]\AppData\Roaming\preConvARI\Local Store\preConvARI.xml
<root>
  <TanToSp>4</TanToSp>
  <CbFlg>ON</CbFlg>
  <LfFlg>ON</LfFlg>
  <PreTag>class="srcBox"</PreTag>
</root>

プログラミング工房