Created
February 15, 2021 00:55
-
-
Save CL-Jeremy/efd1351858c4feb894d6aee0bea448e0 to your computer and use it in GitHub Desktop.
Extendable native font stack for cross-platform support, (here) for CJK language support for Gitea
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* font i18n */ | |
@font-face { | |
font-family: system-emoji; | |
src: local("Apple Color Emoji"), local("Segoe UI Emoji"), local("Noto Color Emoji"), local("Twemoji Mozilla"); | |
unicode-range: ~"U+2310-329F, U+FE0?, U+1F000-1FAFF"; | |
} | |
[lang] { | |
font-family: var(--fonts-regular); | |
} | |
:root { | |
--fonts-proportional: -apple-system, "Segoe UI", system-ui, "Roboto", "Helvetica Neue", "Arial", "Noto Sans", "Liberation Sans", sans-serif; | |
--fonts-monospace: "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace; | |
--fonts-emoji: system-emoji; | |
--fonts-regular: var(--fonts-emoji), var(--fonts-proportional); | |
:lang(ja) { | |
--fonts-regular: var(--fonts-emoji), system-ui-ja, var(--fonts-proportional); | |
} | |
:lang(zh-CN) { | |
--fonts-regular: var(--fonts-emoji), system-ui-zh-cn, var(--fonts-proportional); | |
} | |
:lang(zh-TW) { | |
--fonts-regular: var(--fonts-emoji), system-ui-zh-tw, var(--fonts-proportional); | |
} | |
:lang(zh-HK) { | |
--fonts-regular: var(--fonts-emoji), system-ui-zh-hk, var(--fonts-proportional); | |
} | |
:lang(ko) { | |
--fonts-regular: var(--fonts-emoji), system-ui-ko, var(--fonts-proportional); | |
} | |
} | |
[lang] { | |
font-family: var(--fonts-regular); | |
} | |
each(@fonts, { | |
@weights: .gen-weights-all(@value); | |
@locale: replace(@key, "@", "-"); | |
.font-face-cjk(~"system-ui@{locale}", @weights[@light], 300); | |
.font-face-cjk(~"system-ui@{locale}", @weights[@regular], 400); | |
.font-face-cjk(~"system-ui@{locale}", @weights[@medium], 500); | |
.font-face-cjk(~"system-ui@{locale}", @weights[@bold], 700); | |
}); | |
@fonts: { | |
@ja: | |
"HiraginoSans-:{W2,W4,W5,W6}", "Hiragino Kaku Gothic ProN :{W3,W6}", | |
.shs("JP")[], .shs("J")[], .noto("JP")[], .shs("")[], | |
/* https://acetaminophen.hatenablog.com/entry/2016/02/15/225009 */ | |
"Yu Gothic :{Regular,Medium,Bold}", "YuGothic :{Regular,Medium,Bold}", | |
"Droid Sans Japanese:{}", "Meiryo:{, Bold}", "MS PGothic:{}"; | |
@zh-cn: | |
.pingfang("SC")[], | |
.shs("CN")[], .shs("SC")[], .noto("SC")[], | |
"HiraginoSansGB-:{W3,W6}", "Hiragino Sans GB :{W3,W6}", | |
"Microsoft YaHei:{ Light,, Bold}", "Heiti SC :{Light,Medium}", "SimHei:{}"; | |
@zh-tw: | |
.pingfang("TC")[], | |
.shs("TW")[], .shs("TC")[], .noto("TC")[], | |
"HiraginoSansTC-:{W3,W6}", "Hiragino Sans TC :{W3,W6}", | |
"Microsoft JhengHei:{ Light,, Bold}", "Heiti TC :{Light,Medium}", "PMingLiU:{}"; | |
@zh-hk: | |
.pingfang("HK")[], | |
.shs("HK")[], .shs("HC")[], .noto("HK")[], .shs("TC")[], .noto("TC")[], | |
"HiraginoSansTC-:{W3,W6}", "Hiragino Sans TC :{W3,W6}", | |
"Microsoft JhengHei:{ Light,, Bold}", "Heiti TC :{Light,Medium}", "PMingLiU_HKSCS:{}", "PMingLiU:{}"; | |
@ko: | |
"AppleSDGothicNeo-:{Light,Regular,Medium,Semibold}", | |
.shs("KR")[], .shs("K")[], .noto("KR")[], | |
"NanumBarunGothic:{ Light,, Bold}", | |
"Malgun Gothic:{ Semilight,, Bold}", "Nanum Gothic:{, Bold}", "Dotum:{}"; | |
} | |
.noto(@suffix) { @value: "Noto Sans CJK @{suffix} ", "NotoSansCJK@{suffix}-"; } | |
.shs(@suffix) { @value: replace("Source Han Sans @{suffix} ", " ", " "), "SourceHanSans@{suffix}-"; } | |
.pingfang(@suffix) { @value: "PingFang@{suffix}-:{Light,Regular,Medium,Semibold}"; } | |
.font-face-cjk(@family, @src, @weight) { | |
@font-face { | |
font-family: @family; | |
src: @src; | |
font-weight: @weight; | |
unicode-range: ~"U+11??, U+2E80-4DBF, U+AC00-D7FF, U+4E00-9FFF, U+FF00-FFEF, U+1F2??"; | |
} | |
} | |
.gen-weights(@family) when (isstring(@family)) { | |
@family-str: replace(@family, ":\{.*\}$", ""); | |
// apply standard style names if none is given | |
// should the font have no styles, use :{}, as in "SimHei:{}" | |
@weights-str: if(@family = @family-str, "Light,Regular,Medium,Bold", replace(@family, ".*:\{(.*)\}$", "$1")); | |
@lightest: replace(@weights-str, ",.*", ""); | |
@boldest: replace(@weights-str, ".*,", ""); | |
@2ndboldest: replace(@weights-str, "(?:.*,|)([^,]*),.*$", "$1"); | |
@2ndlightest: if(@2ndboldest = @lightest, @lightest, replace(@weights-str, "^.*?,([^,]*).*", "$1")); | |
@light: local("@{family-str}@{lightest}"); | |
@regular: local("@{family-str}@{2ndlightest}"); | |
@medium: local("@{family-str}@{2ndboldest}"); | |
@bold: local("@{family-str}@{boldest}"); | |
} | |
.gen-weights(@family) when not (isstring(@family)) { | |
.gen-weights-all(@family); | |
} | |
.gen-weights(@family, @last) { | |
@this: .gen-weights(@family); | |
@light: @last[@light], @this[@light]; | |
@regular: @last[@regular], @this[@regular]; | |
@medium: @last[@medium], @this[@medium]; | |
@bold: @last[@bold], @this[@bold]; | |
} | |
.gen-weights-all(@family) when not (isstring(@family)) { | |
.gen-weights-all(@family, length(@family)); | |
} | |
.gen-weights-all(@family, 1) when not (isstring(@family)) { | |
.gen-weights(extract(@family, 1)); | |
} | |
.gen-weights-all(@family, @ctr) when not (isstring(@family)) and (@ctr > 1) and (@ctr <= length(@family)) { | |
.gen-weights(extract(@family, @ctr), .gen-weights-all(@family, @ctr - 1)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@font-face { | |
font-family: system-emoji; | |
src: local("Apple Color Emoji"), local("Segoe UI Emoji"), local("Noto Color Emoji"), local("Twemoji Mozilla"); | |
unicode-range: u+2310-329f, u+fe0?, u+1f000-1faff | |
} | |
[lang] { | |
font-family: var(--fonts-regular); | |
} | |
:root { | |
--fonts-proportional: -apple-system, "Segoe UI", system-ui, "Roboto", "Helvetica Neue", "Arial", "Noto Sans", "Liberation Sans", sans-serif; | |
--fonts-monospace: "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace; | |
--fonts-emoji: system-emoji; | |
--fonts-regular: var(--fonts-emoji), var(--fonts-proportional); | |
} | |
:root :lang(ja) { | |
--fonts-regular: var(--fonts-emoji), system-ui-ja, var(--fonts-proportional) | |
} | |
:root :lang(zh-CN) { | |
--fonts-regular: var(--fonts-emoji), system-ui-zh-cn, var(--fonts-proportional) | |
} | |
:root :lang(zh-TW) { | |
--fonts-regular: var(--fonts-emoji), system-ui-zh-tw, var(--fonts-proportional) | |
} | |
:root :lang(zh-HK) { | |
--fonts-regular: var(--fonts-emoji), system-ui-zh-hk, var(--fonts-proportional) | |
} | |
:root :lang(ko) { | |
--fonts-regular: var(--fonts-emoji), system-ui-ko, var(--fonts-proportional) | |
} | |
@font-face { | |
font-family: system-ui-ja; | |
src: local("HiraginoSans-W2"), local("Hiragino Kaku Gothic ProN W3"), local("Source Han Sans JP Light"), local("SourceHanSansJP-Light"), local("Source Han Sans J Light"), local("SourceHanSansJ-Light"), local("Noto Sans CJK JP Light"), local("NotoSansCJKJP-Light"), local("Source Han Sans Light"), local("SourceHanSans-Light"), local("Yu Gothic Regular"), local("YuGothic Regular"), local("Droid Sans Japanese"), local("Meiryo"), local("MS PGothic"); | |
font-weight: 300; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ja; | |
src: local("HiraginoSans-W4"), local("Hiragino Kaku Gothic ProN W3"), local("Source Han Sans JP Regular"), local("SourceHanSansJP-Regular"), local("Source Han Sans J Regular"), local("SourceHanSansJ-Regular"), local("Noto Sans CJK JP Regular"), local("NotoSansCJKJP-Regular"), local("Source Han Sans Regular"), local("SourceHanSans-Regular"), local("Yu Gothic Medium"), local("YuGothic Medium"), local("Droid Sans Japanese"), local("Meiryo"), local("MS PGothic"); | |
font-weight: 400; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ja; | |
src: local("HiraginoSans-W5"), local("Hiragino Kaku Gothic ProN W3"), local("Source Han Sans JP Medium"), local("SourceHanSansJP-Medium"), local("Source Han Sans J Medium"), local("SourceHanSansJ-Medium"), local("Noto Sans CJK JP Medium"), local("NotoSansCJKJP-Medium"), local("Source Han Sans Medium"), local("SourceHanSans-Medium"), local("Yu Gothic Medium"), local("YuGothic Medium"), local("Droid Sans Japanese"), local("Meiryo"), local("MS PGothic"); | |
font-weight: 500; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ja; | |
src: local("HiraginoSans-W6"), local("Hiragino Kaku Gothic ProN W6"), local("Source Han Sans JP Bold"), local("SourceHanSansJP-Bold"), local("Source Han Sans J Bold"), local("SourceHanSansJ-Bold"), local("Noto Sans CJK JP Bold"), local("NotoSansCJKJP-Bold"), local("Source Han Sans Bold"), local("SourceHanSans-Bold"), local("Yu Gothic Bold"), local("YuGothic Bold"), local("Droid Sans Japanese"), local("Meiryo Bold"), local("MS PGothic"); | |
font-weight: 700; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-cn; | |
src: local("PingFangSC-Light"), local("Source Han Sans CN Light"), local("SourceHanSansCN-Light"), local("Source Han Sans SC Light"), local("SourceHanSansSC-Light"), local("Noto Sans CJK SC Light"), local("NotoSansCJKSC-Light"), local("HiraginoSansGB-W3"), local("Hiragino Sans GB W3"), local("Microsoft YaHei Light"), local("Heiti SC Light"), local("SimHei"); | |
font-weight: 300; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-cn; | |
src: local("PingFangSC-Regular"), local("Source Han Sans CN Regular"), local("SourceHanSansCN-Regular"), local("Source Han Sans SC Regular"), local("SourceHanSansSC-Regular"), local("Noto Sans CJK SC Regular"), local("NotoSansCJKSC-Regular"), local("HiraginoSansGB-W3"), local("Hiragino Sans GB W3"), local("Microsoft YaHei"), local("Heiti SC Light"), local("SimHei"); | |
font-weight: 400; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-cn; | |
src: local("PingFangSC-Medium"), local("Source Han Sans CN Medium"), local("SourceHanSansCN-Medium"), local("Source Han Sans SC Medium"), local("SourceHanSansSC-Medium"), local("Noto Sans CJK SC Medium"), local("NotoSansCJKSC-Medium"), local("HiraginoSansGB-W3"), local("Hiragino Sans GB W3"), local("Microsoft YaHei"), local("Heiti SC Light"), local("SimHei"); | |
font-weight: 500; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-cn; | |
src: local("PingFangSC-Semibold"), local("Source Han Sans CN Bold"), local("SourceHanSansCN-Bold"), local("Source Han Sans SC Bold"), local("SourceHanSansSC-Bold"), local("Noto Sans CJK SC Bold"), local("NotoSansCJKSC-Bold"), local("HiraginoSansGB-W6"), local("Hiragino Sans GB W6"), local("Microsoft YaHei Bold"), local("Heiti SC Medium"), local("SimHei"); | |
font-weight: 700; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-tw; | |
src: local("PingFangTC-Light"), local("Source Han Sans TW Light"), local("SourceHanSansTW-Light"), local("Source Han Sans TC Light"), local("SourceHanSansTC-Light"), local("Noto Sans CJK TC Light"), local("NotoSansCJKTC-Light"), local("HiraginoSansTC-W3"), local("Hiragino Sans TC W3"), local("Microsoft JhengHei Light"), local("Heiti TC Light"), local("PMingLiU"); | |
font-weight: 300; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-tw; | |
src: local("PingFangTC-Regular"), local("Source Han Sans TW Regular"), local("SourceHanSansTW-Regular"), local("Source Han Sans TC Regular"), local("SourceHanSansTC-Regular"), local("Noto Sans CJK TC Regular"), local("NotoSansCJKTC-Regular"), local("HiraginoSansTC-W3"), local("Hiragino Sans TC W3"), local("Microsoft JhengHei"), local("Heiti TC Light"), local("PMingLiU"); | |
font-weight: 400; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-tw; | |
src: local("PingFangTC-Medium"), local("Source Han Sans TW Medium"), local("SourceHanSansTW-Medium"), local("Source Han Sans TC Medium"), local("SourceHanSansTC-Medium"), local("Noto Sans CJK TC Medium"), local("NotoSansCJKTC-Medium"), local("HiraginoSansTC-W3"), local("Hiragino Sans TC W3"), local("Microsoft JhengHei"), local("Heiti TC Light"), local("PMingLiU"); | |
font-weight: 500; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-tw; | |
src: local("PingFangTC-Semibold"), local("Source Han Sans TW Bold"), local("SourceHanSansTW-Bold"), local("Source Han Sans TC Bold"), local("SourceHanSansTC-Bold"), local("Noto Sans CJK TC Bold"), local("NotoSansCJKTC-Bold"), local("HiraginoSansTC-W6"), local("Hiragino Sans TC W6"), local("Microsoft JhengHei Bold"), local("Heiti TC Medium"), local("PMingLiU"); | |
font-weight: 700; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-hk; | |
src: local("PingFangHK-Light"), local("Source Han Sans HK Light"), local("SourceHanSansHK-Light"), local("Source Han Sans HC Light"), local("SourceHanSansHC-Light"), local("Noto Sans CJK HK Light"), local("NotoSansCJKHK-Light"), local("Source Han Sans TC Light"), local("SourceHanSansTC-Light"), local("Noto Sans CJK TC Light"), local("NotoSansCJKTC-Light"), local("HiraginoSansTC-W3"), local("Hiragino Sans TC W3"), local("Microsoft JhengHei Light"), local("Heiti TC Light"), local("PMingLiU_HKSCS"), local("PMingLiU"); | |
font-weight: 300; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-hk; | |
src: local("PingFangHK-Regular"), local("Source Han Sans HK Regular"), local("SourceHanSansHK-Regular"), local("Source Han Sans HC Regular"), local("SourceHanSansHC-Regular"), local("Noto Sans CJK HK Regular"), local("NotoSansCJKHK-Regular"), local("Source Han Sans TC Regular"), local("SourceHanSansTC-Regular"), local("Noto Sans CJK TC Regular"), local("NotoSansCJKTC-Regular"), local("HiraginoSansTC-W3"), local("Hiragino Sans TC W3"), local("Microsoft JhengHei"), local("Heiti TC Light"), local("PMingLiU_HKSCS"), local("PMingLiU"); | |
font-weight: 400; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-hk; | |
src: local("PingFangHK-Medium"), local("Source Han Sans HK Medium"), local("SourceHanSansHK-Medium"), local("Source Han Sans HC Medium"), local("SourceHanSansHC-Medium"), local("Noto Sans CJK HK Medium"), local("NotoSansCJKHK-Medium"), local("Source Han Sans TC Medium"), local("SourceHanSansTC-Medium"), local("Noto Sans CJK TC Medium"), local("NotoSansCJKTC-Medium"), local("HiraginoSansTC-W3"), local("Hiragino Sans TC W3"), local("Microsoft JhengHei"), local("Heiti TC Light"), local("PMingLiU_HKSCS"), local("PMingLiU"); | |
font-weight: 500; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-zh-hk; | |
src: local("PingFangHK-Semibold"), local("Source Han Sans HK Bold"), local("SourceHanSansHK-Bold"), local("Source Han Sans HC Bold"), local("SourceHanSansHC-Bold"), local("Noto Sans CJK HK Bold"), local("NotoSansCJKHK-Bold"), local("Source Han Sans TC Bold"), local("SourceHanSansTC-Bold"), local("Noto Sans CJK TC Bold"), local("NotoSansCJKTC-Bold"), local("HiraginoSansTC-W6"), local("Hiragino Sans TC W6"), local("Microsoft JhengHei Bold"), local("Heiti TC Medium"), local("PMingLiU_HKSCS"), local("PMingLiU"); | |
font-weight: 700; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ko; | |
src: local("AppleSDGothicNeo-Light"), local("Source Han Sans KR Light"), local("SourceHanSansKR-Light"), local("Source Han Sans K Light"), local("SourceHanSansK-Light"), local("Noto Sans CJK KR Light"), local("NotoSansCJKKR-Light"), local("NanumBarunGothic Light"), local("Malgun Gothic Semilight"), local("Nanum Gothic"), local("Dotum"); | |
font-weight: 300; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ko; | |
src: local("AppleSDGothicNeo-Regular"), local("Source Han Sans KR Regular"), local("SourceHanSansKR-Regular"), local("Source Han Sans K Regular"), local("SourceHanSansK-Regular"), local("Noto Sans CJK KR Regular"), local("NotoSansCJKKR-Regular"), local("NanumBarunGothic"), local("Malgun Gothic"), local("Nanum Gothic"), local("Dotum"); | |
font-weight: 400; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ko; | |
src: local("AppleSDGothicNeo-Medium"), local("Source Han Sans KR Medium"), local("SourceHanSansKR-Medium"), local("Source Han Sans K Medium"), local("SourceHanSansK-Medium"), local("Noto Sans CJK KR Medium"), local("NotoSansCJKKR-Medium"), local("NanumBarunGothic"), local("Malgun Gothic"), local("Nanum Gothic"), local("Dotum"); | |
font-weight: 500; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} | |
@font-face { | |
font-family: system-ui-ko; | |
src: local("AppleSDGothicNeo-Semibold"), local("Source Han Sans KR Bold"), local("SourceHanSansKR-Bold"), local("Source Han Sans K Bold"), local("SourceHanSansK-Bold"), local("Noto Sans CJK KR Bold"), local("NotoSansCJKKR-Bold"), local("NanumBarunGothic Bold"), local("Malgun Gothic Bold"), local("Nanum Gothic Bold"), local("Dotum"); | |
font-weight: 700; | |
unicode-range: u+11??, u+2e80-4dbf, u+ac00-d7ff, u+4e00-9fff, u+ff00-ffef, u+1f2?? | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment