Main routin

色々とやっているわけですが、フォントのマッピングテーブルってかなり大きいんです。そりゃそうです。Romanなフォントはともかく、CJKなんて普通にグリフが2万超えていたりしますから。容量も数MB程度となります。ここで問題になるのはテーブルを展開する為の処理にESTKがどの程度頑張れるかです。結果から言うとまったく頑張れません。これは以前BASE64をエンコード処理させた時と同じ要因です。まあ、インタプリタにこの処理は無謀だよねって事です。
しかし、お手軽なのでどうしてもESTKを使いたいわけです。ですから自ずと妥協点を探す事になります。それが、今回のメインルーチンの構成です。
基本的に全てのテーブルをバラバラにして処理自体はこのテーブルに対して行います。時間がかかるのはこのバラバラ処理。大きなテーブルを展開するのにはそこそこの処理時間を要するのですが、この重たい処理を一度だけ我慢します。
次回以降は保存されたばらばらのテーブルに対するアクセスだけで処理します。

fntParserRqrdTbl.jpg

さて上のサンプルは必須テーブルを展開したものです。この様に各テーブルを参照しながらフォントに関する詳細を見て理解していくのが当面の目標となります。
とりあえずコードを見てみましょう。

#include “readBin.jsx”
#include “readPost.jsx”
#include “readOS2.jsx”
#include “readName.jsx”
#include “readCmap.jsx”
#include “readMaxp.jsx”
#include “readHead.jsx”
#include “readHhea.jsx”
#include “readHmtx.jsx”

var platform = [‘Unicode’,’Macintosh’,’ISO’,’Windows’,’Custom’];
var enc = new Array();
var enc = [[‘Unicode 1.0′,’Unicode 1.1′,’ISO/IEC 10646s’,’Unicode 2.0′,’Unicode 2.0′,’Unicode VS’,’Unicode full’],
        [‘Roman’,’Japanese’,’Chinese (Traditional)’,’Korean’,’Arabic’,’Hebrew’,’Greek’,’Russian’,
        ‘RSymbol’,’Devanagari’,’Gurmukhi’,’Gujarati’,’Oriya’,’Bengali’,’Tamil’,’Telugu’,’Kannada’,
        ‘Malayalam’,’Sinhalese’,’Burmese’,’Khmer’,’Thai’,’Laotian’,’Georgian’,’Armenian’,
        ‘Chinese (Simplified)’,’Tibetan’,’Mongolian’,’Geez’,’Slavic’,’Vietnamese’,’Sindhi’,’Uninterpreted’],
        [‘ASCII’,’ISO10646′,’ISO8859-1′],
        [‘Symbol’,’Unicode BMP (UCS-2)’,’ShiftJIS’,’PRC’,’Big5′,’Wansung’,’Johab’,
        ‘Reserved’,’Reserved’,’Reserved’,’Unicode UCS-4′]];
var MacLangID = [‘English’,’French’,’German’,’Italian’,’Dutch’,’Swedish’,’Spanish’,’Danish’,’Portuguese’,
        ‘Norwegian’,’Hebrew’,’Japanese’,’Arabic’,’Finnish’,’Greek’,’Icelandic’,’Maltese’,’Turkish’,’Croatian’,
        ‘Chinese (Traditional)’,’Urdu’,’Hindi’,’Thai’,’Korean’,’Lithuanian’,’Polish’,’Hungarian’,’Estonian’,
        ‘Latvian’,’Sami’,’Faroese’,’Farsi/Persian’,’Russian’,’Chinese (Simplified)’,’Flemish’,’Irish Gaelic’,
        ‘Albanian’,’Romanian’,’Czech’,’Slovak’,’Slovenian’,’Yiddish’,’Serbian’,’Macedonian’,’Bulgarian’,
        ‘Ukrainian’,’Byelorussian’,’Uzbek’,’Kazakh’,’Azerbaijani (Cyrillic script)’,’Azerbaijani (Arabic script)’,
        ‘Armenian’,’Georgian’,’Moldavian’,’Kirghiz’,’Tajiki’,’Turkmen’,’Mongolian (Mongolian script)’,
        ‘Mongolian (Cyrillic script)’,’Pashto’,’Kurdish’,’Kashmiri’,’Sindhi’,’Tibetan’,’Nepali’,’Sanskrit’,
        ‘Marathi’,’Bengali’,’Assamese’,’Gujarati’,’Punjabi’,’Oriya’,’Malayalam’,’Kannada’,’Tamil’,’Telugu’,
        ‘Sinhalese’,’Burmese’,’Khmer’,’Lao’,’Vietnamese’,’Indonesian’,’Tagalong’,’Malay (Roman script)’,
        ‘Malay (Arabic script)’,’Amharic’,’Tigrinya’,’Galla’,’Somali’,’Swahili’,’Kinyarwanda/Ruanda’,’Rundi’,
        ‘Nyanja/Chewa’,’Malagasy’,’Esperanto’,
        ”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,
        ‘Welsh’,’Basque’,’Catalan’,’Latin’,’Quenchua’,’Guarani’,’Aymara’,’Tatar’,’Uighur’,’Dzongkha’,
        ‘Javanese (Roman script)’,’Sundanese (Roman script)’,’Galician’,’Afrikaans’,’Breton’,’Inuktitut’,
        ‘Scottish Gaelic’,’Manx Gaelic’,’Irish Gaelic (with dot above)’,’Tongan’,’Greek (polytonic)’,
        ‘Greenlandic’,’Azerbaijani (Roman script)’];
