forked from ethantw/Han
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhan.min.js
9 lines (8 loc) · 6.24 KB
/
han.min.js
1
2
3
4
5
6
7
8
9
/* 漢字標準格式
* Standard Han Format
*
* Version: 1.2
* Lisence: MIT Lisence
* Last Modified: 2011/12/22
*/
(function(a){var c={js:function(){c.msie_html5();a(document).ready(function(){c.init()})},init:function(b,g){if(b||!a("html").hasClass("no-han_init")){var k=c.support.font_smoothy,l=c.support.column_width,d=c.support.text_em,f=c.support.quotes,j=c.support.writing_mode,h;if(!b&&g!=!1||b&&g)h="han-js "+c.conditions(),h+=" hasFontSmoothing-"+(k?"true":k==!1?"false":"unknown"),h+=" "+(!l?"no-":"")+"columnwidth",h+=" "+(!d?"no-":"")+"textemphasis",h+=" "+(!f?"no-":"")+"quotes",h+=" "+(!j?"no-":"")+"writingmode",a(!b?"html":b).addClass(h);b=b||document;a(b).find("em").each(function(){a(this).html(c.characterize(a(this).html(),{cjk:d?"punctuation":null,latin:d?"none":"individual"}))});f||a(b).find("q q").each(function(){a(this).parents("q").length%2!=0&&a(this).addClass("double")});a.browser.msie&&a(b).find("i").each(function(){a(this).html(c.characterize(a(this).html(),{cjk:"none",latin:"group"}))});a(b).find("ruby.pinyin").addClass("romanization");a(b).find("ruby.zhuyin").addClass("mps");a(b).find("ruby").each(function(){if(a(this).hasClass("mps")||!a.browser.webkit){var b=a(this).html().replace(/<rt>/ig,'<span class="rt">').replace(/<\/rt>/ig,'</span></span><span class="rb">');a(this).html('<span class="rb">'+b+"</span>")}});a.browser.webkit||a("ruby.romanization .rt, ruby.mps-ltr .rt").each(function(){var b=[];b.rt=a(this).outerWidth();b.rb=a(this).parent("span.rb").outerWidth();a(this).css("min-width",b.rb);a(this).parent("span.rb").css("min-width",b.rt)});a("ruby.mps .rt").each(function(){a(this).html(a(this).html().replace(/(\u02d9)/ig,'<span class="tone tone-0">$1</span>').replace(/([\u02ca\u02c7\u02cb])/ig,'<span class="tone">$1</span>'))})}},characterize:function(b,a){b+="<\!----\>";a=a||{};a={cjk:a.cjk||"individual",latin:a.latin||"group",space:a.space||"individual"};a.cjk==="individual"?b=b.replace(/([\u1100-\u11FF\u2030-\u217F\u2600-\u261B\u2620-\u277F\u2E80-\u2FDF\u2FF0-\u4DBF\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF\uF900-\uFAFF\uFE30-\uFE4F\uFF00\uFF01\uFF03-\uFF06\uFF08-\uFF0C\uFF0E-\uFF19\uFF1F-\uFF3D\uFF40-\uFF5B\uFF5D-\uFFEF])(?=[^>]*<)/ig,'<span class="cjk">$1</span>').replace(/<span class="cjk">([\u00b7\u30fb\ufe30\u3001\uff0c\u3002\uff1a\uff1b\uff1f\uff01\u2014\u22ef\uff0e\u00b7])/ig,'<span class="cjk punc">$1').replace(/<span class="cjk">([\u300c\u300e\uff08\u3014\u3010\u300a\u3008\u201c\u2018])/ig,'<span class="cjk punc open">$1').replace(/<span class="cjk">([\u300d\u300f\uff09\u3015\u3011\u300b\u3009\u2019\u201d])/ig,'<span class="cjk punc close">$1'):a.cjk==="group"?b=b.replace(/([\u1100-\u11FF\u2030-\u217F\u2600-\u261B\u2620-\u277F\u2E80-\u2FDF\u2FF0-\u4DBF\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF\uF900-\uFAFF\uFE30-\uFE4F\uFF00\uFF01\uFF03-\uFF06\uFF08-\uFF0C\uFF0E-\uFF19\uFF1F-\uFF3D\uFF40-\uFF5B\uFF5D-\uFFEF]+)(?=[^>]*<)/ig,'<span class="cjk">$1</span>'):a.cjk==="punctuation"&&(b=b.replace(/([\u00b7\u30fb\ufe30\u3001\uff0c\u3002\uff1a\uff1b\uff1f\uff01\u2014\u22ef\uff0e\u00b7])(?=[^>]*<)/ig,'<span class="cjk punc">$1</span>').replace(/([\u300c\u300e\uff08\u3014\u3010\u300a\u3008\u201c\u2018])(?=[^>]*<)/ig,'<span class="cjk punc open">$1</span>').replace(/([\u300d\u300f\uff09\u3015\u3011\u300b\u3009\u2019\u201d])(?=[^>]*<)/ig,'<span class="cjk punc close">$1</span>'));a.latin==="individual"?b=b.replace(/([\u0020-\u003B\u003D\u003F-\u007F\u0100-\u017F\u0180-\u024F\u0300-\u036F\u1E00-\u1EFF\u2000-\u206F\u2070-\u209F\u20A0-\u20CF\u2100-\u214F\u2150-\u218F])(?=[^>]*<)/ig,'<span class="latin">$1</span>'):a.latin==="group"&&(b=b.replace(/([\u0020-\u003B\u003D\u003F-\u007F\u0100-\u017F\u0180-\u024F\u0300-\u036F\u1E00-\u1EFF\u2000-\u206F\u2070-\u209F\u20A0-\u20CF\u2100-\u214F\u2150-\u218F]+)(?=[^>]*<)/ig,'<span class="latin">$1</span>'));a.space==="individual"&&(b=b.replace(/<span class="(\w+)">([\s])/ig,'<span class="$1 space">$2'));return b},msie_html5:function(b){if(a.browser.msie&&a.browser.version<=8){e="abbr,article,aside,audio,canvas,datalist,details,dfn,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,rp,rt,ruby,section,summary,time,video";b&&(e+=","+b);e=e.split(",");for(i=e.length;i--;)document.createElement(e[i])}},conditions:function(b){var c=function(a){return navigator.appVersion.indexOf(a)!=-1?!0:!1},c=c("Mac")?"mac":c("X11")?"unix":c("Linux")?"linux":c("Win")?"win":"os-unknown";browser=a.browser.mozilla?"mozilla":a.browser.opera?"opera":a.browser.webkit?"webkit":a.browser.msie&&a.browser.version<=7?"msie msie-old ie-"+Math.floor(a.browser.version):a.browser.msie&&a.browser.version>=8?"msie ie-"+Math.floor(a.browser.version):"browser-unknown";return b==="os"?c:b==="browser"?browser:c+" "+browser}},d=a('<a href="/" style="display: none; text-emphasis: dot; -moz-text-emphasis: dot; -o-text-emphasis: dot; -webkit-text-emphasis: dot;">tester</a>'),j=a("<q style=\"display: none; quotes: '\u201c' '\u201d' '\u2018' '\u2019'\">tester</q>"),f=a('<div style="display: none; column-width: 200px; -moz-column-width: 200px; -webkit-column-width: 200px; writing-mode: tb-rl; -webkit-writing-mode: vertical-rl; ">tester</div>');fs=function(){if(c.conditions("os")==="mac")return!0;if(typeof screen.fontSmoothingEnabled!=="undefined")return screen.fontSmoothingEnabled;else try{var a=document.createElement("canvas");a.width="35";a.height="35";a.style.display="none";document.body.appendChild(a);var g=a.getContext("2d");g.textBaseline="top";g.font="32px Arial";g.fillStyle="black";g.strokeStyle="black";g.fillText("O",0,0);for(a=8;a<=32;a++)for(var d=1;d<=32;d++){var f=g.getImageData(d,a,1,1).data[3];if(f!=255&&f!=0&&f>180)return!0}return!1}catch(j){return null}};c.support={column_width:/^200px$/.test(f.css("-webkit-column-width"))||/^200px$/.test(f.css("-moz-column-width"))||/^200px$/.test(f.css("column-width"))?!0:!1,font_smoothy:fs(),text_em:/^dot$/.test(d.css("-webkit-text-emphasis-style"))||/^dot$/.test(d.css("text-emphasis-style"))||/^dot$/.test(d.css("-moz-text-emphasis-style"))||/^dot$/.test(d.css("-o-text-emphasis-style"))?!0:!1,quotes:/^"\u201c" "\u201d" "\u2018" "\u2019"$/.test(j.css("quotes")),writing_mode:/^vertical-rl$/.test(f.css("-webkit-writing-mode"))?!0:!1};c.js();window.han=c.external={applyTo:c.init,characterize:c.characterize,conditions:c.conditions,support:c.support}})(jQuery);