From 40ff31841dcf8dcc716e08545e85569f4bb2bb0f Mon Sep 17 00:00:00 2001 From: Chen Yijun Date: Wed, 12 Feb 2014 14:01:16 +0800 Subject: [PATCH] Updated Han.css to v2.3.0 --- ajax/libs/Han/2.3.0/fonts/zhuyin.eot | Bin 0 -> 44542 bytes ajax/libs/Han/2.3.0/fonts/zhuyin.otf | Bin 0 -> 22380 bytes ajax/libs/Han/2.3.0/fonts/zhuyin.ttf | Bin 0 -> 44268 bytes ajax/libs/Han/2.3.0/han.css | 1987 ++++++++++++++++++++++++++ ajax/libs/Han/2.3.0/han.js | 1415 ++++++++++++++++++ ajax/libs/Han/package.json | 11 +- 6 files changed, 3409 insertions(+), 4 deletions(-) create mode 100644 ajax/libs/Han/2.3.0/fonts/zhuyin.eot create mode 100644 ajax/libs/Han/2.3.0/fonts/zhuyin.otf create mode 100644 ajax/libs/Han/2.3.0/fonts/zhuyin.ttf create mode 100644 ajax/libs/Han/2.3.0/han.css create mode 100644 ajax/libs/Han/2.3.0/han.js diff --git a/ajax/libs/Han/2.3.0/fonts/zhuyin.eot b/ajax/libs/Han/2.3.0/fonts/zhuyin.eot new file mode 100644 index 0000000000000000000000000000000000000000..fbd08057aa550db742036e887a721fa08fdd6d96 GIT binary patch literal 44542 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 literal 0 HcmV?d00001 diff --git a/ajax/libs/Han/2.3.0/fonts/zhuyin.otf b/ajax/libs/Han/2.3.0/fonts/zhuyin.otf new file mode 100644 index 0000000000000000000000000000000000000000..754d0ae9a3e3b55fae270f47a90afb214f201835 GIT binary patch literal 22380 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 literal 0 HcmV?d00001 diff --git a/ajax/libs/Han/2.3.0/han.css b/ajax/libs/Han/2.3.0/han.css new file mode 100644 index 000000000..0b645eb5b --- /dev/null +++ b/ajax/libs/Han/2.3.0/han.css @@ -0,0 +1,1987 @@ +@charset "UTF-8"; +/*! + * 漢字標準格式 v2.3 + * Hanzi-optimised CSS Mode + * + * Lisence: MIT Lisence + * Last-Modified: 2014/2/12 + */ +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ } + +/** + * Remove default margin. + */ +body { + margin: 0; } + +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined in IE 8/9. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; } + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; } + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; } + +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background: transparent; } + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +a:active, +a:hover { + outline: 0; } + +/* Text-level semantics + ========================================================================== */ +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; } + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ +b, +strong { + font-weight: bold; } + +/** + * Address styling not present in Safari 5 and Chrome. + */ +dfn { + font-style: italic; } + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; } + +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; } + +/** + * Address inconsistent and variable font size in all browsers. + */ +small { + font-size: 80%; } + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; } + +sup { + top: -0.5em; } + +sub { + bottom: -0.25em; } + +/* Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9. + */ +img { + border: 0; } + +/** + * Correct overflow displayed oddly in IE 9. + */ +svg:not(:root) { + overflow: hidden; } + +/* Grouping content + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari 5. + */ +figure { + margin: 1em 40px; } + +/** + * Address differences between Firefox and other browsers. + */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; } + +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; } + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; } + +/* Forms + ========================================================================== */ +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ +button, +input, +optgroup, +select, +textarea { + color: inherit; + /* 1 */ + font: inherit; + /* 2 */ + margin: 0; + /* 3 */ } + +/** + * Address `overflow` set to `hidden` in IE 8/9/10. + */ +button { + overflow: visible; } + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8+, and Opera + * Correct `select` style inheritance in Firefox. + */ +button, +select { + text-transform: none; } + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ } + +/** + * Re-set default cursor for disabled elements. + */ +button[disabled], +html input[disabled] { + cursor: default; } + +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; } + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +input { + line-height: normal; } + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ } + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; } + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + /* 2 */ + box-sizing: content-box; } + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; } + +/** + * Define consistent border, margin, and padding. + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; } + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ } + +/** + * Remove default vertical scrollbar in IE 8/9. + */ +textarea { + overflow: auto; } + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ +optgroup { + font-weight: bold; } + +/* Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; } + +/** + * 四大字體集・黑體 + * The Four Typefaces: Heiti + */ +@font-face { + font-family: 'Han Heiti'; + src: local("Hiragino Sans GB"), local("Lantinghei TC"), local("Lantinghei SC"), local("Heiti SC"), local("Heiti TC"), local("Microsoft Yahei"), local("Microsoft Jhenghei"), local("Droid Sans Fallback"); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Heiti'; + src: local(YuGothic), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"); } + +@font-face { + font-family: 'Han Heiti CNS'; + src: local("Hiragino Sans GB"), local("Lantinghei TC"), local("Heiti TC"), local("Microsoft Jhenghei"), local("Heiti SC"), local("Lantinghei SC"), local("Microsoft Yahei"), local("Droid Sans Fallback"); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Heiti CNS'; + src: local(YuGothic), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"); } + +@font-face { + font-family: 'Han Heiti GB'; + src: local("Hiragino Sans GB"), local("Lantinghei SC"), local("Heiti SC"), local("Microsoft Yahei"), local("Droid Sans Fallback"); } + +/* + * 粗體 + */ +@font-face { + font-family: 'Han Heiti'; + font-weight: 600; + src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei TC Demibold"), local("Lantinghei SC Demibold"), local(FZLTXHB--B51-0), local(FZLTZHK--GBK1-0), local("Heiti SC Medium"), local("Heiti TC Medium"), local(STHeitiSC-Medium), local(STHeitiTC-Medium), local("Microsoft YaHei Bold"), local("Microsoft Jhenghei Bold"), local(MicrosoftYaHei-Bold), local(MicrosoftJhengHeiBold); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Heiti'; + font-weight: 600; + src: local("YuGothic Bold"), local("Hiragino Kaku Gothic ProN W6"), local("Hiragino Kaku Gothic Pro W6"), local(YuGo-Bold), local(HiraKakuProN-W6), local(HiraKakuPro-W6); } + +@font-face { + font-family: 'Han Heiti CNS'; + font-weight: 600; + src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei TC Demibold"), local("Heiti TC Medium"), local("Microsoft Jhenghei Bold"), local(FZLTXHB--B51-0), local(STHeitiTC-Medium), local(MicrosoftJhengHeiBold), local("Lantinghei SC Demibold"), local("Microsoft YaHei Bold"), local("Heiti SC Medium"), local(FZLTZHK--GBK1-0), local(STHeitiSC-Medium), local(MicrosoftYaHei-Bold); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Heiti CNS'; + font-weight: 600; + src: local("YuGothic Bold"), local(YuGo-Bold), local("Hiragino Kaku Gothic ProN W6"), local("Hiragino Kaku Gothic Pro W6"), local(HiraKakuProN-W6), local(HiraKakuPro-W6); } + +@font-face { + font-family: 'Han Heiti GB'; + font-weight: 600; + src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei SC Demibold"), local("Microsoft YaHei Bold"), local("Heiti SC Medium"), local(FZLTZHK--GBK1-0), local(STHeitiSC-Medium), local(MicrosoftYaHei-Bold); } + +@font-face { + font-family: 'Han Heiti'; + src: local("Hiragino Sans GB"), local("Lantinghei TC"), local("Lantinghei SC"), local("Heiti SC"), local("Heiti TC"), local("Microsoft Yahei"), local("Microsoft Jhenghei"), local("Droid Sans Fallback"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Heiti'; + font-weight: 600; + src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei TC Demibold"), local("Lantinghei SC Demibold"), local(FZLTXHB--B51-0), local(FZLTZHK--GBK1-0), local("Heiti SC Medium"), local("Heiti TC Medium"), local(STHeitiSC-Medium), local(STHeitiTC-Medium), local("Microsoft YaHei Bold"), local("Microsoft Jhenghei Bold"), local(MicrosoftYaHei-Bold), local(MicrosoftJhengHeiBold); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Heiti CNS'; + src: local("Hiragino Sans GB"), local("Lantinghei TC"), local("Heiti TC"), local("Microsoft Jhenghei"), local("Heiti SC"), local("Lantinghei SC"), local("Microsoft Yahei"), local("Droid Sans Fallback"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Heiti CNS'; + font-weight: 600; + src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei TC Demibold"), local("Heiti TC Medium"), local("Microsoft Jhenghei Bold"), local(FZLTXHB--B51-0), local(STHeitiTC-Medium), local(MicrosoftJhengHeiBold), local("Lantinghei SC Demibold"), local("Heiti SC Medium"), local("Microsoft YaHei Bold"), local(FZLTZHK--GBK1-0), local(STHeitiSC-Medium), local(MicrosoftYaHei-Bold); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Heiti GB'; + src: local("Hiragino Sans GB"), local("Lantinghei SC"), local("Heiti SC"), local("Microsoft Yahei"), local("Droid Sans Fallback"); + unicode-range: U+270C; } + +/** + * 四大字體集・宋體(明朝體) + * The Four Typefaces: Songti (Mincho) + */ +@font-face { + font-family: 'Han Songti'; + src: local("Songti SC"), local("Songti TC"), local(STSong), local("Lisong Pro"), local(SimSun), local(PMingLiU); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Songti'; + src: local(YuMincho), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); } + +@font-face { + font-family: 'Han Songti CNS'; + src: local("Songti TC"), local("Lisong Pro"), local("Songti SC"), local(STSong), local(PMingLiU), local(SimSun); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Songti CNS'; + src: local(YuMincho), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"); } + +@font-face { + font-family: 'Han Songti GB'; + src: local("Songti SC"), local(STSong), local(SimSun), local(PMingLiU); } + +/** + * 粗體 + * Bold + */ +@font-face { + font-family: 'Han Songti'; + font-weight: 600; + src: local("STSongti SC Bold"), local("STSongti TC Bold"), local(STSongti-SC-Bold), local(STSongti-TC-Bold); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Songti'; + font-weight: 600; + src: local("YuMincho Demibold"), local("Hiragino Mincho ProN W6"), local("Hiragino Mincho Pro W6"), local(YuMin-Demibold), local(HiraMinProN-W6), local(HiraMinPro-W6); } + +@font-face { + font-family: 'Han Songti CNS'; + font-weight: 600; + src: local("STSongti TC Bold"), local("STSongti SC Bold"), local(STSongti-TC-Bold), local(STSongti-SC-Bold); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Songti CNS'; + font-weight: 600; + src: local("YuMincho Demibold"), local("Hiragino Mincho ProN W6"), local("Hiragino Mincho Pro W6"), local(YuMin-Demibold), local(HiraMinProN-W6), local(HiraMinPro-W6); } + +@font-face { + font-family: 'Han Songti GB'; + font-weight: 600; + src: local("STSongti SC Bold"), local(STSongti-SC-Bold); } + +@font-face { + font-family: 'Han Songti'; + src: local("Songti SC"), local("Songti TC"), local(STSongti), local("Lisong Pro"), local("MS Mincho"), local(SimSun), local(PMingLiU); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Songti'; + font-weight: 600; + src: local("STSongti TC Bold"), local("STSongti SC Bold"), local(STSongti-TC-Bold), local(STSongti-SC-Bold); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Songti CNS'; + src: local("Songti TC"), local("Lisong Pro"), local("Songti SC"), local(STSong), local("MS Mincho"), local(PMingLiU), local(SimSun); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Songti CNS'; + font-weight: 600; + src: local("STSongti TC Bold"), local("STSongti SC Bold"), local(STSongti-TC-Bold), local(STSongti-SC-Bold); + unicode-range: U+270C; } + +@font-face { + font-family: 'Han Songti GB'; + src: local("Songti SC"), local(STSong), local(SimSun); + unicode-range: U+270C; } + +/** + * 四大字體集・楷體 + * The Four Typefaces: Kaiti (Cursive) + */ +@font-face { + font-family: cursive; + src: local("Kaiti SC"), local(STKaiti), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(Kaiti), local(DFKai-SB); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Kaiti'; + src: local("Kaiti SC"), local(STKaiti), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(Kaiti), local(DFKai-SB); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Kaiti CNS'; + src: local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Kaiti GB'; + src: local("Kaiti SC"), local(STKaiti), local(Kai), local(Kaiti), local(DFKai-SB); } + +/** + * 粗體 + * Bold + */ +@font-face { + font-family: cursive; + font-weight: 600; + src: local("Kaiti SC Bold"), local(STKaiti-SC-Bold); } + +@font-face { + font-family: 'Han Kaiti'; + font-weight: 600; + src: local("Kaiti SC Bold"), local(STKaiti-SC-Bold); } + +@font-face { + font-family: 'Han Kaiti GB'; + font-weight: 600; + src: local("Kaiti SC Bold"), local(STKaiti-SC-Bold); } + +/** + * 四大字體集・仿宋體 + * The Four Typefaces: Fangsong + */ +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Fangsong'; + src: local(STFangsong), local(FangSong); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Fangsong CNS'; + src: local(STFangsong), local(FangSong); } + +@font-face { + unicode-range: U+4E00-9FFF, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3400-4DB5, U+9FBC-9FC2, U+9FC4-9FC5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+3040-309E, U+30A1-30FE, U+3007; + font-family: 'Han Fangsong GB'; + src: local(STFangsong), local(FangSong); } + +/* 簡易版漢字標點樣式修正 + Hanzi puncuation, ‘Biaodian’(zh) and ‘Yakumono’(ja) + ========================================================================== */ +/** + * 單點全形句號(.) + * Fullwidth full stop + */ +@font-face { + font-family: 'Biaodian Sans'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); + unicode-range: U+FF0E; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); + unicode-range: U+FF0E; } + +/** + * 間隔號(·) + * Middle dot + */ +@font-face { + font-family: 'Biaodian Sans'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); + unicode-range: U+00B7; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); + unicode-range: U+00B7; } + +/** + * 破折號(——) + * Em dash + */ +@font-face { + font-family: 'Biaodian Sans'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Yakumono Sans'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Arial Unicode MS"), local("MS Gothic"); + unicode-range: U+2014; } + +@font-face { + font-family: 'Yakumono Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"), local("Microsoft Yahei"); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); + unicode-range: U+2014; } + +/** + * 省略號(……) + * Ellipsis + */ +@font-face { + font-family: 'Biaodian Sans'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(Meiryo), local("MS Gothic"), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local("MS Mincho"), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Yakumono Sans'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(Meiryo), local("MS Gothic"); + unicode-range: U+2026; } + +@font-face { + font-family: 'Yakumono Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSongti), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSongti), local(SimSun), local(PMingLiU); + unicode-range: U+2026; } + +/** + * 彎引號(“‘’”) + * Curve quotes + */ +@font-face { + font-family: 'Biaodian Sans'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); + unicode-range: U+201C-201D, U+2018-2019; } + +/** + * 着重號(●) + * Emphasis dots + */ +@font-face { + font-family: 'Biaodian Sans'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local(Georgia), local("Times New Roman"), local("Droid Sans Fallback"); + unicode-range: U+25CF; } + +/* 進階版標點樣式修正 + Advanced Correction to Hanzi Punctuation + ========================================================================== */ +/** + * a. 句、逗、頓號(。,、) + * Period, comma, paused comma + * b. 分、冒、問、嘆號(;:?!) + * Colon, semicolon, question, exclam- + * ation marks + * c. 連接號、正、反斜線(-/\) + * En dash (fullwidth hyphen-minus), + * division slash, back slash + */ +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("MS Gothic"); + unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); + unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Heiti TC"), local("Lihei Pro"), local("Microsoft Jhenghei"), local(PMingLiU); + unicode-range: U+3002, U+FF0C, U+3001; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Heiti TC"), local("Lihei Pro"), local("Microsoft Jhenghei"), local(PMingLiU), local("MS Gothic"); + unicode-range: U+FF1B, U+FF1A, U+FF1F, U+FF01; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); + unicode-range: U+FF0D, U+FF0F, U+FF3C; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local(STSongti-TC-Regular), local("Lisong Pro"), local("Heiti TC"), local(PMingLiU); + unicode-range: U+3002, U+FF0C, U+3001; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(PMingLiU), local("MS Mincho"); + unicode-range: U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local("MS Gothic"); + unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Songti SC"), local(STSongti), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local("MS Mincho"); + unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(PMingLiU), local("MS Mincho"); + unicode-range: U+FF0D, U+FF0F, U+FF3C; } + +/** + * a. 引號(「『』」) + * Quotes + * b. 括號、書名號(()《》〈〉〔〕) + * Brackets + */ +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); + unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(SimSun); + unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); + unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(SimSun); + unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); + unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(SimSun); + unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; } + +@font-face { + font-family: 'Biaodian Sans'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Serif'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Pro Sans'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Pro Serif'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Pro Sans CNS'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Pro Serif CNS'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Pro Sans GB'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Biaodian Pro Serif GB'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +/** + * 襯線西文斜體 + * Latin italic serif + */ +@font-face { + font-family: 'Latin Italic Serif'; + src: local("Georgia Italic"), local("Times New Roman Italic"), local(Georgia-Italic), local(TimesNewRomanPS-ItalicMT), local(Times-Italic); } + +@font-face { + font-family: 'Latin Italic Serif'; + font-weight: 700; + src: local("Georgia Bold Italic"), local("Times New Roman Bold Italic"), local(Georgia-BoldItalic), local(TimesNewRomanPS-BoldItalicMT), local(Times-Italic); } + +/** + * 無襯線西文斜體 + * Latin italic sans-serif + */ +@font-face { + font-family: 'Latin Italic Sans'; + src: local("Helvetica Neue Italic"), local("Helvetica Oblique"), local("Arial Italic"), local(HelveticaNeue-Italic), local(Helvetica-LightOblique), local(Arial-ItalicMT); } + +@font-face { + font-family: 'Latin Italic Sans'; + font-weight: 700; + src: local("Helvetica Neue Bold Italic"), local("Helvetica Bold Oblique"), local("Arial Bold Italic"), local(HelveticaNeue-BoldItalic), local(Helvetica-BoldOblique), local(Arial-BoldItalicMT); } + +/** + * 文本數字 + * Text figures + */ +@font-face { + unicode-range: U+0030-0039; + font-family: 'Numeral TF Sans'; + src: local(Skia), local("Neutraface 2 Text"), local(Candara), local(Corbel); } + +@font-face { + unicode-range: U+0030-0039; + font-family: 'Numeral TF Serif'; + src: local(Georgia), local("Hoefler Text"), local("Big Caslon"); } + +/** + * 等高數字 + * Lining figures + */ +@font-face { + unicode-range: U+0030-0039; + font-family: 'Numeral LF Sans'; + src: local("Helvetica Neue"), local(Helvetica), local(Arial); } + +@font-face { + unicode-range: U+0030-0039; + font-family: 'Numeral LF Serif'; + src: local(Palatino), local("Palatino Linotype"), local("Times New Roman"); } + +@font-face { + font-family: 'Numeral TF Sans'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Numeral TF Serif'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Numeral LF Sans'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +@font-face { + font-family: 'Numeral LF Serif'; + src: local("Lying to Firefox"); + unicode-range: U+270C; } + +/** + * 注音符號 + * Zhuyin + */ +@font-face { + unicode-range: U+3105-312D, U+31A0-31BA, U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075; + font-family: 'Zhuyin Kaiti'; + src: url("fonts/zhuyin.eot") format("embedded-opentype"), url("fonts/zhuyin.otf") format("opentype"), url("fonts/zhuyin.ttf") format("truetype"), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(PMingLiU); } + +@font-face { + unicode-range: U+3105-312D, U+31A0-31BA, U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075; + font-family: 'Zhuyin Heiti'; + src: local("Hiragino Sans GB"), local("Microsoft Jhenghei"), url("fonts/zhuyin.eot") format("embedded-opentype"), url("fonts/zhuyin.otf") format("opentype"), url("fonts/zhuyin.ttf") format("truetype"), local(PMingLiU), local(SimSun), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF); } + +@font-face { + font-family: 'Zhuyin Heiti'; + src: local("Heiti TC"), local("Microsoft Jhenghei"), url("fonts/zhuyin.eot") format("embedded-opentype"), url("fonts/zhuyin.otf") format("opentype"), url("fonts/zhuyin.ttf") format("truetype"), local(PMingLiU), local(SimSun), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF); + unicode-range: U+3127, U+02C7, U+02CA-B, U+02D9; } + +/* 基礎頁面設定 + * Base + * ========================================================================== */ +html { + line-height: 1.3; + -webkit-font-smoothing: subpixel-antialiased; } + +/* 章節元素及內容群組元素 + * Sections & grouping content + * ========================================================================== */ +/* + * 段落、清單、圖表、引用區塊 + * Paragraphs, lists, figures and blockquotes + */ +html:lang(zh) .poem-like p, +html:lang(zh) p.poem-like, +html:lang(jp) .poem-like p, +html:lang(jp) p.poem-like { + margin-left: 2em; } +html:lang(zh) ol, +html:lang(zh) ul, +html:lang(jp) ol, +html:lang(jp) ul { + padding-left: 2em; } +html:lang(zh) article p, +html:lang(zh) article li, +html:lang(jp) article p, +html:lang(jp) article li { + line-height: 2; } +html:lang(zh) figure, +html:lang(zh) blockquote, +html:lang(jp) figure, +html:lang(jp) blockquote { + margin-left: 2em; + margin-right: 2em; + width: auto; } + html:lang(zh) figure blockquote, + html:lang(zh) blockquote blockquote, + html:lang(jp) figure blockquote, + html:lang(jp) blockquote blockquote { + margin-left: 1em; + margin-right: 1em; } +html:lang(zh) article blockquote, +html:lang(jp) article blockquote { + margin-right: 0; } +html:lang(zh) figure blockquote, +html:lang(jp) figure blockquote { + margin: 0; } +@media only screen and (max-width: 480px) { + html:lang(zh) .poem-like p, + html:lang(zh) p.poem-like, + html:lang(zh) blockquote, + html:lang(jp) .poem-like p, + html:lang(jp) p.poem-like, + html:lang(jp) blockquote { + margin-left: 1em; + margin-right: 1em; } } + +html:lang(jp).poem-like p, +html:lang(jp) .poem-like p, +html:lang(jp) p.poem-like, +html:lang(jp) blockquote { + margin-left: 1em; } + +/* + * 聯絡資訊 + * Contact information + */ +address:lang(zh), address:lang(ja) { + font-style: inherit; } + +/* + * 增進代碼區塊的易讀性 + * Enhance the readability of code blocks + */ +pre code { + display: block; + overflow: auto; + white-space: pre; + word-wrap: normal; } + +/* 字級語意元素及修訂元素 + * Text-level semantics & edits + * ========================================================================== */ +/* + * 連結、增訂 + * Hyperlinks and insertion + */ +html:lang(zh) a, +html:lang(zh) ins { + text-decoration: inherit; } +html:lang(zh) ins { + border-bottom: 3px double lightgrey; + padding-bottom: 0.05em; } + +/* + * 強調 + * Emphases + */ +em:lang(zh), +em:lang(ja) { + font-style: inherit; + border-bottom-style: dotted; + border-bottom-width: 2px; + padding-bottom: 0.05em; + -moz-text-emphasis: circle; + -webkit-text-emphasis: circle; + text-emphasis: circle; + -moz-text-emphasis-position: under; + -webkit-text-emphasis-position: under; + text-emphasis-position: under; + border-bottom-width: -webkit-calc(0px ); } + +em:lang(ja) { + -moz-text-emphasis: sesame; + -webkit-text-emphasis: sesame; + text-emphasis: sesame; + -moz-text-emphasis-position: over; + -webkit-text-emphasis-position: over; + text-emphasis-position: over; } + +/* + * 文章內重點 + * Importance in article + */ +article strong *:lang(zh), +article strong *:lang(ja) { + font-family: sans-serif; } + +/* + * 來源 + * Cites + */ +cite:lang(zh), cite:lang(ja), cite:lang(en).piece { + font-style: inherit; } +cite:lang(zh):before, cite:lang(zh):after { + content: "\300a"; + font-family: inherit; + line-height: inherit; } +cite:lang(zh):after { + content: "\300b"; } +cite:lang(zh).piece:before { + content: "\3008"; } +cite:lang(zh).piece:after { + content: "\3009"; } +cite:lang(ja):before { + content: "\300e"; } +cite:lang(ja):after { + content: "\300f"; } +cite:lang(ja).piece:before { + content: "\300c"; } +cite:lang(ja).piece:after { + content: "\300d"; } +cite:lang(en).piece:before, cite:lang(en).piece:after { + content: "\201c"; + font-family: inherit; } +cite:lang(en).piece:after { + content: "\201d"; } +cite:lang(en-GB).piece:before { + content: "\2018"; } +cite:lang(en-GB).piece:after { + content: "\2019"; } + +.no-cite-mark cite:before, .no-cite-mark cite:after, +cite.no-cite-mark:before, +cite.no-cite-mark:after { + content: "" !important; } + +/* + * 引用 + * Quotes + */ +q { + quotes: "\201c" "\201d" "\2018" "\2019" "\201c" "\201d" "\2018" "\2019" "\201c" "\201d" "\2018" "\2019"; } + q:lang(zh) { + quotes: "\300c" "\300d" "\300e" "\300f" "\300c" "\300d" "\300e" "\300f" "\300c" "\300d" "\300e" "\300f"; } + q:lang(zh-CN), q:lang(zh-Hans), q:lang(en) { + quotes: "\201c" "\201d" "\2018" "\2019" "\201c" "\201d" "\2018" "\2019" "\201c" "\201d" "\2018" "\2019"; } + q:lang(en-GB) { + quotes: "\2018" "\2019" "\201c" "\201d" "\2018" "\2019" "\201c" "\201d" "\2018" "\2019" "\201c" "\201d"; } + q:before { + content: open-quote; } + q:after { + content: close-quote; } + q:lang(ja):before, q:lang(ja):after { + content: none; } + +/* + * 術語 + * Definitions + */ +dfn:lang(zh), dfn:lang(ja) { + font-style: inherit; + font-weight: bold; } + +/* + * 代碼、輸入鍵、計算機輸出示例、格式預處理文字 + * Code, user input, computer output, preformatted text + */ +code, +kbd, +samp, +pre { + font-family: monospace, sans-serif; } + +/* + * 變音文字及變數 + * Alternative voices & Variables + */ +i, +var { + font-family: cursive, serif; + font-style: inherit; } + +/* + * 註記及增訂 + * Annotations & insertion + */ +*:lang(zh) u, +*:lang(zh) ins, +*:lang(ja) u, +*:lang(ja) ins { + border-bottom: 1px solid; + padding-bottom: 0.05em; + text-decoration: none; } + *:lang(zh) u + u, + *:lang(zh) u + ins, + *:lang(zh) ins + u, + *:lang(zh) ins + ins, + *:lang(ja) u + u, + *:lang(ja) u + ins, + *:lang(ja) ins + u, + *:lang(ja) ins + ins { + margin-left: 0.125em; } + +/* + * 小字標注 + * Ruby annotations + */ +ruby > rt:before { + content: "\ff08"; } +ruby > rt:after { + content: "\ff09"; } +ruby > rbc + rtc:before { + content: "\ff08"; } +ruby > rtc:after { + content: "\ff0c"; } +ruby > rtc:last-of-type:after { + content: "\ff09"; } +ruby > rt:before, ruby > rt:after { + display: inline-block; + overflow: hidden; + vertical-align: middle; + height: 0; + width: 0; + height: -moz-calc(1.3em ); + width: -moz-calc(1em ); } + +/* 功能支援偵測 + * Feature detection of browsers + * ========================================================================== */ +@font-face { + font-family: han-unicode-range; + src: local(Arial), local("Droid Sans"); } + +@font-face { + font-family: han-unicode-range; + src: local("Times New Roman"), local(Times), local("Droid Serif"); + unicode-range: U+270C; } + +/* 元素樣式修正 + * Style correction for elements + * ========================================================================== */ +/* + * 着重號 + * Text emphases + */ +html.han-js-rendered em:lang(zh) { + border-bottom-width: 0; + padding-bottom: 0; } + html.han-js-rendered em:lang(zh) span.biaodian, + html.han-js-rendered em:lang(zh) span.punct { + -moz-text-emphasis: none; + -webkit-text-emphasis: none; + text-emphasis: none; + -moz-text-emphasis-position: under; + -webkit-text-emphasis-position: under; + text-emphasis-position: under; } +.no-textemphasis em:lang(zh) { + line-height: 2; } + .no-textemphasis em:lang(zh) span.jinze, + .no-textemphasis em:lang(zh) span.latin.word { + display: inline-block; } + .no-textemphasis em:lang(zh) span.char { + font-style: inherit; + position: relative; } + .no-textemphasis em:lang(zh) span.char:after { + display: inline-block; + left: 0; + margin: .4em 0 0 0; + overflow: hidden; + position: absolute; + text-indent: 0; + top: 0; + height: 1.9em; + -moz-text-emphasis: none; + -webkit-text-emphasis: none; + text-emphasis: none; + -moz-text-emphasis-position: under; + -webkit-text-emphasis-position: under; + text-emphasis-position: under; + font-style: normal; + font-weight: normal; + line-height: 1.3; + text-decoration: none; + text-indent: 0; + content: "・"; + font-family: Meiryo, "MS Gothic", "MS Mincho" !important; + line-height: 1.75em; } + .no-textemphasis em:lang(zh) span.latin:after { + left: 50%; + margin: .4em 0 0 -.2em; + text-indent: -0.3em; + width: 0.3em; } + .no-textemphasis em:lang(zh) span.space:after, + .no-textemphasis em:lang(zh) span.biaodian:after, + .no-textemphasis em:lang(zh) span.punct:after { + content: none !important; } +html.han-js-rendered em:lang(ja) { + border-bottom-width: 0; + padding-bottom: 0; } + html.han-js-rendered em:lang(ja) span.biaodian, + html.han-js-rendered em:lang(ja) span.punct { + -moz-text-emphasis: none; + -webkit-text-emphasis: none; + text-emphasis: none; + -moz-text-emphasis-position: under; + -webkit-text-emphasis-position: under; + text-emphasis-position: under; } +.no-textemphasis em:lang(ja) { + line-height: 2; } + .no-textemphasis em:lang(ja) span.jinze, + .no-textemphasis em:lang(ja) span.latin.word { + display: inline-block; } + .no-textemphasis em:lang(ja) span.char { + font-style: inherit; + position: relative; } + .no-textemphasis em:lang(ja) span.char:after { + display: inline-block; + left: 0; + margin: -1.45em 0 0 .32em; + overflow: hidden; + position: absolute; + text-indent: 0; + top: 0; + height: 1.9em; + -moz-text-emphasis: none; + -webkit-text-emphasis: none; + text-emphasis: none; + -moz-text-emphasis-position: under; + -webkit-text-emphasis-position: under; + text-emphasis-position: under; + font-style: normal; + font-weight: normal; + line-height: 1.3; + text-decoration: none; + text-indent: 0; + content: "、"; + font-family: Meiryo, "MS Gothic", "MS Mincho" !important; + line-height: 1.75em; } + .no-textemphasis em:lang(ja) span.latin:after { + left: 50%; + margin: -1.45em 0 0 .1em; + text-indent: -0.3em; + width: 0.3em; } + .no-textemphasis em:lang(ja) span.space:after, + .no-textemphasis em:lang(ja) span.biaodian:after, + .no-textemphasis em:lang(ja) span.punct:after { + content: none !important; } + +/* + * 變音文字及變數 + * Alternative voices & Variables + */ +.no-fontface-kaiti i, +.no-fontface-kaiti var { + border-bottom: 3px double lightgrey; + padding-bottom: 0.05em; } + +/* + * 註記 + * Annotations + */ +html.han-js-rendered u + u, +html.han-js-rendered ins + ins { + margin-left: auto; } +html.han-js-rendered u.adjacent, +html.han-js-rendered ins.adjacent { + margin-left: 0.125em; } + +/* 實驗性底線 + * Experimental underlines + */ +.han-js-rendered.han-lab-underline u.adjacent { + margin-left: auto; } +.han-js-rendered.han-lab-underline u, +.han-js-rendered.han-lab-underline u *, +.han-js-rendered.han-lab-underline u *:before, +.han-js-rendered.han-lab-underline u *:after { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; } + +u.han-js-charized { + border-bottom: 0 none; + text-decoration: none; } + u.han-js-charized span.char:not(:first-of-type):not(:last-of-type) span, + u.han-js-charized hanla, + u.han-js-charized span.char:first-of-type span:after, + u.han-js-charized span.char:last-of-type span:after { + border-bottom: 1px solid; + padding-bottom: 0.05em; } + u.han-js-charized span.char:first-of-type span, + u.han-js-charized span.char:last-of-type span { + position: relative; } + u.han-js-charized span.char:first-of-type span:after, + u.han-js-charized span.char:last-of-type span:after { + content: ""; + display: inline-block; + left: 0; + margin-left: 1px; + position: absolute; + top: 0; + height: 100%; + width: -moz-calc(100% - 1px ); + width: -webkit-calc(100% - 1px ); + width: calc(100% - 1px ); } + u.han-js-charized span.char:last-of-type span:after { + margin: 0 1px 0 0; } + u.han-js-charized span.char:first-child:last-child span:after { + margin: 0 1px 0; + width: -moz-calc(100% - 2px ); + width: -webkit-calc(100% - 2px ); + width: calc(100% - 2px ); } + u.han-js-charized *:not(:first-child) span.char:first-of-type span:after, + u.han-js-charized *:not(:last-child) span.char:last-of-type span:after, + u.han-js-charized span.char:not(:first-child):first-of-type span:after, + u.han-js-charized span.char:not(:last-child):last-of-type span:after { + border-bottom: 0; } + u.han-js-charized *:not(:first-child) span.char:first-of-type span, + u.han-js-charized *:not(:last-child) span.char:last-of-type span, + u.han-js-charized span.char:not(:first-child):first-of-type span, + u.han-js-charized span.char:not(:last-child):last-of-type span { + border-bottom: 1px solid; + padding-bottom: 0.125em; } + u.han-js-charized hanla:first-child, + u.han-js-charized hanla:last-child { + border: 0 none; } + u.han-js-charized *:not(:first-child) hanla:first-child, + u.han-js-charized *:not(:last-child) hanla:last-child { + border: 1px solid; } + +/* + * 小字標注 + * Ruby annotations + */ +hruby { + display: inline; + line-height: 2; } + hruby rp { + display: none; } + hruby copy { + display: inline-block; + opacity: 0; + text-indent: -9999999px; + height: 0; + width: 0; } + hruby rb[annotation] { + display: inline-block; + position: relative; + text-indent: 0; } + hruby rb[annotation]:before { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + left: -200%; + position: absolute; + top: -0.5em; + vertical-align: middle; + -moz-transform: scale(0.55); + -ms-transform: scale(0.55); + -webkit-transform: scale(0.55); + transform: scale(0.55); + height: 1em; + width: 500%; + content: attr(annotation); + line-height: 1.5; + text-align: center; + text-indent: 0; } + hruby[complex] rb[annotation][order="1"]:before { + top: -0.5em; } + hruby[complex] rb[annotation][order="2"]:before { + bottom: -0.25em; + top: auto; } + hruby[rightangle] rb[annotation]:before { + bottom: -0.25em; + top: auto; + margin-left: -0.3em; + line-height: 1; } + hruby rb[zhuyin] { + display: inline-block; + position: relative; + text-indent: 0; + width: 1.7em; } + hruby rb[zhuyin]:before, hruby rb[zhuyin][diao]:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + position: absolute; + right: 0.15em; + top: 0; + -moz-transform: scale(0.55); + -ms-transform: scale(0.55); + -webkit-transform: scale(0.55); + transform: scale(0.55); + height: 2.7em; + width: 0.8em; + -moz-text-emphasis: none; + -webkit-text-emphasis: none; + text-emphasis: none; + -moz-text-emphasis-position: under; + -webkit-text-emphasis-position: under; + text-emphasis-position: under; + font-style: normal; + font-weight: normal; + line-height: 1.3; + text-decoration: none; + text-indent: 0; } + hruby rb[zhuyin]:before { + content: attr(yin); + line-height: 0.9; + white-space: pre-wrap; + word-break: break-all; } + hruby rb[zhuyin][diao]:after { + right: -0.45em; + width: 1em; + content: attr(diao); } + hruby rb[zhuyin][length="1"]:before { + margin-top: 0.25em; } + hruby rb[zhuyin][length="1"]:after { + margin-top: -0.35em; } + hruby rb[zhuyin][length="2"]:before { + margin-top: -0.15em; } + hruby rb[zhuyin][length="2"]:after { + margin-top: 0.125em; } + hruby rb[zhuyin][length="3"]:before { + margin-top: -0.4em; } + hruby rb[zhuyin][length="3"]:after { + margin-top: 0.25em; } + hruby rb[zhuyin][diao="˙"]:after { + right: -0.2em; } + hruby rb[zhuyin][diao="˙"][length="1"]:after { + margin-top: 0; } + hruby rb[zhuyin][diao="˙"][length="2"]:after { + margin-top: -0.25em; } + hruby rb[zhuyin][diao="˙"][length="3"]:after { + margin-top: -0.6em; } + hruby rb[zhuyin][diao="˪"]:after, hruby rb[zhuyin][diao="˫"]:after { + -moz-transform: scale(0.6); + -ms-transform: scale(0.6); + -webkit-transform: scale(0.6); + transform: scale(0.6); + margin-right: -0.15em; } + hruby rb[zhuyin][diao^="ㆴ"]:after, hruby rb[zhuyin][diao^="ㆵ"]:after, hruby rb[zhuyin][diao^="ㆶ"]:after, hruby rb[zhuyin][diao^="ㆷ"]:after, hruby rb[zhuyin][diao="󳆴"]:after, hruby rb[zhuyin][diao="󳆵"]:after, hruby rb[zhuyin][diao="󳆶"]:after, hruby rb[zhuyin][diao="󳆷"]:after { + margin-right: -0.2em; + margin-top: 0.55em; } + @media screen and (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 192dpi) { + hruby rb[zhuyin] { + width: 1.55em; } + hruby rb[zhuyin]:before, hruby rb[zhuyin][diao]:after { + -moz-transform: scale(0.4); + -ms-transform: scale(0.4); + -webkit-transform: scale(0.4); + transform: scale(0.4); + right: 0.05em; + line-height: 0.9; } + hruby rb[zhuyin][diao]:after { + right: -0.45em; } + hruby rb[zhuyin][length="1"]:before { + margin-top: 0; } + hruby rb[zhuyin][length="1"]:after { + margin-top: -0.125em; } + hruby rb[zhuyin][length="2"]:before { + margin-top: -0.2em; } + hruby rb[zhuyin][length="2"]:after { + margin-top: 0; } + hruby rb[zhuyin][length="3"]:after { + margin-top: 0.125em; } + hruby rb[zhuyin][diao="˙"]:after { + right: -0.275em; } + hruby rb[zhuyin][diao="˙"][length="1"]:after { + margin-top: -0.125em; } + hruby rb[zhuyin][diao="˙"][length="2"]:after { + margin-top: -0.25em; } + hruby rb[zhuyin][diao="˙"][length="3"]:after { + margin-top: -0.475em; } + hruby rb[zhuyin][diao="˪"]:after, hruby rb[zhuyin][diao="˫"]:after { + -moz-transform: scale(0.55); + -ms-transform: scale(0.55); + -webkit-transform: scale(0.55); + transform: scale(0.55); + margin-right: -0.15em; } + hruby rb[zhuyin][diao^="ㆴ"]:after, hruby rb[zhuyin][diao^="ㆵ"]:after, hruby rb[zhuyin][diao^="ㆶ"]:after, hruby rb[zhuyin][diao^="ㆷ"]:after, hruby rb[zhuyin][diao="󳆴"]:after, hruby rb[zhuyin][diao="󳆵"]:after, hruby rb[zhuyin][diao="󳆶"]:after, hruby rb[zhuyin][diao="󳆷"]:after { + margin-right: -0.15em; + margin-top: 0.4em; } } + +/* 排版功能 + * Typography + * ========================================================================== */ +/* + * 避頭尾禁則 + * Biaodian rules + */ +.han-js-bitouwei-rendered span.bitouwei { + display: inline-block; + text-indent: 0; } + +.han-js-charized span.char.space, +.han-js-charized span.char > span { + display: inline; } + +/* + * 漢拉間隙 + * Kerning between Hanzi and Latin letter + */ +hanla, html:not(.han-la) hanla { + display: none; } +html.han-la hanla:lang(zh), html.han-la hanla:lang(ja) { + display: inline; + position: static; } +html.han-la hanla:after { + content: " "; + display: inline; + font-family: Arial; + font-size: 0.89em; } + +html.han-la code hanla, +html.han-la pre hanla, +html.han-la kbd hanla, +html.han-la samp hanla { + display: none; } +html.han-la ol > hanla, +html.han-la ul > hanla { + display: none; } + +/* 基礎頁面 + * Base + * ========================================================================== */ +html:lang(zh) { + font-family: "Biaodian Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +html:lang(ja) { + font-family: "Yakumono Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } +html.han-biaodian-pro { + font-family: "Biaodian Pro Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +html.han-biaodian-pro-cns { + font-family: "Biaodian Pro Sans CNS", "Helvetica Neue", Helvetica, Arial, "Han Heiti CNS", sans-serif; } +html.han-biaodian-pro-gb { + font-family: "Biaodian Pro Sans GB", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; } +html:not(:lang(zh)):not(:lang(ja)), +html *:not(:lang(zh)):not(:lang(ja)) { + font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } + +/* 內容群組元素 + * Grouping content + * ========================================================================== */ +/* + * 引用區塊 + * Blockquotes + */ +article blockquote:lang(zh) { + font-family: "Biaodian Serif", Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } +article blockquote:lang(ja) { + font-family: 'Yakumono Serif', 'Numeral LF Serif', Georgia, 'Times New Roman', serif; } +html.han-biaodian-pro article blockquote { + font-family: 'Biaodian Pro Serif', 'Numeral LF Serif', Georgia, 'Times New Roman', 'Han Kaiti', cursive, serif; } +html.han-biaodian-pro-cns article blockquote { + font-family: 'Biaodian Pro Serif CNS', 'Numeral LF Serif', Georgia, 'Times New Roman', 'Han Kaiti CNS', cursive, serif; } +html.han-biaodian-pro-gb article blockquote { + font-family: 'Biaodian Pro Serif GB', 'Numeral LF Serif', Georgia, 'Times New Roman', 'Han Kaiti GB', cursive, serif; } +article blockquote:not(:lang(zh)):not(:lang(ja)), +article blockquote *:not(:lang(zh)):not(:lang(ja)) { + font-family: Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } + +article figure blockquote:lang(zh) { + font-family: "Biaodian Serif", Georgia, Times, "Times New Roman", "Han Songti", serif; } +article figure blockquote:lang(ja) { + font-family: 'Yakumono Serif', 'Numeral LF Serif', Georgia, 'Times New Roman', serif; } +html.han-biaodian-pro article figure blockquote { + font-family: 'Biaodian Pro Serif', 'Numeral LF Serif', Georgia, 'Times New Roman', 'Han Songti', serif; } +html.han-biaodian-pro-cns article figure blockquote { + font-family: 'Biaodian Pro Serif CNS', 'Numeral LF Serif', Georgia, 'Times New Roman', 'Han Songti CNS', serif; } +html.han-biaodian-pro-gb article figure blockquote { + font-family: 'Biaodian Pro Serif GB', 'Numeral LF Serif', Georgia, 'Times New Roman', 'Han Songti GB', serif; } + +article figure figcaption:lang(zh) { + font-family: "Biaodian Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; + font-size: 0.85em; } +article figure figcaption:lang(ja) { + font-family: "Yakumono Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 0.85em; } +html.han-biaodian-pro article figure figcaption { + font-family: "Biaodian Pro Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +html.han-biaodian-pro-cns article figure figcaption { + font-family: "Biaodian Pro Sans CNS", "Helvetica Neue", Helvetica, Arial, "Han Heiti CNS", sans-serif; } +html.han-biaodian-pro-gb article figure figcaption { + font-family: "Biaodian Pro Sans GB", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; } +article figure figcaption:not(:lang(zh)):not(:lang(ja)), +article figure figcaption *:not(:lang(zh)):not(:lang(ja)) { + font-family: Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } + +/* 字級語意元素 + * Text-level semantics + * ========================================================================== */ +/* + * 強調 + * Emphases + */ +.no-textemphasis em:lang(zh) span.cjk:after, +.no-textemphasis em:lang(zh) span.latin:after, .no-textemphasis em:lang(ja) span.cjk:after, +.no-textemphasis em:lang(ja) span.latin:after { + font-family: "Hiragino Mincho ProN", "Hiragino Mincho Pro", Meiryo, "MS Gothic", "MS Mincho" serif !important; } + +/* + * 來源 + * Cites + */ +cite:lang(en).piece:before, cite:lang(en).piece:after { + font-family: Georgia, Times, "Times New Roman", serif; } + +/* + * 文章內重點 + * Importance in article + */ +article strong:lang(zh) { + font-family: "Biaodian Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +article strong:lang(ja) { + font-family: "Yakumono Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } +html.han-biaodian-pro article strong { + font-family: "Biaodian Pro Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +html.han-biaodian-pro-cns article strong { + font-family: "Biaodian Pro Sans CNS", "Helvetica Neue", Helvetica, Arial, "Han Heiti CNS", sans-serif; } +html.han-biaodian-pro-gb article strong { + font-family: "Biaodian Pro Sans GB", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; } +article strong:not(:lang(zh)):not(:lang(ja)), +article strong *:not(:lang(zh)):not(:lang(ja)) { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } + +/* + * 代碼、輸入鍵、計算機輸出示例、格式預處理文字 + * Code, user input, computer output, preformatted text + */ +code, +kbd, +pre, +samp { + font-family: Menlo, Courier, "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif, sans-serif; } + code:lang(zh), + kbd:lang(zh), + pre:lang(zh), + samp:lang(zh) { + font-family: "Biaodian Sans", Menlo, Courier, "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif, sans-serif; } + code:lang(ja), + kbd:lang(ja), + pre:lang(ja), + samp:lang(ja) { + font-family: "Yakumono Sans", Menlo, Courier; } + html.han-biaodian-pro code, html.han-biaodian-pro + kbd, html.han-biaodian-pro + pre, html.han-biaodian-pro + samp { + font-family: "Biaodian Pro Sans", Menlo, Courier, "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif, sans-serif; } + html.han-biaodian-pro-cns code, html.han-biaodian-pro-cns + kbd, html.han-biaodian-pro-cns + pre, html.han-biaodian-pro-cns + samp { + font-family: "Biaodian Pro Sans CNS", Menlo, Courier, "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif, sans-serif; } + html.han-biaodian-pro-gb code, html.han-biaodian-pro-gb + kbd, html.han-biaodian-pro-gb + pre, html.han-biaodian-pro-gb + samp { + font-family: "Biaodian Pro Sans GB", Menlo, Courier, "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif, sans-serif; } + code:not(:lang(zh)):not(:lang(ja)), + code *:not(:lang(zh)):not(:lang(ja)), + kbd:not(:lang(zh)):not(:lang(ja)), + kbd *:not(:lang(zh)):not(:lang(ja)), + pre:not(:lang(zh)):not(:lang(ja)), + pre *:not(:lang(zh)):not(:lang(ja)), + samp:not(:lang(zh)):not(:lang(ja)), + samp *:not(:lang(zh)):not(:lang(ja)) { + font-family: Menlo, Courier, "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif, sans-serif; } + +/* + * 變音文字及變數 + * Alternative voices & Variables + */ +i:lang(zh), +var:lang(zh) { + font-family: "Biaodian Serif", "Latin Italic Serif", Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } +i:lang(ja), +var:lang(ja) { + font-family: "Yakumono Serif", "Latin Italic Serif", cursive, serif; } +html.han-biaodian-pro i, html.han-biaodian-pro +var { + font-family: "Biaodian Pro Serif", "Latin Italic Serif", Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } +html.han-biaodian-pro-cns i, html.han-biaodian-pro-cns +var { + font-family: "Biaodian Pro Sans CNS", "Latin Italic Serif", Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } +html.han-biaodian-pro-gb i, html.han-biaodian-pro-gb +var { + font-family: "Biaodian Pro Sans GB", "Latin Italic Serif", Georgia, Times, "Times New Roman", "Han Kaiti", cursive, "Han Songti", serif; } +i:not(:lang(zh)):not(:lang(ja)), +var:not(:lang(zh)):not(:lang(ja)) { + font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +i *:not(:lang(zh)):not(:lang(ja)), +var *:not(:lang(zh)):not(:lang(ja)) { + font-family: "Latin Italic Serif", Georgia, Times, "Times New Roman", "Han Songti", serif; } + +article blockquote i:lang(zh), +article blockquote var:lang(zh) { + font-family: "Biaodian Sans", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +article blockquote i:lang(ja), +article blockquote var:lang(ja) { + font-family: "Yakumono Sans", "Latin Italic Sans", sans-serif; } +html.han-biaodian-pro article blockquote i, html.han-biaodian-pro +article blockquote var { + font-family: "Biaodian Pro Sans", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +html.han-biaodian-pro-cns article blockquote i, html.han-biaodian-pro-cns +article blockquote var { + font-family: "Biaodian Pro Sans CNS", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +html.han-biaodian-pro-gb article blockquote i, html.han-biaodian-pro-gb +article blockquote var { + font-family: "Biaodian Pro Sans GB", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } +article blockquote i:not(:lang(zh)):not(:lang(ja)), +article blockquote var:not(:lang(zh)):not(:lang(ja)) { + font-family: "Latin Italic Serif", Georgia, Times, "Times New Roman", "Han Songti", serif; } +article blockquote i *:not(:lang(zh)):not(:lang(ja)), +article blockquote var *:not(:lang(zh)):not(:lang(ja)) { + font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; } + +/* + * 小字標注 + * Ruby annotations + */ +hruby[generic] rb[zhuyin]:after { + font-family: "Zhuyin Kaiti", cursive, serif; } +hruby[generic="sans"] rb[zhuyin]:before, +hruby[generic="sans"] rb[diao^="ㆴ"]:after, +hruby[generic="sans"] rb[diao^="ㆵ"]:after, +hruby[generic="sans"] rb[diao^="ㆶ"]:after, +hruby[generic="sans"] rb[diao^="ㆷ"]:after, +hruby[generic="sans"] rb[diao="󳆴"]:after, +hruby[generic="sans"] rb[diao="󳆵"]:after, +hruby[generic="sans"] rb[diao="󳆶"]:after, +hruby[generic="sans"] rb[diao="󳆷"]:after { + font-family: "Zhuyin Heiti", sans-serif; } +hruby[generic] rb[diao^="ㆴ"]:after, +hruby[generic] rb[diao^="ㆵ"]:after, +hruby[generic] rb[diao^="ㆶ"]:after, +hruby[generic] rb[diao^="ㆷ"]:after { + -moz-font-feature-settings: "liga, dlig"; + -ms-font-feature-settings: "liga", "dlig"; + -webkit-font-feature-settings: "liga", "dlig"; + font-feature-settings: "liga", "dlig"; + font-family: "Zhuyin Kaiti", cursive, serif; } +hruby[generic="serif"] rb[zhuyin]:before { + font-family: "Zhuyin Kaiti", cursive, serif; } diff --git a/ajax/libs/Han/2.3.0/han.js b/ajax/libs/Han/2.3.0/han.js new file mode 100644 index 000000000..8766f8fbb --- /dev/null +++ b/ajax/libs/Han/2.3.0/han.js @@ -0,0 +1,1415 @@ + + +/*! + * 漢字標準格式 v2.3 + * Hanzi-optimised CSS Mode + * + * Lisence: MIT Lisence + * Last-Modified: 2014/2/7 + */ + +;(function(window, $){ + var version = '2.3', + + tests = [], + rubies, + + unicode = [], + + rendered = 'han-js-rendered', + classes = [rendered], + fontfaces = [], + + + han = 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['kaiti'] = test_for_fontface( 'Han Kaiti' ) + fontfaces['fangsong'] = test_for_fontface( 'Han Fangsong' ) + + for ( var font in fontfaces ) { + classes.push( ( fontfaces[font] ? '' : 'no-' ) + 'fontface-' + font ) + } + + // altogether + $('html').addClass( classes.join(' ') ) + + init() + }) + }, + + + init = function( range ) { + if ( !range && $('html').hasClass('no-han-init') ) + return + + var range = range || 'body' + + if ( range !== 'body' && !$(range).hasClass(rendered) ) + $(range).addClass(rendered) + else if ( range === 'body' && !$('html').hasClass(rendered) ) + $('html').addClass(rendered) + + + + /* + * 加強漢字註音功能 + * --- + * Enhance `` element + * + * **注意:**需置於``的hack前。 + * + * **Note:** The necessity of being + * placed before the hack of + * the `` element is required. + */ + + // 語意類別簡化 + var _ruby = $(range).find('ruby, rtc') + _ruby.filter('.pinyin').addClass('romanization') + _ruby.filter('.mps').addClass('zhuyin') + _ruby.filter('.romanization').addClass('annotation') + + $(range).find('ruby').each(function() { + var html = $(this).html(), + that = $(this), + hruby = document.createElement('hruby') + + // 羅馬拼音(在不支援``的瀏覽器下) + if ( !tests['ruby']() && + !that.hasClass('complex') && + !that.hasClass('zhuyin') && + !that.hasClass('rightangle') ) { + + // 將拼音轉為元素屬性以便CSS產生偽類 + that + .find('rt') + .each(function(){ + var anno = $(this).html(), + prev = this.previousSibling, + text = prev.nodeValue + + prev.nodeValue = '' + + $(prev).before( + $('') + .html( text ) + .attr('annotation', anno) + .replaceWith(_copy) + ) + + $(this).replaceWith( + _copy().html(anno) + ) + }) + + that + .replaceWith( + $(hruby) + .html( $(this).html() ) + ) + + } else { + var attr = {} + + // 國語注音、台灣方言音符號 + if ( that.hasClass('zhuyin') ) { + // 將注音轉為元素屬性以便CSS產生偽類 + that.find('rt') + .each(function(){ + _apply_zhuyin(this) + }) + + // 雙行文字註記 + } else if ( that.hasClass('complex') ) { + attr.complex = 'complex' + + _apply_annotation(this) + + + // 拼音、注音直角顯示 + } else if ( that.hasClass('rightangle') ) { + attr.rightangle = 'rightangle' + + + // 國語注音、台灣方言音符號 + that.find('rtc.zhuyin') + .hide() + .each(function(){ + var t = $(this).prevAll('rbc'), + c, len, data + + $(this).find('rt') + .each(function(i){ + var rb = t.find('rb:not([annotation])').eq(i) + if($(this).html()) _apply_zhuyin( this, rb ) + }) + + $(this).nextAll('rt') + .each(function(i){ + var rb = t.find('rb:not([annotation])').eq(i) + if($(this).html()) _apply_zhuyin( this, rb ) + }) + }) + + // 羅馬拼音或文字註記 + _apply_annotation(this) + } + + // 以``元素替代``,避免UA原生樣式的干擾 + that.filter(function(){ + return $(this).hasClass("zhuyin") || + $(this).hasClass("complex") || + $(this).hasClass("rightangle") + }).replaceWith( + $(hruby) + .html( $(this).html().replace(/(.*<\/rbc>).*/, '$1') ) + .attr('generic', _get_zhuyin_font(this)) + .attr(attr) + ) + } + }) + + + + /* + * 漢拉間隙 + * --- + * Kerning between Hanzi and Latin Letter + * + */ + + if ( $('html').hasClass('han-la') ) + $(range).each(function(){ + var hanzi = unicode_set('hanzi'), + latin = unicode_set('latin') + '|' + unicode['punc'][0], + punc = unicode['punc'] + + patterns = [ + '/(' + hanzi + ')(' + latin + '|' + punc[1] + ')/ig', + '/(' + latin + '|' + punc[2] + ')(' + hanzi + ')/ig' + ] + + + patterns.forEach(function( exp ){ + findAndReplaceDOMText(this, { + find: eval(exp), + replace: '$1$2' + }) + }, this) + + findAndReplaceDOMText(this, { + find: '', + replace: function(){ + return document.createElement('hanla') + } + }) + + this.normalize() + + $('* > hanla:first-child').parent().each(function(){ + if ( this.firstChild.nodeType == 1 ) { + $(this).before( $('') ) + $(this).find('hanla:first-child').remove() + } + }) + }) + + + + /* + * 修正相鄰註記元素``的底線相連問題 + * --- + * fixing the underline-adjacency issue on `` element + * + */ + + if ( $('html').hasClass('han-lab-underline') ) + $(range).find('u').charize({'bitouwei': false}, true, true) + + $(range).find('u, ins').each(function(){ + var next = this.nextSibling + + while ( next != null && ( next.nodeName === "WBR" || next.nodeType == 8 )) + next = next.nextSibling + + $(next).filter('u, ins').addClass('adjacent') + }) + + + + /* 強調元素``的着重號 + * --- + * punctuation: CJK emphasis dots on `` element + * + */ + + $(range).find('em').charize({ + latin: ( tests['textemphasis']() ) ? 'none' : 'individual' + }) + }, + + + + unicode_set = function( set ) { + var join = ( set.match(/[hanzi|latin]/) ) ? true : false, + result = ( join ) ? unicode[set].join('|') : unicode[set] + + return result + }, + + + _span = function( className ) { + var span = document.createElement('span') + span.className = className + + return span + }, + + + _copy = function() { + return $(document.createElement('copy')) + }, + + + _apply_annotation = function( node ) { + $(node).find('rbc').find('rb') + .each(function(i){ + $(this).attr('index', i) + }) + + $(node).find('rtc:not(.zhuyin)') + .hide() + .each(function(t){ + var c = 0, + rtc = $(this), + rbc = $(this).prevAll('rbc'), + len = $(this).find('rt').length || $(this).nextAll('rt').length, + data = [] + + $(this).find('rt') + .each(function(h){ + var anno = $(this).html(), + rbspan = $(this).attr('rbspan') || 1, + i = c + + c += Number(rbspan) + + data[h] = { + 'annotation': anno, + 'order': (t==0) ? '1' : '2' + } + + for ( var j=i; j') + .attr( data[k] ) + ) + } + }) + .remove() + + $(node).find('rb') + .removeAttr('set index') + .filter('rb[annotation]') + .each(function(){ + var t = $(this).attr('annotation') + $(this).after( _copy().html( t ) ) + }) + }, + + + _get_zhuyin_font = function( node ) { + var reg = /(sans-serif|monospace)$/, + generic = $(node).css('font-family'), + font = generic.match(reg) ? 'sans' : 'serif' + + return font + }, + + + _apply_zhuyin = function( node, rb ) { + var sm = unicode['zhuyin']['shengmu'], + jy = unicode['zhuyin']['jieyin'], + ym = unicode['zhuyin']['yunmu'], + yj = unicode['zhuyin']['yunjiao'], + tone = unicode['zhuyin']['diao'], + + prev, text, zi, + zy = $(node).html(), + yin, diao, form, length, data + + form = ( zy.match(eval('/(' + sm + ')/')) ) ? 'shengmu' : '' + form += ( zy.match(eval('/(' + jy + ')/')) ) ? (( form !== '' ) ? '-' : '') + 'jieyin' : '' + form += ( zy.match(eval('/(' + ym + ')/')) ) ? (( form !== '' ) ? '-' : '') + 'yunmu' : '' + + yin = zy + .replace(eval('/(' + tone + ')/g'), '') + .replace(eval('/(' + yj + '[\u0358\u030d]?)/g'), '') + + length = (yin) ? yin.length : 0 + + diao = ( zy.match(/(\u02D9)/) ) ? '\u02D9' : + ( zy.match(/(\u02CA)/) ) ? '\u02CA' : + ( zy.match(/([\u02C5\u02C7])/) ) ? '\u02C7' : + ( zy.match(/(\u02CB)/) ) ? '\u02CB' : + ( zy.match(/(\u02EA)/) ) ? '\u02EA' : + ( zy.match(/(\u02EB)/) ) ? '\u02EB' : + ( zy.match(/(\u31B4[\u0358\u030d])/) ) ? '\u31B4\u0358' : + ( zy.match(/(\u31B5[\u0358\u030d])/) ) ? '\u31B5\u0358' : + ( zy.match(/(\u31B6[\u0358\u030d])/) ) ? '\u31B6\u0358' : + ( zy.match(/(\u31B7[\u0358\u030d])/) ) ? '\u31B7\u0358' : + ( zy.match(/(\u31B4)/) ) ? '\u31B4' : + ( zy.match(/(\u31B5)/) ) ? '\u31B5' : + ( zy.match(/(\u31B6)/) ) ? '\u31B6' : + ( zy.match(/(\u31B7)/) ) ? '\u31B7' : '' + + data = { + 'zhuyin': zy, + 'yin': yin, + 'diao': diao, + 'length': length, + 'form': form + } + + if ( rb ) + rb + .attr(data) + .append( _copy().html( zy ) ) + else { + prev = node.previousSibling + text = prev.nodeValue.split('') + zi = text.pop() + prev.nodeValue = text.join('') + + $(node) + .before( + $('') + .attr(data) + .text( zi ) + ) + .replaceWith( _copy().html( zy ) ) + } + }, + + + findAndReplaceDOMText = function( a, b ) { + var b = b + + b.filterElements = function( el ) { + var name = el.nodeName.toLowerCase(), + classes = ( el.nodeType == 1 ) ? el.getAttribute('class') : '', + charized = ( classes && classes.match(/han-js-charized/) != null ) ? true : false + + return name !== 'style' && name !== 'script' && !charized + } + + return window.findAndReplaceDOMText(a,b) + }, + + + inject_element_with_styles = function( rule, callback, nodes, testnames ) { + var style, ret, node, docOverflow, + + docElement = document.documentElement, + div = document.createElement('div'), + body = document.body, + fakeBody = body || document.createElement('body') + + + style = [''].join('') + + ;(body ? div : fakeBody).innerHTML += style + fakeBody.appendChild(div) + + if ( !body ) { + fakeBody.style.background = '' + fakeBody.style.overflow = 'hidden' + docOverflow = docElement.style.overflow + docElement.style.overflow = 'hidden' + docElement.appendChild(fakeBody) + } + + ret = callback(div, rule) + + if ( !body ) { + fakeBody.parentNode.removeChild(fakeBody) + docElement.style.overflow = docOverflow + } else + div.parentNode.removeChild(div) + + return !!ret + }, + + + write_on_canvas = function( text, font ) { + var canvasNode = document.createElement('canvas') + canvasNode.width = '50' + canvasNode.height = '20' + + canvasNode.style.display = 'none' + canvasNode.className = 'han_support_tests' + document.body.appendChild(canvasNode) + var ctx = canvasNode.getContext('2d') + + ctx.textBaseline = 'top' + ctx.font = '15px ' + font + ', sans-serif' + ctx.fillStyle = 'black' + ctx.strokeStyle = 'black' + + ctx.fillText( text, 0, 0 ) + + return ctx + }, + + + test_for_fontface = function( test, compare, zi ) { + if ( !tests['fontface']() ) + return false + + var test = test, + compare = compare || 'sans-serif', + zi = zi || '辭Q' + + try { + var sans = write_on_canvas( zi, compare ), + test = write_on_canvas( zi, test ), + support + + for (var j=1; j<=20; j++) { + for (var i=1; i<=50; i++) { + var sansData = sans.getImageData(i, j, 1, 1).data, + testData = test.getImageData(i, j, 1, 1).data, + + alpha = [] + + alpha['sans'] = sansData[3] + alpha['test'] = testData[3] + + if ( support !== 'undefined' && alpha['test'] != alpha['sans'] ) + support = true + else if ( support ) + break + if ( i == 20 && j == 20 && !support ) + support = false + } + } + + $('canvas.han_support_tests').remove() + return support + } catch ( err ) { + return false + } + } + + + test_for_unicoderange = function() { + return !test_for_fontface( 'han-unicode-range', 'Arial, "Droid Sans"', 'a' ) + } + + + /** + * -------------------------------------------------------- + * Unicode區段說明(6.2.0) + * Unicode blocks + * -------------------------------------------------------- + * 或參考: + * http://css.hanzi.co/manual/api/javascript_jiekou-han.unicode + * -------------------------------------------------------- + * + ** 以下歸類為「拉丁字母」(`unicode('latin')`)** + * + * 基本拉丁字母:a-z + * 阿拉伯數字:0-9 + * 拉丁字母補充-1:[\u00C0-\u00FF] + * 拉丁字母擴展-A區:[\u0100-\u017F] + * 拉丁字母擴展-B區:[\u0180-\u024F] + * 拉丁字母附加區:[\u1E00-\u1EFF] + * + ** 符號:[~!@#&=_\$\%\^\*\-\+\,\.\/(\\)\?\:\'\"\[\]\(\)'"<>‘“”’] + * + * -------------------------------------------------------- + * + ** 以下歸類為「漢字」(`unicode('hanzi')`)** + * + * CJK一般:[\u4E00-\u9FFF] + * CJK擴展-A區:[\u3400-\u4DB5] + * CJK擴展-B區:[\u20000-\u2A6D6] + * CJK Unicode 4.1:[\u9FA6-\u9FBB]、[\uFA70-\uFAD9] + * CJK Unicode 5.1:[\u9FBC-\u9FC3] + * CJK擴展-C區:[\u2A700-\u2B734] + * CJK擴展-D區:[\u2B740-\u2B81D](急用漢字) + * CJK擴展-E區:[\u2B820-\u2F7FF](**註**:暫未支援) + * CJK擴展-F區(**註**:暫未支援) + * CJK筆畫區:[\u31C0-\u31E3] + * 數字「〇」:[\u3007] + * 日文假名:[\u3040-\u309E][\u30A1-\u30FA][\u30FD\u30FE](**註**:排除片假名中點、長音符) + * + * CJK相容表意文字: + * [\uF900-\uFAFF](**註**:不使用) + * [\uFA0E-\uFA0F\uFA11\uFA13-\uFA14\uFA1F\uFA21\uFA23-\uFA24\uFA27-\uFA29](**註**:12個例外) + * -------------------------------------------------------- + * + ** 符號 + * [·・︰、,。:;?!—⋯….·「『(〔【《〈“‘」』)〕】》〉’”–ー—] + * + ** 其他 + * + * 漢語注音符號、擴充:[\u3105-\u312D][\u31A0-\u31BA] + * 國語五聲調(三聲有二種符號):[\u02D9\u02CA\u02C5\u02C7\u02CB] + * 台灣漢語方言音擴充聲調:[\u02EA\u02EB] + * + */ + + unicode['latin'] = [ + '[A-Za-z0-9\u00C0-\u00FF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF]' + ] + + unicode['punc'] = [ + '[@&=_\,\.\?\!\$\%\^\*\-\+\/]', + '[\(\\[\'"<‘“]', + '[\)\\]\'">”’]' + ] + + unicode['hanzi'] = [ + '[\u4E00-\u9FFF]', + '[\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]', + '\uD86D[\uDC00-\uDF3F]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD869[\uDF00-\uDFFF]', + '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]', + '[\u31C0-\u31E3]' + ] + + unicode['biaodian'] = [ + '[·・︰、,。:;?!—ー⋯….·/]', + '[「『(〔【《〈“‘]', + '[」』)〕】》〉’”]' + ] + + unicode['zhuyin'] = [] + unicode['zhuyin'][0] = '[\u3105-\u312D\u31A0-\u31BA]' + unicode['zhuyin']['shengmu'] = '[\u3105-\u3119\u312A-\u312C\u31A0-\u31A3]' + unicode['zhuyin']['jieyin'] = '[\u3127-\u3129]' + unicode['zhuyin']['yunmu'] = '[\u311A-\u3126\u312D\u31A4-\u31B3\u31B8-\u31BA]' + unicode['zhuyin']['yunjiao'] = '[\u31B4-\u31B7]' + unicode['zhuyin']['diao'] = '[\u02D9\u02CA\u02C5\u02C7\u02CB\u02EA\u02EB]' + + + + /** + * tests for HTML5/CSS3 features + * + */ + + /* CSS3 property: `column-width` */ + tests['columnwidth'] = function() { + var cw = $('

tester
'), + + bool = ( /^200px$/.test( cw.css("-webkit-column-width") ) || + /^200px$/.test( cw.css("-moz-column-width") ) || + /^200px$/.test( cw.css("-ms-column-width") ) || + /^200px$/.test( cw.css("column-width") ) ) ? true : false + + return bool + } + + + /* -------------------------------------------------------- + * test for '@font-face' + * -------------------------------------------------------- + * Originates from Modernizr (http://modernizr.com) + */ + + tests['fontface'] = function() { + var bool + + inject_element_with_styles('@font-face {font-family:"font"; src:url("https://")}', function( node, rule ) { + var style = document.getElementById('han-support'), + sheet = style.sheet || style.styleSheet, + cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '' + + bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0 + }) + + return bool + } + + + tests['ruby'] = function() { + if ( rubies != null ) + return rubies + + + var ruby = document.createElement('ruby'), + rt = document.createElement('rt'), + rp = document.createElement('rp'), + docElement = document.documentElement, + displayStyleProperty = 'display' + + ruby.appendChild(rp) + ruby.appendChild(rt) + docElement.appendChild(ruby) + + // browsers that support hide the via "display:none" + rubies = ( getStyle(rp, displayStyleProperty) == 'none' || + // but in IE browsers has "display:inline" so, the test needs other conditions: + getStyle(ruby, displayStyleProperty) == 'ruby' + && getStyle(rt, displayStyleProperty) == 'ruby-text' ) ? true : false + + + docElement.removeChild(ruby) + // the removed child node still exists in memory, so ... + ruby = null + rt = null + rp = null + + return rubies + + + function getStyle( element, styleProperty ) { + var result + + if ( window.getComputedStyle ) // for non-IE browsers + result = document.defaultView.getComputedStyle(element,null).getPropertyValue(styleProperty) + else if ( element.currentStyle ) // for IE + result = element.currentStyle[styleProperty] + + return result + } + } + + + tests['textemphasis'] = function() { + var em = $('tester'), + + bool = ( /^dot$/.test( em.css("-webkit-text-emphasis-style") ) || + /^dot$/.test( em.css("text-emphasis-style") ) || + /^dot$/.test( em.css("-moz-text-emphasis-style") ) || + /^dot$/.test( em.css("-ms-text-emphasis-style") ) ) ? true : false + + return bool + } + + + tests['writingmode'] = function() { + var wm = $('
tester
'), + + bool = ( /^tb-rl$/.test( wm.css("writing-mode") ) || + /^vertical-rl$/.test( wm.css("-webkit-writing-mode") ) || + /^tb-rl$/.test( wm.css("-moz-writing-mode") ) || + /^tb-rl$/.test( wm.css("-ms-writing-mode") ) ) ? true: false + + return bool + } + + + + $.fn.extend({ + hanInit: function() { + return init(this) + }, + + + bitouwei: function() { + return this.each(function(){ + $(this).addClass( 'han-js-bitouwei-rendered' ) + + var tou = unicode['biaodian'][0] + unicode['biaodian'][2], + wei = unicode['biaodian'][1], + start = unicode['punc'][0] + unicode['punc'][2], + end = unicode['punc'][1] + + tou = tou.replace(/\]\[/g, '' ) + start = start.replace(/\]\[/g, '' ) + + + // CJK characters + findAndReplaceDOMText(this, { + find: eval( '/(' + wei + ')(' + unicode_set('hanzi') + ')(' + tou + ')/ig' ), + wrap: _span( 'bitouwei bitouweidian' ) + }) + + findAndReplaceDOMText(this, { + find: eval( '/(' + unicode_set('hanzi') + ')(' + tou + ')/ig' ), + wrap: _span( 'bitouwei bitoudian' ) + }) + + findAndReplaceDOMText(this, { + find: eval( '/(' + wei + ')(' + unicode_set('hanzi') + ')/ig' ), + wrap: _span( 'bitouwei biweidian' ) + }) + + + // Latin letters + findAndReplaceDOMText(this, { + find: eval( '/(' + end + ')(' + unicode_set('latin') + '+)(' + start + ')/ig' ), + wrap: _span( 'bitouwei bitouweidian' ) + }) + + findAndReplaceDOMText(this, { + find: eval( '/(' + unicode_set('latin') + '+)(' + start + ')/ig' ), + wrap: _span( 'bitouwei bitoudian' ) + }) + + findAndReplaceDOMText(this, { + find: eval( '/(' + end + ')(' + unicode_set('latin') + '+)/ig' ), + wrap: _span( 'bitouwei biweidian' ) + }) + }) + }, + + + charize: function( glyph, charClass, innerSpan ){ + var glyph = glyph || {}, + charClass = (charClass == true) ? true : false + + glyph = { + cjk: glyph.cjk || 'individual', + bitouwei: (glyph.bitouwei == false) ? false : true, + latin: glyph.latin || 'group' + } + + return this.each(function(){ + if ( glyph.bitouwei ) + $(this).bitouwei() + + + // CJK characters + if ( glyph.cjk === 'individual' ) + findAndReplaceDOMText(this, { + find: eval( '/(' + unicode_set('hanzi') + ')/ig' ), + wrap: _span( 'char cjk' ) + }) + + + if ( glyph.cjk === 'individual' || glyph.cjk === 'biaodian' ) + findAndReplaceDOMText(this, { + find: eval( '/(' + unicode_set('biaodian') + ')/ig' ), + wrap: _span( 'char cjk biaodian' ) + }) + + + if ( glyph.cjk === 'group' ) + findAndReplaceDOMText(this, { + find: eval( '/(' + unicode_set('hanzi') + '+|' + unicode_set('biaodian') + '+)/ig' ), + wrap: _span( 'char cjk' ) + }) + + + var latin_regex = ( glyph.latin === 'group' ) ? + '/(' + unicode_set('latin') + '+)/ig' : + '/(' + unicode_set('latin') + ')/ig' + + findAndReplaceDOMText(this, { + find: eval( latin_regex ), + wrap: _span( 'char latin' ) + }) + + + findAndReplaceDOMText(this, { + find: eval( '/(' + unicode_set('punc') + '+)/ig' ), + wrap: _span( 'char latin punc' ) + }) + + findAndReplaceDOMText(this, { + find: /([\s]+)/ig, + wrap: _span( 'char space' ) + }) + + + if ( innerSpan ) + $(this).find('.char').each(function(){ + $(this).html( + $('').text( $(this).text() ) + ) + }) + + + if ( charClass ) + $(this).addClass('han-js-charized') + }) + } + }) + + + // tests + for ( var feature in tests ) { + classes.push( ( tests[feature]() ? '' : 'no-' ) + feature ) + + if ( !tester ) + var tester = '' + + tester += ' ' + feature + ': tests[\'' + feature + '\'](),\n' + } + + !function(window) { + eval("tester = ({\n" + tester.replace(/\n$/ig, + '\nunicoderange: test_for_unicoderange, \nfont: test_for_fontface\n}') + ")") + }() + + + + han() + + window.han = { + unicode: unicode_set, + support: tester + } + +})(window, window.jQuery, undefined) + + +/** + * findAndReplaceDOMText v 0.4.0 + * @author James Padolsey http://james.padolsey.com + * @license http://unlicense.org/UNLICENSE + * + * Matches the text of a DOM node against a regular expression + * and replaces each match (or node-separated portions of the match) + * in the specified element. + */ +;window.findAndReplaceDOMText = (function() { + + var PORTION_MODE_RETAIN = 'retain'; + var PORTION_MODE_FIRST = 'first'; + + var doc = document; + var toString = {}.toString; + + function isArray(a) { + return toString.call(a) == '[object Array]'; + } + + function escapeRegExp(s) { + return String(s).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } + + function exposed() { + // Try deprecated arg signature first: + return deprecated.apply(null, arguments) || findAndReplaceDOMText.apply(null, arguments); + } + + function deprecated(regex, node, replacement, captureGroup, elFilter) { + if ((node && !node.nodeType) && arguments.length <= 2) { + return false; + } + var isReplacementFunction = typeof replacement == 'function'; + + if (isReplacementFunction) { + replacement = (function(original) { + return function(portion, match) { + return original(portion.text, match.startIndex); + }; + }(replacement)); + } + + // Awkward support for deprecated argument signature (<0.4.0) + var instance = findAndReplaceDOMText(node, { + + find: regex, + + wrap: isReplacementFunction ? null : replacement, + replace: isReplacementFunction ? replacement : '$' + (captureGroup || '&'), + + prepMatch: function(m, mi) { + + // Support captureGroup (a deprecated feature) + + if (!m[0]) throw 'findAndReplaceDOMText cannot handle zero-length matches'; + + if (captureGroup > 0) { + var cg = m[captureGroup]; + m.index += m[0].indexOf(cg); + m[0] = cg; + } + + m.endIndex = m.index + m[0].length; + m.startIndex = m.index; + m.index = mi; + + return m; + }, + filterElements: elFilter + }); + + exposed.revert = function() { + return instance.revert(); + }; + + return true; + } + + /** + * findAndReplaceDOMText + * + * Locates matches and replaces with replacementNode + * + * @param {Node} node Element or Text node to search within + * @param {RegExp} options.find The regular expression to match + * @param {String|Element} [options.wrap] A NodeName, or a Node to clone + * @param {String|Function} [options.replace='$&'] What to replace each match with + * @param {Function} [options.filterElements] A Function to be called to check whether to + * process an element. (returning true = process element, + * returning false = avoid element) + */ + function findAndReplaceDOMText(node, options) { + return new Finder(node, options); + } + + exposed.Finder = Finder; + + /** + * Finder -- encapsulates logic to find and replace. + */ + function Finder(node, options) { + + options.portionMode = options.portionMode || PORTION_MODE_RETAIN; + + this.node = node; + this.options = options; + + // ENable match-preparation method to be passed as option: + this.prepMatch = options.prepMatch || this.prepMatch; + + this.reverts = []; + + this.matches = this.search(); + + if (this.matches.length) { + this.processMatches(); + } + + } + + Finder.prototype = { + + /** + * Searches for all matches that comply with the instance's 'match' option + */ + search: function() { + + var match; + var matchIndex = 0; + var regex = this.options.find; + var text = this.getAggregateText(); + var matches = []; + + regex = typeof regex === 'string' ? RegExp(escapeRegExp(regex), 'g') : regex; + + if (regex.global) { + while (match = regex.exec(text)) { + matches.push(this.prepMatch(match, matchIndex++)); + } + } else { + if (match = text.match(regex)) { + matches.push(this.prepMatch(match, 0)); + } + } + + return matches; + + }, + + /** + * Prepares a single match with useful meta info: + */ + prepMatch: function(match, matchIndex) { + + if (!match[0]) { + throw new Error('findAndReplaceDOMText cannot handle zero-length matches'); + } + + match.endIndex = match.index + match[0].length; + match.startIndex = match.index; + match.index = matchIndex; + + return match; + }, + + /** + * Gets aggregate text within subject node + */ + getAggregateText: function() { + + var elementFilter = this.options.filterElements; + + return getText(this.node); + + /** + * Gets aggregate text of a node without resorting + * to broken innerText/textContent + */ + function getText(node) { + + if (node.nodeType === 3) { + return node.data; + } + + if (elementFilter && !elementFilter(node)) { + return ''; + } + + var txt = ''; + + if (node = node.firstChild) do { + txt += getText(node); + } while (node = node.nextSibling); + + return txt; + + } + + }, + + /** + * Steps through the target node, looking for matches, and + * calling replaceFn when a match is found. + */ + processMatches: function() { + + var matches = this.matches; + var node = this.node; + var elementFilter = this.options.filterElements; + + var startPortion, + endPortion, + innerPortions = [], + curNode = node, + match = matches.shift(), + atIndex = 0, // i.e. nodeAtIndex + matchIndex = 0, + portionIndex = 0, + doAvoidNode; + + out: while (true) { + + if (curNode.nodeType === 3) { + + if (!endPortion && curNode.length + atIndex >= match.endIndex) { + + // We've found the ending + endPortion = { + node: curNode, + index: portionIndex++, + text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex), + indexInMatch: atIndex - match.startIndex, + indexInNode: match.startIndex - atIndex, // always zero for end-portions + endIndexInNode: match.endIndex - atIndex, + isEnd: true + }; + + } else if (startPortion) { + // Intersecting node + innerPortions.push({ + node: curNode, + index: portionIndex++, + text: curNode.data, + indexInMatch: atIndex - match.startIndex, + indexInNode: 0 // always zero for inner-portions + }); + } + + if (!startPortion && curNode.length + atIndex > match.startIndex) { + // We've found the match start + startPortion = { + node: curNode, + index: portionIndex++, + indexInMatch: 0, + indexInNode: match.startIndex - atIndex, + endIndexInNode: match.endIndex - atIndex, + text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex) + }; + } + + atIndex += curNode.data.length; + + } + + doAvoidNode = curNode.nodeType === 1 && elementFilter && !elementFilter(curNode); + + if (startPortion && endPortion) { + + curNode = this.replaceMatch(match, startPortion, innerPortions, endPortion); + + // processMatches has to return the node that replaced the endNode + // and then we step back so we can continue from the end of the + // match: + + atIndex -= (endPortion.node.data.length - endPortion.endIndexInNode); + + startPortion = null; + endPortion = null; + innerPortions = []; + match = matches.shift(); + portionIndex = 0; + matchIndex++; + + if (!match) { + break; // no more matches + } + + } else if ( + !doAvoidNode && + (curNode.firstChild || curNode.nextSibling) + ) { + // Move down or forward: + curNode = curNode.firstChild || curNode.nextSibling; + continue; + } + + // Move forward or up: + while (true) { + if (curNode.nextSibling) { + curNode = curNode.nextSibling; + break; + } else if (curNode.parentNode !== node) { + curNode = curNode.parentNode; + } else { + break out; + } + } + + } + + }, + + /** + * Reverts ... TODO + */ + revert: function() { + // Reversion occurs backwards so as to avoid nodes subsequently + // replaced during the matching phase (a forward process): + for (var l = this.reverts.length; l--;) { + this.reverts[l](); + } + this.reverts = []; + }, + + prepareReplacementString: function(string, portion, match, matchIndex) { + var portionMode = this.options.portionMode; + if ( + portionMode === PORTION_MODE_FIRST && + portion.indexInMatch > 0 + ) { + return ''; + } + string = string.replace(/\$(\d+|&|`|')/g, function($0, t) { + var replacement; + switch(t) { + case '&': + replacement = match[0]; + break; + case '`': + replacement = match.input.substring(0, match.startIndex); + break; + case '\'': + replacement = match.input.substring(match.endIndex); + break; + default: + replacement = match[+t]; + } + return replacement; + }); + + if (portionMode === PORTION_MODE_FIRST) { + return string; + } + + if (portion.isEnd) { + return string.substring(portion.indexInMatch); + } + + return string.substring(portion.indexInMatch, portion.indexInMatch + portion.text.length); + }, + + getPortionReplacementNode: function(portion, match, matchIndex) { + + var replacement = this.options.replace || '$&'; + var wrapper = this.options.wrap; + + if (wrapper && wrapper.nodeType) { + // Wrapper has been provided as a stencil-node for us to clone: + var clone = doc.createElement('div'); + clone.innerHTML = wrapper.outerHTML || new XMLSerializer().serializeToString(wrapper); + wrapper = clone.firstChild; + } + + if (typeof replacement == 'function') { + replacement = replacement(portion, match, matchIndex); + if (replacement && replacement.nodeType) { + return replacement; + } + return doc.createTextNode(String(replacement)); + } + + var el = typeof wrapper == 'string' ? doc.createElement(wrapper) : wrapper; + + replacement = doc.createTextNode( + this.prepareReplacementString( + replacement, portion, match, matchIndex + ) + ); + + if (!el) { + return replacement; + } + + el.appendChild(replacement); + + return el; + }, + + replaceMatch: function(match, startPortion, innerPortions, endPortion) { + + var matchStartNode = startPortion.node; + var matchEndNode = endPortion.node; + + var preceedingTextNode; + var followingTextNode; + + if (matchStartNode === matchEndNode) { + + var node = matchStartNode; + + if (startPortion.indexInNode > 0) { + // Add `before` text node (before the match) + preceedingTextNode = doc.createTextNode(node.data.substring(0, startPortion.indexInNode)); + node.parentNode.insertBefore(preceedingTextNode, node); + } + + // Create the replacement node: + var newNode = this.getPortionReplacementNode( + endPortion, + match + ); + + node.parentNode.insertBefore(newNode, node); + + if (endPortion.endIndexInNode < node.length) { // ????? + // Add `after` text node (after the match) + followingTextNode = doc.createTextNode(node.data.substring(endPortion.endIndexInNode)); + node.parentNode.insertBefore(followingTextNode, node); + } + + node.parentNode.removeChild(node); + + this.reverts.push(function() { + if (preceedingTextNode === newNode.previousSibling) { + preceedingTextNode.parentNode.removeChild(preceedingTextNode); + } + if (followingTextNode === newNode.nextSibling) { + followingTextNode.parentNode.removeChild(followingTextNode); + } + newNode.parentNode.replaceChild(node, newNode); + }); + + return newNode; + + } else { + // Replace matchStartNode -> [innerMatchNodes...] -> matchEndNode (in that order) + + + preceedingTextNode = doc.createTextNode( + matchStartNode.data.substring(0, startPortion.indexInNode) + ); + + followingTextNode = doc.createTextNode( + matchEndNode.data.substring(endPortion.endIndexInNode) + ); + + var firstNode = this.getPortionReplacementNode( + startPortion, + match + ); + + var innerNodes = []; + + for (var i = 0, l = innerPortions.length; i < l; ++i) { + var portion = innerPortions[i]; + var innerNode = this.getPortionReplacementNode( + portion, + match + ); + portion.node.parentNode.replaceChild(innerNode, portion.node); + this.reverts.push((function(portion, innerNode) { + return function() { + innerNode.parentNode.replaceChild(portion.node, innerNode); + }; + }(portion, innerNode))); + innerNodes.push(innerNode); + } + + var lastNode = this.getPortionReplacementNode( + endPortion, + match + ); + + matchStartNode.parentNode.insertBefore(preceedingTextNode, matchStartNode); + matchStartNode.parentNode.insertBefore(firstNode, matchStartNode); + matchStartNode.parentNode.removeChild(matchStartNode); + + matchEndNode.parentNode.insertBefore(lastNode, matchEndNode); + matchEndNode.parentNode.insertBefore(followingTextNode, matchEndNode); + matchEndNode.parentNode.removeChild(matchEndNode); + + this.reverts.push(function() { + preceedingTextNode.parentNode.removeChild(preceedingTextNode); + firstNode.parentNode.replaceChild(matchStartNode, firstNode); + followingTextNode.parentNode.removeChild(followingTextNode); + lastNode.parentNode.replaceChild(matchEndNode, lastNode); + }); + + return lastNode; + } + } + + }; + + return exposed; + +}()); + diff --git a/ajax/libs/Han/package.json b/ajax/libs/Han/package.json index 93c228b47..2d7363881 100644 --- a/ajax/libs/Han/package.json +++ b/ajax/libs/Han/package.json @@ -1,21 +1,24 @@ { "name": "Han", "filename": "han.css", - "version": "2.2.3", + "version": "2.3.0", "description": "The CSS typography framework optimised for Hanzi", "keywords": [ "han", "Chinese", "Japanese", - "Korean" + "Korean", + "CSS", + "normamlize", + "typography" ], "author": "ethantw ", - "homepage": "http://http://css.hanzi.co/", + "homepage": "http://css.hanzi.co/", "bugs": "https://github.com/ethantw/Han/issues", "licenses": [ { "type": "MIT", - "url": "http://css.hanzi.co/license.md" + "url": "http://css.hanzi.co/LICENSE.md" } ], "repository": {