var winLngID = [
        [0X436,’Afrikaans’,’South Africa’],
        [0X041C,’Albanian’,’Albania’],
        [0X484,’Alsatian’,’France’],
        [0X045E,’Amharic’,’Ethiopia’],
        [0X1401,’Arabic’,’Algeria’],
        [0X3C01,’Arabic’,’Bahrain’],
        [0X0C01,’Arabic’,’Egypt’],
        [0X801,’Arabic’,’Iraq’],
        [0X2C01,’Arabic’,’Jordan’],
        [0X3401,’Arabic’,’Kuwait’],
        [0X3001,’Arabic’,’Lebanon’],
        [0X1001,’Arabic’,’Libya’],
        [0X1801,’Arabic’,’Morocco’],
        [0X2001,’Arabic’,’Oman’],
        [0X4001,’Arabic’,’Qatar’],
        [0X401,’Arabic’,’Saudi Arabia’],
        [0X2801,’Arabic’,’Syria’],
        [0X1C01,’Arabic’,’Tunisia’],
        [0X3801,’Arabic’,’U.A.E.’],
        [0X2401,’Arabic’,’Yemen’],
        [0X042B,’Armenian’,’Armenia’],
        [0X044D,’Assamese’,’India’],
        [0X082C,’Azeri (Cyrillic)’,’Azerbaijan’],
        [0X042C,’Azeri (Latin)’,’Azerbaijan’],
        [0X046D,’Bashkir’,’Russia’],
        [0X042D,’Basque’,’Basque’],
        [0X423,’Belarusian’,’Belarus’],
        [0X845,’Bengali’,’Bangladesh’],
        [0X445,’Bengali’,’India’],
        [0X201A,’Bosnian (Cyrillic)’,’Bosnia and Herzegovina’],
        [0X141A,’Bosnian (Latin)’,’Bosnia and Herzegovina’],
        [0X047E,’Breton’,’France’],
        [0X402,’Bulgarian’,’Bulgaria’],
        [0X403,’Catalan’,’Catalan’],
        [0X0C04,’Chinese’,’Hong Kong S.A.R.’],
        [0X1404,’Chinese’,’Macao S.A.R.’],
        [0X804,’Chinese’,”People’s Republic of China”],
        [0X1004,’Chinese’,’Singapore’],
        [0X404,’Chinese’,’Taiwan’],
        [0X483,’Corsican’,’France’],
        [0X041A,’Croatian’,’Croatia’],
        [0X101A,’Croatian (Latin)’,’Bosnia and Herzegovina’],
        [0X405,’Czech’,’Czech Republic’],
        [0X406,’Danish’,’Denmark’],
        [0X048C,’Dari’,’Afghanistan’],
        [0X465,’Divehi’,’Maldives’],
        [0X813,’Dutch’,’Belgium’],
        [0X413,’Dutch’,’Netherlands’],
        [0X0C09,’English’,’Australia’],
        [0X2809,’English’,’Belize’],
        [0X1009,’English’,’Canada’],
        [0X2409,’English’,’Caribbean’],
        [0X4009,’English’,’India’],
        [0X1809,’English’,’Ireland’],
        [0X2009,’English’,’Jamaica’],
        [0X4409,’English’,’Malaysia’],
        [0X1409,’English’,’New Zealand’],
        [0X3409,’English’,’Republic of the Philippines’],
        [0X4809,’English’,’Singapore’],
        [0X1C09,’English’,’South Africa’],
        [0X2C09,’English’,’
Trinidad and Tobago’],
        [0X809,’English’,’United Kingdom’],
        [0X409,’English’,’United States’],
        [0X3009,’English’,’Zimbabwe’],
        [0X425,’Estonian’,’Estonia’],
        [0X438,’Faroese’,’Faroe Islands’],
        [0X464,’Filipino’,’Philippines’],
        [0X040B,’Finnish’,’Finland’],
        [0X080C,’French’,’Belgium’],
        [0X0C0C,’French’,’Canada’],
        [0X040C,’French’,’France’],
        [0X140c,’French’,’Luxembourg’],
        [0X180C,’French’,’Principality of Monoco’],
        [0X100C,’French’,’Switzerland’],
        [0X462,’Frisian’,’Netherlands’],
        [0X456,’Galician’,’Galician’],
        [0X437,’Georgian’,’Georgia’],
        [0X0C07,’German’,’Austria’],
        [0X407,’German’,’Germany’],
        [0X1407,’German’,’Liechtenstein’],
        [0X1007,’German’,’Luxembourg’],
        [0X807,’German’,’Switzerland’],
        [0X408,’Greek’,’Greece’],
        [0X046F,’Greenlandic’,’Greenland’],
        [0X447,’Gujarati’,’India’],
        [0X468,’Hausa (Latin)’,’Nigeria’],
        [0X040D,’Hebrew’,’Israel’],
        [0X439,’Hindi’,’India’],
        [0X040E,’Hungarian’,’Hungary’],
        [0X040F,’Icelandic’,’Iceland’],
        [0X470,’Igbo’,’Nigeria’],
        [0X421,’Indonesian’,’Indonesia’],
        [0X045D,’Inuktitut’,’Canada’],
        [0X085D,’Inuktitut (Latin)’,’Canada’],
        [0X083C,’Irish’,’Ireland’],
        [0X434,’isiXhosa’,’South Africa’],
        [0X435,’isiZulu’,’South Africa’],
        [0X410,’Italian’,’Italy’],
        [0X810,’Italian’,’Switzerland’],
        [0X411,’Japanese’,’Japan’],
        [0X044B,’Kannada’,’India’],
        [0X043F,’Kazakh’,’Kazakhstan’],
        [0X453,’Khmer’,’Cambodia’],
        [0X486,”K’iche”,’Guatemala’],
        [0X487,’Kinyarwanda’,’Rwanda’],
        [0X441,’Kiswahili’,’Kenya’],
        [0X457,’Konkani’,’India’],
        [0X412,’Korean’,’Korea’],
        [0X440,’Kyrgyz’,’Kyrgyzstan’],
        [0X454,’Lao’,’Lao P.D.R.’],
        [0X426,’Latvian’,’Latvia’],
        [0X427,’Lithuanian’,’Lithuania’],
        [0X082E,’Lower Sorbian’,’Germany’],
        [0X046E,’Luxembourgish’,’Luxembourg’],
        [0X042F,’Macedonian (FYROM)’,’Former Yugoslav Republic of Macedonia’],
        [0X083E,’Malay’,’Brunei Darussalam’],
        [0X043E,’Malay’,’Malaysia’],
        [0X044C,’Malayalam’,’India’],
        [0X043A,’Maltese’,’Malta’],
        [0X481,’Maori’,’New Zealand’],
        [0X047A,’Mapudungun’,’Chile’],
        [0X044E,’Marathi’,’India’],
        [0X047C,’Mohawk’,’Mohawk’],
        [0X450,’Mongolian (Cyrillic)’,’Mongolia’],
        [0X850,’Mongolian (Traditional)’,”People’s Republic of China”],
        [0X461,’Nepali’,’Nepal’],
        [0X414,’Norwegian (Bokmal)’,’Norway’],
        [0X814,’Norwegian (Nynorsk)’,’Norway’],
        [0X482,’Occitan’,’France’],
        [0X448,’Odia (formerly Oriya)’,’India’],
        [0X463,’Pashto’,’Afghanistan’],
        [0X415,’Polish’,’Poland’],
        [0X416,’Portuguese’,’Brazil’],
        [0X816,’Portuguese’,’Portugal’],
        [0X446,’Punjabi’,’India’],
        [0X046B,’Quechua’,’Bolivia’],
        [0X086B,’Quechua’,’Ecuador’],
        [0X0C6B,’Quechua’,’Peru’],
        [0X418,’Romanian’,’Romania’],
        [0X417,’Romansh’,’Switzerland’],
        [0X419,’Russian’,’Russia’],
        [0X243B,’Sami (Inari)’,’Finland’],
        [0X103B,’Sami (Lule)’,’Norway’],
        [0X143B,’Sami (Lule)’,’Sweden’],
        [0X0C3B,’Sami (Northern)’,’Finland’],
        [0X043B,’Sami (Northern)’,’Norway’],
        [0X083B,’Sami (Northern)’,’Sweden’],
        [0X203B,’Sami (Skolt)’,’Finland’],
        [0X183B,’Sami (Southern)’,’Norway’],
        [0X1C3B,’Sami (Southern)’,’Sweden’],
        [0X044F,’Sanskrit’,’India’],
        [0X1C1A,’Serbian (Cyrillic)’,’Bosnia and Herzegovina’],
        [0X0C1A,’Serbian (Cyrillic)’,’Serbia’],
        [0X181A,’Serbian (Latin)’,’Bosnia and Herzegovina’],
        [0X081A,’Serbian (Latin)’,’Serbia’],
        [0X046C,’Sesotho sa Leboa’,’South Africa’],
        [0X432,’Setswana’,’South Africa’],
        [0X045B,’Sinhala’,’Sri Lanka’],
        [0X041B,’Slovak’,’Slovakia’],
        [0X424,’Slovenian’,’Slovenia’],
        [0X2C0A,’Spanish’,’Argentina’],
        [0X400A,’Spanish’,’Bolivia’],
        [0X340A,’Spanish’,’Chile’],
        [0X240A,’Spanish’,’Colombia’],
        [0X140A,’Spanish’,’Costa Rica’],
        [0X1C0A,’Spanish’,’Dominican Republic’],
        [0X300A,’Spanish’,’Ecuador’],
        [0X440A,’Spanish’,’El Salvador’],
 &nbs
p;      [0X100A,’Spanish’,’Guatemala’],
        [0X480A,’Spanish’,’Honduras’],
        [0X080A,’Spanish’,’Mexico’],
        [0X4C0A,’Spanish’,’Nicaragua’],
        [0X180A,’Spanish’,’Panama’],
        [0X3C0A,’Spanish’,’Paraguay’],
        [0X280A,’Spanish’,’Peru’],
        [0X500A,’Spanish’,’Puerto Rico’],
        [0X0C0A,’Spanish (Modern Sort)’,’Spain’],
        [0X040A,’Spanish (Traditional Sort)’,’Spain’],
        [0X540A,’Spanish’,’United States’],
        [0X380A,’Spanish’,’Uruguay’],
        [0X200A,’Spanish’,’Venezuela’],
        [0X081D,’Sweden’,’Finland’],
        [0X041D,’Swedish’,’Sweden’],
        [0X045A,’Syriac’,’Syria’],
        [0X428,’Tajik (Cyrillic)’,’Tajikistan’],
        [0X085F,’Tamazight (Latin)’,’Algeria’],
        [0X449,’Tamil’,’India’],
        [0X444,’Tatar’,’Russia’],
        [0X044A,’Telugu’,’India’],
        [0X041E,’Thai’,’Thailand’],
        [0X451,’Tibetan’,’PRC’],
        [0X041,’Turkish’,’Turkey’],
        [0X442,’Turkmen’,’Turkmenistan’],
        [0X480,’Uighur’,’PRC’],
        [0X422,’Ukrainian’,’Ukraine’],
        [0X042E,’Upper Sorbian’,’Germany’],
        [0X420,’Urdu’,’Islamic Republic of Pakistan’],
        [0X843,’Uzbek (Cyrillic)’,’Uzbekistan’],
        [0X443,’Uzbek (Latin)’,’Uzbekistan’],
        [0X042A,’Vietnamese’,’Vietnam’],
        [0X452,’Welsh’,’United Kingdom’],
        [0X488,’Wolof’,’Senegal’],
        [0X485,’Yakut’,’Russia’],
        [0X478,’Yi’,’PRC’],
        [0X046A,’Yoruba’,’Nigeria’],
        [0X41F,’Turkish’,’Turkic’]];
