Created
June 21, 2016 03:01
-
-
Save ten-A/aa69b5e4a43bad99b67bed2b4532c19b to your computer and use it in GitHub Desktop.
Pick up Language informations from Open Type Font.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 = [ | |
[0X409,'English','United States'], | |
[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'], | |
[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'], | |
[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']]; | |
var dat = []; | |
var f = File.openDialog("select font..."); | |
f.encoding = 'BINARY'; | |
if (f.open("r")){ | |
var ot = readOfstTbl(); | |
var a=0; | |
for (j=0;j<ot[1];j++){ | |
dat[j] = ["",0,0,0]; | |
for (i=0;i<4;i++) dat[j][0] += f.readch(); | |
dat[j][1] = readULong(f); | |
dat[j][2] = readULong(f); | |
dat[j][3] = readULong(f); | |
if (dat[j][0]=="name") readName(dat[j]); | |
} | |
} | |
function readName(td){ | |
if (td[0]!="name") return; | |
var lanLst = ""; | |
f.seek(td[2]); | |
var fmt = readUShort (f); | |
var len = readUShort (f); | |
var ofst = td[2] + readUShort (f); | |
if (fmt==0) lanLst = getNm0(len,ofst); | |
else if (fmt==1) getNm1(len,ofst); | |
else return; | |
alert(lanLst); | |
} | |
function getNm1(len,ofst){ | |
alert("type 1"); | |
} | |
function getNm0(len,ofst){ | |
var stOfst; | |
var strng = ""; | |
var flg=false; | |
var num,k; | |
var result =""; | |
var currentPosition; | |
for (var i=0;i<len;i++){ | |
num = 0; | |
var PID = readUShort (f); | |
var EID = readUShort (f); | |
var LID = readUShort (f); | |
var NID = readUShort (f); | |
var stLen = readUShort (f); | |
stOfst = ofst + readUShort (f); | |
currentPosition = f.tell(); | |
result += "LanguageID= " + LID + " "; | |
if (PID=="1"){ | |
result += MacLangID[LID] + "\n" | |
if (EID==1){ | |
strng = u2sj (f,stOfst, stLen); | |
} else { | |
f.seek(stOfst); | |
for(k=0;k<stLen;k++) strng += f.readch(); | |
} | |
}else if (PID==3){ | |
while (!flg) { | |
if (winLngID[num][0]==LID){ | |
result += winLngID[num][1]+" "+winLngID[num][2]+"\n"; | |
break; | |
} | |
num++ | |
} | |
strng = winBMP (f,stOfst, stLen); | |
} else { | |
f.seek(stOfst); | |
for(var k=0;k<stLen;k++) strng += f.readch(); | |
} | |
f.seek(currentPosition); | |
strng = ""; | |
} | |
return result; | |
} | |
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 readBytes(targetFile){ | |
var a = targetFile.readch().charCodeAt (0); | |
var dat = a << 8; | |
a = targetFile.readch().charCodeAt (0); | |
dat += a; | |
return dat | |
} | |
function readUShort(targetFile){ | |
var result = targetFile.readch().charCodeAt(0) * 256; | |
result += targetFile.readch().charCodeAt(0); | |
return result; | |
} | |
function readULong(targetFile){ | |
var result=0; | |
var a = 16777216; | |
for(var k=0;k<4;k++){ | |
result += targetFile.readch().charCodeAt(0) * a; | |
a /= 256; | |
} | |
return result; | |
} | |
function u2sj(tg,ofst,len){ | |
tg.seek(ofst); | |
st=""; | |
a=""; | |
b=0; | |
for (i=0;i<len;i++){ | |
a = tg.readch().charCodeAt (0); | |
if (a>0x80){ | |
a *= 256; | |
b = a + tg.readch().charCodeAt (0); | |
//a = sjisCd[b]; | |
i++; | |
st += "\0x" + b.toString(16); | |
} | |
else st += String.fromCharCode (a); | |
} | |
return st; | |
} | |
function winBMP(tg,ofst,len){ | |
var byt = 0; | |
var st = ""; | |
for (var i=0;i<len/2;i++){ | |
byt = tg.readch().charCodeAt(0) * 256; | |
st += String.fromCharCode(byt+tg.readch().charCodeAt(0)); | |
} | |
return st; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment