unicodeRange連結 forked from: forked from: unicodeRange作成

by undo forked from forked from: unicodeRange作成 (diff: 52)
連続する場合は連結するように無理矢理してみた
♥0 | Line 70 | Modified 2011-04-13 18:43:54 | MIT License
play

ActionScript3 source code

/**
 * Copyright undo ( http://wonderfl.net/user/undo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/j02W
 */

<?xml version="1.0" encoding="utf-8"?>
<!-- forked from kool_its's forked from: unicodeRange作成 -->
<!-- forked from kool_its's forked from: unicodeRange作成 -->
<!-- forked from demouth's unicodeRange作成 -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
    <mx:Script>
        <![CDATA[
            /**
             * フォント埋め込みの際に使用するunicodeRangeを作成する
             * 参考:
             * http://d.hatena.ne.jp/nitoyon/20080723/as3_embed_font
             *
             * 重複の削除 ソート追加 
             */
  private function clickHandler():void {
    Array.prototype.unique = function():Array{
        var returnArray:Array = [];
        var l:int = this.length;
        for( var i:int = 0; i < l; i++){
            var o:Object = this[i];
            if( returnArray.indexOf(o) == -1 ) returnArray.push(o);
        }
        return returnArray;
    };
    
    var arry:Array = this.ti.text.split("").unique().map(
        function(a:Object,b:int,c:Array):String{
            var st:String = a.charCodeAt(0).toString(16).toUpperCase();
            return st;
        }
    ).sort();
    
    var lst:String = '';
    var lnm:String = '';
    var ctn:Boolean = false;
    var result:String = '';
    for(var j:int = 0; j < arry.length; j++)
    {
        var ch:String = arry[j];
        if(Number('0x'+ch) != Number('0x'+lnm)+1)
        {
            if(Number('0x'+lst)+1==Number('0x'+lnm))
            {
                result += ',U+'+'0000'.substr(0,4 - lnm.length)+lnm;
            }
            else if(lnm!=lst)
            {
                result += '-U+'+'0000'.substr(0,4 - lnm.length)+lnm;
            }

            if(result.length>0)result += ',';
            result += 'U+'+'0000'.substr(0,4 - ch.length)+ch;
            lst = ch;
            ctn=false;
        }
        else
        {
            ctn=true;
        }
        lnm = ch;
    }
    
    if(ctn)
    {
            if(Number('0x'+lst)+1==Number('0x'+lnm))
            {
                result += ',U+'+'0000'.substr(0,4 - lnm.length)+lnm;
            }
            else if(lnm!=lst)
            {
                result += '-U+'+'0000'.substr(0,4 - lnm.length)+lnm;
            }
    }
    
    this.out.text = "unicodeRange='" + result + "'";

    
}
        
        ]]>
    </mx:Script>
    <mx:TextInput id="ti" width="100%" />
    <mx:Button label="↓変換↓" click="this.clickHandler()" keyDown="this.clickHandler()" />
    <mx:TextArea text="" id="out" width="100%" height="100%" />
</mx:Application>