var nmID = [‘Copyright notice’,’Font Family name’,’Font Subfamily name’,
        ‘Unique font identifier’,’Full font name’,’Version string’,’Postscript name’,
        ‘Trademark’,’Manufacturer Name’,’Designer’,’Description’,’URL Vendor’,
        ‘URL Designer’,’License Description’,’License Info URL’,’Reserved’,’Preferred Family’,
        ‘Preferred Subfamily’,’Compatible Full’,’Sample text’,’PostScript CID findfont name’,
        ‘WWS Family Name’,’WWS Subfamily Name’];
var ot = new Array();
var dat = new Array();
var bt = new Object();
var sjisCd = new Array();

u2sj_init();

var nwflag = false;
var fn = File.openDialog (“Select target FONT.”);
var fnm = String(fn).match(/\/([^\/]+?)\.[a-zA-Z]+$/);
var currentPath = “~/desktop/” + RegExp.$1;
var currentFolder = new Folder (currentPath);
if (!currentFolder.exists) {
    currentFolder.create();
    nwflag = true;
    }

var f = new File(fn);
f.encoding = ‘BINARY’;
if (f.open(“r”)){
    ot = readOfstTbl();
    var w = new Window(‘palette’, ‘Offset Table’, [100,100,300,235]);
    w.add(‘statictext’,[5,5,180,20],’sfnt              ‘+ot[0]);
    w.add(‘statictext’,[5,25,180,40],’table length  ‘+ot[1]);
    w.add(‘statictext’,[5,45,180,60],’search range  ‘+ot[2]);
    w.add(‘statictext’,[5,65,180,80],’entry selector  ‘+ot[3]);
    w.add(‘statictext’,[5,85,180,100],’range shift  ‘+ot[4]);
    var clsBtn = w.add(‘button’,[130,105,190,120],’close’,{name:’cancel’});
    clsBtn.onClick = function(){w.close()};
    w.show();
    var tw = new Window(‘palette’,’Table Directory’,
            [150,120,480,24*ot[1]+160]);
    var clstw = tw.add(‘button’,[10,ot[1]*24+10,80,ot[1]*24+25],
            ‘close’,{name:’cancel’});
    readTD (ot[1]);
    clstw.onClick = function(){tw.close()};
    tw.show();
    if (nwflag)
        for (j=0;j<dat.length;j++)
            saveTables(dat[j][0], dat[j][2], dat[j][3]);
    }

