Browse Source

Upgrade han.js

gh-pages
othree_kao 11 years ago
parent
commit
d1349672e9
  1. 94
      js/han.js

94
js/han.js

@ -1,13 +1,13 @@
/* /*
* 漢字標準格式 v2.1.1 * 漢字標準格式 v2.2.0
* --- * ---
* Hanzi-optimised CSS Mode * Hanzi-optimised CSS Mode
* *
* *
* *
* Lisence: MIT Lisence * Lisence: MIT Lisence
* Last Modified: 2013/10/21 * Last Modified: 2013/11/27
* *
*/ */
@ -16,7 +16,7 @@ jQuery.noConflict();
(function($){ (function($){
var version = '2.1.1', var version = '2.2.0',
tests = [], tests = [],
rubies, rubies,
@ -30,6 +30,11 @@ jQuery.noConflict();
han = function() { han = function() {
$(document).on('ready', function(){ $(document).on('ready', function(){
// `unicode-range`
classes.push( ( test_for_unicoderange() ? '' : 'no-' ) + 'unicoderange' );
// The 4(-1) Typefaces
fontfaces['songti'] = test_for_fontface( 'Han Songti' ); fontfaces['songti'] = test_for_fontface( 'Han Songti' );
fontfaces['kaiti'] = test_for_fontface( 'Han Kaiti' ); fontfaces['kaiti'] = test_for_fontface( 'Han Kaiti' );
fontfaces['fangsong'] = test_for_fontface( 'Han Fangsong' ); fontfaces['fangsong'] = test_for_fontface( 'Han Fangsong' );
@ -38,6 +43,7 @@ jQuery.noConflict();
classes.push( ( fontfaces[font] ? '' : 'no-' ) + 'fontface-' + font ); classes.push( ( fontfaces[font] ? '' : 'no-' ) + 'fontface-' + font );
} }
// altogether
$('html').addClass( classes.join(' ') ); $('html').addClass( classes.join(' ') );
init(); init();
@ -130,7 +136,7 @@ jQuery.noConflict();
/* /*
* 漢拉間隙 * 漢拉間隙
* --- * ---
* Gaps between Hanzi and Latin Letter * Kerning between Hanzi and Latin Letter
* *
*/ */
@ -175,27 +181,39 @@ jQuery.noConflict();
/* /*
* 修正相鄰註記元素`<u>`的底線相連問題 * 修正相鄰註記元素`<u>`的底線相連問題
* --- * ---
* fixing the underline-adjacency issues on `<u>` element * fixing the underline-adjacency issue on `<u>` element
* *
*/ */
if ( $('html').hasClass('han-lab-underline') ) if ( $('html').hasClass('han-lab-underline') )
$(range).find('u').charize('', true, true); $(range).find('u').charize('', true, true);
else else
$(range).each(function() { $(range).find('u').each(function(){
var html = $(this).html(); var next = this.nextSibling;
_ignore(next);
_adj(next);
$(this) function _adj( next ) {
.html( html.replace(/<\/u>(<!--.*?-->|<wbr[ ]?[\/]?>)*?<u(\s.*?)*?>/ig, '</u>$1<u data-adjacent $2>') ) if ( next.nodeName === "U" )
.find('u[data-adjacent]').addClass('adjacent').removeAttr('data-adjacent'); $(next).addClass('adjacent');
}
function _ignore( next ) {
if ( next.nodeName === "WBR" || next.nodeType == 8 ) {
var next = next.nextSibling;
_ignore(next);
_adj(next);
}
}
}); });
/* 調`<em>` /* 調`<em>`
* --- * ---
* punctuation: CJK emphasis dots * punctuation: CJK emphasis dots on `<em>` element
* on `<em>` element
* *
*/ */
@ -206,7 +224,7 @@ jQuery.noConflict();
/* `<q>`WebKit /* `<q>`WebKit
* --- * ---
* punctuation: CJK quotes on `<q>` (WebKit) * punctuation: Quote issue on `<q>` element (WebKit)
* *
*/ */
@ -305,13 +323,17 @@ jQuery.noConflict();
}, },
test_for_fontface = function( font ) { test_for_fontface = function( test, compare, zi ) {
if ( !tests['fontface']() ) if ( !tests['fontface']() )
return false; return false;
var test = test,
compare = compare || 'sans-serif',
zi = zi || '辭Q';
try { try {
var sans = write_on_canvas( '辭Q', 'sans-serif' ), var sans = write_on_canvas( zi, compare ),
test = write_on_canvas( '辭Q', font ), test = write_on_canvas( zi, test ),
support; support;
@ -349,6 +371,10 @@ jQuery.noConflict();
}; };
test_for_unicoderange = function() {
return !test_for_fontface( 'han-unicode-range', 'Arial, "Droid Sans"', 'a' );
};
/* -------------------------------------------------------- /* --------------------------------------------------------
* Unicode區域說明6.2.0 * Unicode區域說明6.2.0
@ -375,7 +401,7 @@ jQuery.noConflict();
* CJK一般[\u4E00-\u9FFF] * CJK一般[\u4E00-\u9FFF]
* CJK擴展-A區[\u3400-\u4DB5] * CJK擴展-A區[\u3400-\u4DB5]
* CJK擴展-B區[\u20000-\u2A6D6] * CJK擴展-B區[\u20000-\u2A6D6]
* CJK Unicode 4.1[\u9FA6-\u9FBB][\uFA70-\uFAD9] * CJK Unicode 4.1[\u9FA6-\u9FBB][\uFA70-\uFAD9]
* CJK Unicode 5.1[\u9FBC-\u9FC3] * CJK Unicode 5.1[\u9FBC-\u9FC3]
* CJK擴展-C區[\u2A700-\u2B734] * CJK擴展-C區[\u2A700-\u2B734]
* CJK擴展-D區[\u2B740-\u2B81D]急用漢字 * CJK擴展-D區[\u2B740-\u2B81D]急用漢字
@ -385,7 +411,9 @@ jQuery.noConflict();
* 數字[\u3007] * 數字[\u3007]
* 日文假名[\u3040-\u309E][\u30A1-\u30FA][\u30FD\u30FE]****排除片假名中點長音符 * 日文假名[\u3040-\u309E][\u30A1-\u30FA][\u30FD\u30FE]****排除片假名中點長音符
* *
* CJK相容表意文字[\uF900-\uFAFF]****不使用 * CJK相容表意文字
* [\uF900-\uFAFF]****不使用
* [\uFA0E-\uFA0F\uFA11\uFA13-\uFA14\uFA1F\uFA21\uFA23-\uFA24\uFA27-\uFA29]****12個例外
* -------------------------------------------------------- * --------------------------------------------------------
* *
** 符號 ** 符號
@ -413,7 +441,7 @@ jQuery.noConflict();
unicode['hanzi'] = [ unicode['hanzi'] = [
'[\u4E00-\u9FFF]', '[\u4E00-\u9FFF]',
'[\u3400-\u4DB5\u9FA6-\u9FBB\uFA70-\uFAD9\u9FBC-\u9FC3\u3007\u3040-\u309E\u30A1-\u30FA\u30FD\u30FE]', '[\u3400-\u4DB5\u9FA6-\u9FBB\uFA70-\uFAD9\u9FBC-\u9FC3\u3007\u3040-\u309E\u30A1-\u30FA\u30FD\u30FE\uFA0E-\uFA0F\uFA11\uFA13-\uFA14\uFA1F\uFA21\uFA23-\uFA24\uFA27-\uFA29]',
'[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]', '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]',
'\uD86D[\uDC00-\uDF3F]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD869[\uDF00-\uDFFF]', '\uD86D[\uDC00-\uDF3F]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD869[\uDF00-\uDFFF]',
'\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]', '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]',
@ -684,14 +712,10 @@ jQuery.noConflict();
// tests
for ( var feature in tests ) { for ( var feature in tests ) {
classes.push( ( tests[feature]() ? '' : 'no-' ) + feature ); classes.push( ( tests[feature]() ? '' : 'no-' ) + feature );
if ( !tester ) if ( !tester )
var tester = ''; var tester = '';
@ -699,7 +723,8 @@ jQuery.noConflict();
} }
!function(window) { !function(window) {
eval("tester = ({\n" + tester.replace(/\n$/ig, '\nfont: test_for_fontface\n}') + ")"); eval("tester = ({\n" + tester.replace(/\n$/ig,
'\nunicoderange: test_for_unicoderange, \nfont: test_for_fontface\n}') + ")");
}(); }();
@ -1223,3 +1248,22 @@ window.findAndReplaceDOMText = (function() {
return exposed; return exposed;
}()); }());

Loading…
Cancel
Save