function readTD(num){
    var a=0;
    for (j=0;j<num;j++){
        dat[j] = [“”,0,0,0,””,””,””];
        for (i=0;i<4;i++) dat[j][0] += f.readch();
        $.write(dat[j][0]+”  “);
        dat[j][1] = readULong(f);
        dat[j][4] = “0x”+dat[j][1].toString(16);
        dat[j][2] = readULong(f);
        dat[j][5] = “0x”+dat[j][2].toString(16);
        dat[j][3] = readULong(f);
        dat[j][6] = “0x”+dat[j][3].toString(16);
        $.write(dat[j][4]+”  “+dat[j][5]+”  “+dat[j][6]+”\n”);
        tw.add(‘statictext’,[5,5+24*j,300,5+24*(j+1)],
                dat[j][0]+”  “+dat[j][4]+”  “+dat[j][5]+”  “+dat[j][6]);
        bt[j] = tw.add(‘button’,[250,24*j,300,5+24*(j+1)-15],
                dat[j][0],{name:dat[j][0]});
        bt[j].dat = [dat[j][0],dat[j][1],dat[j][2],dat[j][3]];
        bt[j].onClick = function(){tbFnc(this.dat)};
        if (dat[j][0]==”head”&&!nwflag)
            nwflag = verifyVersion(dat[j]);
        }
    return dat;
    }

function verifyVersion(dat){
    var currentPoint = f.tell();
    var existFile = new File(currentFolder + “/head.table”);
    if (existFile.open(‘r’)){
        var eVer = readFixed(existFile);
        var eRev = readFixed(existFile);
        } else {
            return true;
            }
    existFile.close();
    f.seek(dat[2]);
    var targetVer = readFixed(f
);
    if (targetVer!=eVer){
        f.seek(currentPoint);
        return true;
        }
    var targetRev = readFixed(f);
    if (targetRev!=eRev){
        f.seek(currentPoint);
        return true;
        }
    f.seek(currentPoint);
    return false;    
    }

function readOfstTbl(){
    var dt = [“”,0,0,0,0];
    var d;
    var a = f.readch();
    if (a==”O”){
        dt[0] = a;
        for (i=0;i<3;i++) {
            dt[0] += f.readch();
            }
        } else {
            dt[0] = “0x0” + a.charCodeAt(0).toString (16);
            for (i=0;i<3;i++) {
                a = f.readch();
                d = a.charCodeAt(0).toString (16);
                if (d.length==1) d = “0” + d;
                dt[0] += d;
                }
            }
    dt[1] = readBytes(f);
    dt[2] = readBytes(f);
    dt[3] = readBytes(f);
    dt[4] = readBytes(f);
    return dt;
    }

function tbFnc(td){
    if (td[0]==”head”) readHead (currentPath);
    if (td[0]==”name”) readName (currentPath);
    if (td[0]==”maxp”) readMaxp (currentPath);
    if (td[0]==”hhea”) readHhea (currentPath);
    if (td[0]==”hmtx”) readHmtx (currentPath);
    if (td[0]==”OS/2″) readOS2 (currentPath);
    if (td[0]==”post”) readPost (currentPath);
    if (td[0]==”cmap”) readCmap (currentPath);
    //alert(td[0]+” “+td[1]+” “+td[2]+” “+td[3]);
    }

function readFClass(targetFile){
    var rslt = new Array();
    rslt[0] = targetFile.readch().charCodeAt(0);
    rslt[1] = targetFile.readch().charCodeAt(0);
    return rslt;
    }

function getURArray(ur,range){
    var rslt = new Array;
    var d = 2147483648;
    for (var i=31;i>-1;i–){
        if (ur>=d){
            rslt.unshift(range[i]);
            ur -= d;
            }
        d /= 2;
        }
    return rslt.join (“\n”);
    }

function getOTinf(num){
    var result = [0,0,0];
    var n = 2;
    var ctr = 0;
    while (n<num){
        n *= 2;
        ctr++;
        }
    result[0] = n / 2 * 16;
    result[1] = ctr–;
    result[2] = num * 16 – result[0];
    return result;
    }

function saveTables(nam, offset, len) {
    if (nam==”OS/2″) nam = “OS_2”;
    var fn = new File(currentPath + ‘/’ + nam + “.table”);
    fn.encoding = ‘BINARY’;
    f.seek(offset);
    fn.open(“w”);
    var chr = f.readch().charCodeAt(0);
    fn.write(String.fromCharCode (chr));
    fn.close();
    fn.open(“a”);
    for (var i=1;i<len;i++){
        chr = f.readch().charCodeAt(0);
        fn.write (String.fromCharCode(chr));
        }
    fn.close();
    }<num){ n="" *="2;" ctr++;="" }="" result[0]="n" 2="" 16;="" result[1]="ctr–;" result[2]="num" 16="" -="" result[0];="" return="" result;="" function="" savetables(nam,="" offset,="" len)="" {="" if="" (nam="="OS/2")" nam="OS_2" ;="" var="" fn="new" file(currentpath="" +="" '="" ".table");="" fn.encoding="BINARY" f.seek(offset);="" fn.open("w");="" chr="f.readch().charCodeAt(0);" fn.write(string.fromcharcode="" (chr));="" fn.close();="" fn.open("a");="" for="" (var="" i="1;i<len;i++){" fn.write="" (string.fromcharcode(chr));="" }

結構適当にグローバルで引き回すデータが多いのですが、各テーブル処理の為のファンクションは全て外部読み込みとしています。
フォントのバージョンをヘッダ情報を利用して確認していますが、スプリットされているテーブルと整合性が無い場合は再度分割処理が行われます。
あとは基本的に前にサンプルをご覧頂いたものですので詳細は割愛します。
KozGoとかレビジョンがちょいと違うだけでグリフテーブルがごろごろ変わっていたりしますので新しいSuiteがリリースされるたびに変更されているのでしょう。いつも思うのだけど、同じフォント名でこう変更されていると事故多発するよねw
というわけで、次回より各テーブルの解説に入る予定です。このへんが理解出来るとフォントを小細工して緊急避難的処理が出来たりします。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

コメントを残す