thai text linebreaking fix

This commit is contained in:
minjaesong
2024-03-31 00:02:19 +09:00
parent 78333b3fe1
commit 46a57e8e50
6 changed files with 168 additions and 99 deletions

View File

@@ -1,4 +1,4 @@
􏿆The bitmap font for games developers who seek good font that has real multilingual support,􀀀 􏿆The bitmap font for game developers who seek good font that has real multilingual support,􀀀
􏿆for free (as in freedom and without cost)􀀀 􏿆for free (as in freedom and without cost)􀀀
There are many bitmap fonts on the internet. You care for the multilingual support, but alas! There are many bitmap fonts on the internet. You care for the multilingual support, but alas!

View File

@@ -1,4 +1,4 @@
􏿆The bitmap font for games developers who seek good font that has real multilingual support, for free (as in freedom and without cost)􀀀 􏿆The bitmap font for game developers who seek good font that has real multilingual support, for free (as in freedom and without cost)􀀀
There are many bitmap fonts on the internet. You care for the multilingual support, but alas! most of them do not support your language, vector fonts take too much time to load, and even then their legibility suffers because screw built-in antialias. There are many bitmap fonts on the internet. You care for the multilingual support, but alas! most of them do not support your language, vector fonts take too much time to load, and even then their legibility suffers because screw built-in antialias.
@@ -24,9 +24,7 @@ How multilingual? Real multilingual!
􏻬Zəfər, jaketini də papağını da götür, bu axşam hava çox soyuq olacaq􀀀 􏻬Zəfər, jaketini də papağını da götür, bu axşam hava çox soyuq olacaq􀀀
􏻬আমি কাঁচ খেতে পারি, তাতে আমার কোনো ক্ষতি হয় না। 􀀀 􏻬আমি কাঁচ খেতে পারি, তাতে আমার কোনো ক্ষতি হয় না। 􀀀
􏻬󿿁Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче󿿀􀀀 􏻬󿿁Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче󿿀􀀀
􏻬ᎠᏍᎦᏯᎡᎦᎢᎾᎨᎢᎣᏍᏓᎤᎩᏍᏗᎥᎴᏓᎯᎲᎢᏔᎵᏕᎦᏟᏗᏖᎸᎳᏗᏗᎧᎵᎢᏘᎴᎩ ᏙᏱᏗᏜᏫᏗᏣᏚᎦᏫᏛᏄᏓᎦᏝᏃᎠᎾᏗᎭᏞᎦᎯᎦᏘᏓᏠᎨᏏᏕᏡᎬᏢᏓᏥᏩᏝᎡᎢᎪᎢ􀀀 􏻬ᎠᏍᎦᏯᎡᎦᎢᎾᎨᎢᎣᏍᏓᎤᎩᏍᏗᎥᎴᏓᎯᎲᎢᏔᎵᏕᎦᏟᏗᏖᎸᎳᏗᏗᎧᎵᎢᏘᎴᎩ ᏙᏱᏗᏜᏫᏗᏣᏚᎦᏫᏛᏄᏓᎦᏝᏃᎠᎾᏗᎭᏞᎦᎯᎦᏘᏓᏠᎨᏏᏕᏡᎬᏢᏓᏥᏩᏝᎡᎢᎪᎢ ᎠᎦᏂᏗᎮᎢᎫᎩᎬᏩᎴᎢᎠᏆᏅᏛᎫᏊᎾᎥᎠᏁᏙᎲᏐᏈᎵᎤᎩᎸᏓᏭᎷᏤᎢᏏᏉᏯᏌᏊ ᎤᏂᏋᎢᏡᎬᎢᎰᏩᎬᏤᎵᏍᏗᏱᎩᎱᎱᎤᎩᎴᎢᏦᎢᎠᏂᏧᏣᏨᎦᏥᎪᎥᏌᏊᎤᎶᏒᎢᎢᏡᎬᎢ ᎹᎦᎺᎵᏥᎻᎼᏏᎽᏗᏩᏂᎦᏘᎾᎿᎠᏁᎬᎢᏅᎩᎾᏂᎡᎢᏌᎶᎵᏎᎷᎠᏑᏍᏗᏪᎩ ᎠᎴ ᏬᏗᏲᏭᎾᏓᏍᏓᏴᏁᎢᎤᎦᏅᏮᏰᎵᏳᏂᎨᎢ􀀀
􏻬ᎠᎦᏂᏗᎮᎢᎫᎩᎬᏩᎴᎢᎠᏆᏅᏛᎫᏊᎾᎥᎠᏁᏙᎲᏐᏈᎵᎤᎩᎸᏓᏭᎷᏤᎢᏏᏉᏯᏌᏊ ᎤᏂᏋᎢᏡᎬᎢᎰᏩᎬᏤᎵᏍᏗᏱᎩᎱᎱᎤᎩᎴᎢᏦᎢᎠᏂᏧᏣᏨᎦᏥᎪᎥᏌᏊᎤᎶᏒᎢᎢᏡᎬᎢ􀀀
􏻬ᎹᎦᎺᎵᏥᎻᎼᏏᎽᏗᏩᏂᎦᏘᎾᎿᎠᏁᎬᎢᏅᎩᎾᏂᎡᎢᏌᎶᎵᏎᎷᎠᏑᏍᏗᏪᎩ ᎠᎴ ᏬᏗᏲᏭᎾᏓᏍᏓᏴᏁᎢᎤᎦᏅᏮᏰᎵᏳᏂᎨᎢ􀀀
􏻬Příliš žluťoučký kůň úpěl ďábelské ódy􀀀 􏻬Příliš žluťoučký kůň úpěl ďábelské ódy􀀀
􏻬Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon􀀀 􏻬Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon􀀀
􏻬PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS􀀀 􏻬PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS􀀀
@@ -64,60 +62,93 @@ How multilingual? Real multilingual!
􏃯Features:􀀀 􏃯Features:􀀀
􏿿Ever heard of « Guillemets »? You speak „Nederlands” or „Deutsch“? ”suomi”? 「日本語」しゃべる?或《中文》?􀀀 􏻬Ever heard of « Guillemets »? You speak „Nederlands” or „Deutsch“? ”suomi”? 「日本語」しゃべる?或《中文》?􀀀
􎳌Multilingual brackets; these are the most basic things, right?􀀀 􎳌Multilingual brackets; these are the most basic things, right?􀀀
􏋶99406 91902 59186 29182 45814 57862 34368 08240􀀀 􏋶99406 91902 59186 29182 45814 57862 34368 08240􀀀
􏋶31485 65379 04348 28952 42927 26157 42615 39526􀀀 􏋶31485 65379 04348 28952 42927 26157 42615 39526􀀀
􎳌Fixed-width numbers, because number-crunching matters􀀀 􎳌Fixed-width (tabulated) numbers, because number-crunching matters􀀀
􏼀ᚱ􏼐ᛂ􏼠ᚴ􏼰ᛋ􏽀ᛂ􏽐ᛋ􏽠ᛏ􏽰ᛋ􏾀ᚮ􏾐ᚾ􏾠ᛔ􏾰ᚢ􏿀ᛏ􏿐ᛚ􏿠ᚮ􏿰ᛋ􏻰᛬􏷰ᚱ􏳰ᛂ􏯰ᚴ􏫰ᛋ􏧰ᛋ􏣰ᚢ􏟰ᚼ􏛰ᚾ􏗰ᚢ􏓰ᛘ􏏰ᚢ􏋰ᛚ􏇰ᚾ􏃰ᛏ􏃱ᚮ􏃲᛬􏃳ᛏ􏃴ᚮ􏃵ᛋ􏃶ᛁ􏃷ᚮ􏃸ᚵ􏃹ᛂ􏃺ᚢ􏃻ᛏ􏃼ᚮ􏃽ᚱ􏃾ᛘ􏃿ᛔ􏃯ᚱ􏃟ᛂ􏃏ᚴ􏂿ᛋ􏂯ᛏ􏂟᛭􏂏ᛋ􏁿ᚢ􏁯ᚼ􏁟ᚾ􏁏ᚢ􏀿ᛋ􏀯ᛘ􏀟ᚮ􏀏ᛁ􏄏ᚵ􏈏ᚾ􏌏ᛁ􏐏ᛂ􏔏ᛏ􏘏ᚮ􏜏ᛑ􏠏᛭􏤏ᚵ􏨏ᛂ􏬏ᚢ􏰏ᛏ􏴏ᚮ􏸏ᚱ􀀀 􏼀ᚱ􏼐ᛂ􏼠ᚴ􏼰ᛋ􏽀ᛂ􏽐ᛋ􏽠ᛏ􏽰ᛋ􏾀ᚮ􏾐ᚾ􏾠ᛔ􏾰ᚢ􏿀ᛏ􏿐ᛚ􏿠ᚮ􏿰ᛋ􏻰᛬􏷰ᚱ􏳰ᛂ􏯰ᚴ􏫰ᛋ􏧰ᛋ􏣰ᚢ􏟰ᚼ􏛰ᚾ􏗰ᚢ􏓰ᛘ􏏰ᚢ􏋰ᛚ􏇰ᚾ􏃰ᛏ􏃱ᚮ􏃲᛬􏃳ᛏ􏃴ᚮ􏃵ᛋ􏃶ᛁ􏃷ᚮ􏃸ᚵ􏃹ᛂ􏃺ᚢ􏃻ᛏ􏃼ᚮ􏃽ᚱ􏃾ᛘ􏃿ᛔ􏃯ᚱ􏃟ᛂ􏃏ᚴ􏂿ᛋ􏂯ᛏ􏂟᛭􏂏ᛋ􏁿ᚢ􏁯ᚼ􏁟ᚾ􏁏ᚢ􏀿ᛋ􏀯ᛘ􏀟ᚮ􏀏ᛁ􏄏ᚵ􏈏ᚾ􏌏ᛁ􏐏ᛂ􏔏ᛏ􏘏ᚮ􏜏ᛑ􏠏᛭􏤏ᚵ􏨏ᛂ􏬏ᚢ􏰏ᛏ􏴏ᚮ􏸏ᚱ􀀀􀀀
􎳌Colour-code that supports 4096 colours via 4 bit RGB􀀀 􎳌Colour-code that supports 4096 colours via 4 bit RGB􀀀
􏿿󿿁Щиглецът се яде само пържен в юфка без чушки и хвойна󿿀 (Bulgarian)􀀀 􏻬󿿁Щиглецът се яде само пържен в юфка без чушки и хвойна󿿀 (Bulgarian)󿿀􀀀
􏿿󿿂Љубазни фењерџија чађавог лица хоће да ми покаже штос󿿀 (Serbian)􀀀 􏻬󿿂Љубазни фењерџија чађавог лица хоће да ми покаже штос󿿀 (Serbian)󿿀􀀀
􏿿Разъяренный чтец эгоистично бьёт пятью жердями шустрого фехтовальщика (Russian)􀀀 􏻬Разъяренный чтец эгоистично бьёт пятью жердями шустрого фехтовальщика (Russian)􀀀
􎳌Control characters to support Bulgarian and Serbian letter shapes on the fly􀀀 􎳌Control characters to support Bulgarian and Serbian letter shapes on the fly􀀀
􏿿Press  to pay respects—or is it , or …􀀀 􏻬Press  to pay respects—or is it , or …􀀀
􎳌Custom symbols for video games􀀀 􎳌Custom symbols for video games􀀀
􏿿Can you distinguish following dashes: - — - - ――――――――――― 4863 48-63􀀀 􏻬Can you distinguish following dashes: - — - - ――――――――――― 4863 48-63􀀀
􎳌For all those dash-pedants, we have en-dash, em-dash, and even horizontal bars!􀀀 􎳌For all those dash-pedants, we have en-dash, em-dash, and even horizontal bars!􀀀
􏿿5¹⁹₃₂ inch is 142.1 mm · (C₂F₄)ₙ is godly · Error = MoreCode²􀀀 􏻬5¹⁹₃₂ inch is 142.1 mm · (C₂F₄)ₙ is godly · Error = MoreCode²􀀀
􏿿NOTE: we dont do fractions. 142¹₁₀ mm is illegal!􀀀 􏻬NOTE: we dont do fractions. 142¹₁₀ mm is illegal!􀀀
􎳌Did you know Unicode supports arbitrary fractions? Actually I didnt… as they abused super/subscripts!􀀀 􎳌‣ Unicode fractions aka super/subscripts fully supported􀀀
􏿿ᄋᆡ급 일 ᄭᅡᄃᆞᆰ에 영국 ᄒᆞ고 불난셔 ᄒᆞ고 ᄃᆡ단이 시비가 잇슬 모양 인ᄃᆡ􀀀 􏻬ᄋᆡ급 일 ᄭᅡᄃᆞᆰ에 영국 ᄒᆞ고 불난셔 ᄒᆞ고 ᄃᆡ단이 시비가 잇슬 모양 인ᄃᆡ􀀀
􏿿일본 농샹공부에셔 젼긔학 학ᄉᆞ 셋ᄉᆞᆯ 미국과 구라파로 보내셔 젼화 쓰ᄂᆞᆫ 법을 더ᄇᆡ호게 ᄒᆞ더라􀀀 􏻬일본 농샹공부에셔 젼긔학 학ᄉᆞ 셋ᄉᆞᆯ 미국과 구라파로 보내셔 젼화 쓰ᄂᆞᆫ 법을 더ᄇᆡ호게 ᄒᆞ더라􀀀
􏿿일쳔 구ᄇᆡᆨ년에 불난셔 셔울 파리스에 만국 박남회를 버릴터 인ᄃᆡ 각국이 다 물화와 졔조품을 거긔 보낼터이더라􀀀 􏻬일쳔 구ᄇᆡᆨ년에 불난셔 셔울 파리스에 만국 박남회를 버릴터 인ᄃᆡ 각국이 다 물화와 졔조품을 거긔 보낼터이더라􀀀
􎳌Rejoice, now we can render Old Korean in a correct way!􀀀 􎳌‣ Full support for Old Korean/Jeju dialect orthography􀀀
􏃯Supported Unicode Blocks:􀀀 􏃯Supported Unicode Blocks:􀀀
Basic Latin Latin-1 Supplement Latin Extended-A Latin Extended-B IPA Extensions Spacing Modifier Letters Basic Latin
Combining Diacritical Marks Greek and Coptic􏿆ᴱ􀀀 Cyrillic􏿆ᴭ􀀀 Cyrillic Supplement􏿆ᴭ􀀀 Armenian Devanagari Latin-1 Supplement
Bengali􏿆ᶠⁱ􀀀 Tamil Thai Georgian􏿆ჼ􀀀 Hangul Jamo Cherokee􏿆⁷􀀀 Runic Sundanese Georgian Extended Latin Extended Additional
Sundanese Supplement Phonetic Extensions Phonetic Extensions Supplement Latin Extended Additional Latin Extended-A/B/C/D
Greek Extended General Punctuations Superscripts and Subscripts Currency Symbols Letterlike Symbols Armenian
Braile Patterns Latin Extended-C CJK Symbols and Punctuation Hiragana Katakana Bengali􏿆ᶠⁱ􀀀
Hangul Compatibility Jamo Katakana Phonetic Extensions CJK Unified Ideographs Extension A􏿆¹²·¹􀀀 Braile Patterns
CJK Unified Ideographs􏿆⁶􀀀 Latin Extended-D Hangul Jamo Extended-A Hangul Syllables Cherokee􏿆⁷􀀀
Hangul Jamo Extended-B Halfwidth and Fullwidth Forms Kana Supplement􏿆⁹􀀀 Enclosed Alphanumeric Supplement CJK Symbols and Punctuation
CJK Unified Ideographs􏿆⁶􀀀
CJK Unified Ideographs Extension A􏿆¹²·¹􀀀
Combining Diacritical Marks
Currency Symbols
Cyrillic􏿆ᴭ􀀀
Cyrillic Supplement􏿆ᴭ􀀀
Devanagari
Enclosed Alphanumeric Supplement
General Punctuations
Georgian􏿆ჼ􀀀
Georgian Extended
Greek and Coptic􏿆ᴱ􀀀
Greek Extended
Halfwidth and Fullwidth Forms
Hangul Compatibility Jamo
Hangul Jamo
Hangul Jamo Extended-A/B
Hangul Syllables
IPA Extensions
Hiragana
Katakana
Katakana Phonetic Extensions
Kana Supplement
Kana Extended-A
Small Kana Extension
Letterlike Symbols
Phonetic Extensions
Phonetic Extensions Supplement
Runic
Spacing Modifier Letters
Sundanese
Sundanese Supplement
Superscripts and Subscripts
Tamil
Thai
􏿆ᴭ􀀀 No support for archæic letters 􏿆ᴱ􀀀 No support for Coptic 􏿆ᴭ􀀀 No support for archæic letters 􏿆ᴱ􀀀 No support for Coptic
􏿆ᶠⁱ􀀀 No support for ligatures 􏿆ჼ􀀀 Mkhedruli only 􏿆ᶠⁱ􀀀 No support for ligatures 􏿆ჼ􀀀 Mkhedruli only
􏿆⁶􀀀 􏿆⁷􀀀 􏿆⁹􀀀 􏿆¹²·¹􀀀 Up to the specified Unicode version 􏿆⁶􀀀 􏿆⁷􀀀 􏿆⁹􀀀 􏿆¹²·¹􀀀 Up to the specified Unicode version
GitHubs issue page is open! You can report any 􏽕errors􀀀, or leave 􏽕suggestions􀀀. You can help this font to be more versatile. (for more languages, more frameworks) 􏽕Clone􀀀 this repo, make changes, and make a 􏽕pull request􀀀! I appreciate any and all supports. GitHubs issue page is open! You can report any 􏽕errors􀀀, or leave 􏽕suggestions􀀀. You can help this font to be more versatile. (for more languages, more frameworks) 􏽕Clone􀀀 this repo, make changes, and make a 􏽕pull request􀀀! I appreciate any and all supports.
<EFBFBD> 􎳌文字化け!􀀀 <20>

View File

@@ -84,9 +84,9 @@ class MovableType(
} }
var slugWidth = slug.lastOrNull()?.getEndPos() ?: 0 var slugWidth = slug.lastOrNull()?.getEndPos() ?: 0
if (slug.isNotEmpty() && hangable.contains(slug.last().block.penultimateChar)) if (slug.isNotEmpty() && slug.last().block.penultimateCharOrNull != null && hangable.contains(slug.last().block.penultimateCharOrNull))
slugWidth -= hangWidth slugWidth -= hangWidth
else if (slug.isNotEmpty() && hangableFW.contains(slug.last().block.penultimateChar)) else if (slug.isNotEmpty() && slug.last().block.penultimateCharOrNull != null && hangableFW.contains(slug.last().block.penultimateCharOrNull))
slugWidth -= hangWidthFW slugWidth -= hangWidthFW
val difference = (paperWidth - slugWidth).absoluteValue val difference = (paperWidth - slugWidth).absoluteValue
@@ -103,9 +103,9 @@ class MovableType(
slug.add(Block(nextPosX, box)) slug.add(Block(nextPosX, box))
var slugWidth = slugWidth + box.width var slugWidth = slugWidth + box.width
if (slug.isNotEmpty() && hangable.contains(slug.last().block.penultimateChar)) if (slug.isNotEmpty() && slug.last().block.penultimateCharOrNull != null && hangable.contains(slug.last().block.penultimateCharOrNull))
slugWidth -= hangWidth slugWidth -= hangWidth
else if (slug.isNotEmpty() && hangableFW.contains(slug.last().block.penultimateChar)) else if (slug.isNotEmpty() && slug.last().block.penultimateCharOrNull != null && hangableFW.contains(slug.last().block.penultimateCharOrNull))
slugWidth -= hangWidthFW slugWidth -= hangWidthFW
val difference = (paperWidth - slugWidth).absoluteValue val difference = (paperWidth - slugWidth).absoluteValue
@@ -123,9 +123,9 @@ class MovableType(
slug.add(Block(nextPosX, hyphHead)) slug.add(Block(nextPosX, hyphHead))
var slugWidth = slugWidth + hyphHead.width var slugWidth = slugWidth + hyphHead.width
if (slug.isNotEmpty() && hangable.contains(slug.last().block.penultimateChar)) if (slug.isNotEmpty() && slug.last().block.penultimateCharOrNull != null && hangable.contains(slug.last().block.penultimateCharOrNull))
slugWidth -= hangWidth slugWidth -= hangWidth
else if (slug.isNotEmpty() && hangableFW.contains(slug.last().block.penultimateChar)) else if (slug.isNotEmpty() && slug.last().block.penultimateCharOrNull != null && hangableFW.contains(slug.last().block.penultimateCharOrNull))
slugWidth -= hangWidthFW slugWidth -= hangWidthFW
val difference = (paperWidth - slugWidth) val difference = (paperWidth - slugWidth)
@@ -141,9 +141,11 @@ class MovableType(
if (box.isNotGlue()) { if (box.isNotGlue()) {
// deal with the hangables // deal with the hangables
val slugWidthForOverflowCalc = if (hangable.contains(box.penultimateChar)) val slugWidthForOverflowCalc = if (box.penultimateCharOrNull == null)
slugWidth
else if (hangable.contains(box.penultimateCharOrNull))
slugWidth - hangWidth slugWidth - hangWidth
else if (hangableFW.contains(box.penultimateChar)) else if (hangableFW.contains(box.penultimateCharOrNull))
slugWidth - hangWidthFW slugWidth - hangWidthFW
else else
slugWidth slugWidth
@@ -278,13 +280,13 @@ class MovableType(
var gluesInfo = slug.mapIndexed { index, block -> block to index }.filter { (block, index) -> var gluesInfo = slug.mapIndexed { index, block -> block to index }.filter { (block, index) ->
block.block.isGlue() block.block.isGlue()
}.map { (block, index) -> }.map { (block, index) ->
val prevBlockEndsWith = if (index == 0) null else slug[index - 1].block.penultimateChar // last() will just return {NUL} val prevBlockEndsWith = if (index == 0) null else slug[index - 1].block.penultimateCharOrNull // last() will just return {NUL}
Triple(block, index, prevBlockEndsWith) Triple(block, index, prevBlockEndsWith)
}.filter { it.third != null } }.filter { it.third != null }
// if there are no glues, put spaces between all characters // if there are no glues, put spaces between all characters
if (gluesInfo.isEmpty()) { if (gluesInfo.isEmpty()) {
gluesInfo = slug.subList(1, slug.size).mapIndexed { index, block -> gluesInfo = slug.subList(1, slug.size).mapIndexed { index, block ->
val prevBlockEndsWith = slug[index].block.penultimateChar // last() will just return {NUL} val prevBlockEndsWith = slug[index].block.penultimateCharOrNull // last() will just return {NUL}
Triple(block, index + 1, prevBlockEndsWith) Triple(block, index + 1, prevBlockEndsWith)
} }
} }
@@ -542,6 +544,19 @@ class MovableType(
appendToBuffer(c0) appendToBuffer(c0)
} }
else if (c0.isThaiConso()) {
if (cM.isWhiteSpace()) {
sendoutGlue()
}
else if (cM.isThaiConso() || cM.isThaiVowel()) {
sendoutBox()
}
else {
sendoutBox()
}
appendToBuffer(c0)
}
else { else {
if (cM.isCJ()) { if (cM.isCJ()) {
sendoutBox() sendoutBox()
@@ -593,6 +608,8 @@ class MovableType(
private fun CodePoint?.isControlIn() = if (this == null) false else controlIns.contains(this) private fun CodePoint?.isControlIn() = if (this == null) false else controlIns.contains(this)
private fun CodePoint?.isControlOut() = if (this == null) false else controlOuts.contains(this) private fun CodePoint?.isControlOut() = if (this == null) false else controlOuts.contains(this)
private fun CodePoint?.isColourCode() = if (this == null) false else colourCodes.contains(this) private fun CodePoint?.isColourCode() = if (this == null) false else colourCodes.contains(this)
private fun CodePoint?.isThaiConso() = if (this == null) false else this in 0x0E01..0x0E2F
private fun CodePoint?.isThaiVowel() = if (this == null) false else (this in 0x0E30..0x0E3E || this in 0x0E40..0x0E4E)
private fun CodepointSequence.isGlue() = this.size == 1 && (this[0] == ZWSP || this[0] in 0xFFFE0..0xFFFFF) private fun CodepointSequence.isGlue() = this.size == 1 && (this[0] == ZWSP || this[0] in 0xFFFE0..0xFFFFF)
private fun CodepointSequence.isNotGlue() = !this.isGlue() private fun CodepointSequence.isNotGlue() = !this.isGlue()

View File

@@ -2071,8 +2071,10 @@ class TerrarumSansBitmap(
get() = glyphLayout!!.width get() = glyphLayout!!.width
val texture: Texture val texture: Texture
get() = glyphLayout!!.linotype get() = glyphLayout!!.linotype
val penultimateChar: CodePoint // val penultimateChar: CodePoint
get() = text[text.size - 2] // get() = text[text.size - 2]
val penultimateCharOrNull: CodePoint?
get() = text.getOrNull(text.size - 2)
fun dispose() { fun dispose() {
glyphLayout?.linotype?.dispose() glyphLayout?.linotype?.dispose()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 196 KiB

View File

@@ -1,11 +1,30 @@
Lorem ipsum dolor sit amet, consec­tetur adipicit elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae auctor eu augue ut lectus arcu bibendum. Pulvinar pellentesque habitant morbi tristique senectus et netus. Turpis nunc eget lorem dolor sed viverra ipsum. Duis ultricies lacus sed turpis tincidunt id. Facilisi morbi tempus iaculis urna id volutpat lacus laoreet non. Viverra adipiscing at in tellus integer feugiat scelerisque varius morbi. Viverra vitae congue eu consequat ac felis donec et odio. Quis viverra nibh cras pulvinar. Diam donec adipiscing tristique risus nec feugiat. Ut tristique et egestas quis ipsum suspendisse ultrices. Turpis cursus in hac habitasse. Eget duis at tellus at urna. Eget sit amet tellus cras adipiscing enim eu. Sit amet tellus cras adipiscing enim eu turpis egestas.
하수는 두 산 틈에서 나와 돌과 부딪쳐 싸우며, 그 놀란 파도와 성난 물머리와 우는 여울과 노한 물결과 슬픈 곡조와 원망하는 소리가 굽이쳐 돌면서, 우는 듯, 소리치는 듯, 바쁘게 호령하는 듯, 항상 장성을 깨뜨릴 형세가 있어, 전차 만승과 전기 만대나 전포 만가와 전고 만좌로써는 그 무너뜨리고 내뿜는 소리를 족히 형용할 수 없을 것이다. Aliquam faucibus purus in massa tempor. Eget nullam non nisi est sit amet. Eu ultrices vitae auctor eu augue ut lectus. Tortor at auctor urna nunc. Quam lacus suspendisse faucibus interdum posuere lorem ipsum. Euismod in pellentesque massa placerat. Velit dignissim sodales ut eu sem integer. Lacus vel facilisis volutpat est velit egestas dui id. Urna nec tincidunt praesent semper feugiat. Duis at tellus at urna condimentum mattis. Mi proin sed libero enim sed faucibus. Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus. Ac tincidunt vitae semper quis lectus nulla. Et netus et malesuada fames ac turpis egestas sed tempus. Odio ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Pellentesque massa placerat duis ultricies lacus sed. Venenatis a condimentum vitae sapien pellentesque habitant morbi tristique senectus. Sit amet consectetur adipiscing elit pellentesque.
「L-函数」のことばでの「ハッセ・ヴェイユ」のL-函数を計算することができ 하수는 두 산 틈에서 나와 돌과 부딪쳐 싸우며, 그 놀란 파도와 성난 물머리와 우는 여울과 노한 물결과 슬픈 곡조와 원망하는 소리가 굽이쳐 돌면서, 우는 듯, 소리치는 듯, 바쁘게 호령하는 듯, 항상 장성을 깨뜨릴 형세가 있어, 전차 만승과 전기 만대나 전포 만가와 전고 만좌로써는 그 무너뜨리고 내뿜는 소리를 족히 형용할 수 없을 것이다. 모래 위에 큰 돌은 홀연히 떨어져 섰고, 강 언덕에 버드나무는 어둡고 컴컴하여 물지킴과 하수 귀신이 다투어 나와서 사람을 놀리는 듯한데, 좌우의 교리가 붙들려고 애쓰는 듯싶었다. 혹은 말하기를, “여기는 옛 전쟁터이므로 강물이 저같이 우는 것이다.” 하지만 이는 그런 것이 아니니, 강물 소리는 듣기 여하에 달렸을 것이다.
志村五郎と谷山豊の基本的結果は、CM-タイプとヘッケの「L-函数」のことばで、Aの「ハッセ・ヴェイユ」のL-函数を計算することができ、これから導出された無限部分を持つ。これらが、楕円曲線の場合のマックス・ドイリング(Max Deuring)の結果を一般化する。 나는 이제야 도를 알았도다. 마음이 어두운 자는 이목이 누가 되지 않고, 이 목만을 믿는 자는 보고 듣는 것을 더욱 밝혀서 병이 되는 것이다. 이제 내 마부가 발을 말굽을 밟혀서 뒷차에 실리었으므로, 나는 드디어 혼자 고삐를 늦추어 강에 띄우고, 무릎을 구부려 발을 모으고 안장 위에 앉았으니, 한번 떨어지면 강이나 물로 땅을 삼고 물로 옷을 삼으며 물로 몸을 삼고 물로 성정을 삼으니, 이제야 내 마음은 한번 떨어질 것을 판단한 터이므로 내 귓속에 강물 소리가 없어지고, 무릇 아홉 번 건너는데도 걱정이 없어 의자 위에서 좌와하고 기거하는 것 같았다. 옛날 우는 강을 건너는데, 황룡이 배를 등으로 져서 지극히 위험했으나 사생의 판단이 먼저 마음 속에 밝고 보니, 용이거나 지렁이거나, 크거나 작거나 족히 관계될 바 없었다. 소리와 빛은 외물이니 외물이 항상 이목에 누가 되어 사람으로 하여금 똑바로 보고 듣는 것을 잃게 하는 것이 이 같거든, 하물며 인생이 세상을 지나는 데 그 험하고 위태로운 것이 강물보다 심하고, 보고 듣는 것이 문득 병이 되는 것임에랴.
数学において体K上定義されたアーベル多様体AがCM-タイプ(CM-type)であるとは、自己準同型環 End(A)の中で十分に大きな部分可換環を持つことをいう。この用語は虚数乗法 (complex multiplication) 論から来ていて、虚数乗法論は19世紀に楕円曲線の研究のため開発された。20世紀の代数的整数論と代数幾何学の主要な成果のひとつに、アーベル多様体の次元d>1の理論の正しい定式化が発見されたことがある。この問題は、多変数複素函数論を使うことが非常に困難であるため、非常に抽象的である。
CM-タイプ(CM-type)は、単位元におけるAの正則接空間上の、EndQ(A)の極大可換部分環Lの作用を記述したものである。単純な種類のスペクトル理論が適用され、Lが固有ベクトルの基底を通して作用することを示すことができる。言い換えると、LはAの正則ベクトル場の上の対角行列を通した作用を持っている。L自体が複数の体の積ではなく数体であるという単純な場合には、CM-タイプはLの複素埋め込み(complex embedding)のリストである。複素共役をペアとして、2d個の複素埋め込みがあり、CM-タイプは各々のペアのから一つを選択する。そのようなCM-タイプの全てが実現されることが知られている。
從20世紀西北太平洋热带气旋有命名紀錄起至今有79個熱帶氣旋的名字被除名。在1999年及以前西北太平洋的熱帶氣旋命名和除名工作是由美國負責。2000年起命名表改由世界氣象組織颱風委員會制訂再交由日本氣象廳命名而颱風委員會都會舉行年度會議商討部份熱帶氣旋名稱的去留。其會員國有權要求將熱帶氣旋名字除去在委員會批准替補名字後就會交由日本氣象廳進行替換工作。大多數被除名的名字是因為在某地區造成嚴重影響而被替換但有些名字卻基於其他技術性原因而被除名。 從20世紀西北太平洋热带气旋有命名紀錄起至今有79個熱帶氣旋的名字被除名。在1999年及以前西北太平洋的熱帶氣旋命名和除名工作是由美國負責。2000年起命名表改由世界氣象組織颱風委員會制訂再交由日本氣象廳命名而颱風委員會都會舉行年度會議商討部份熱帶氣旋名稱的去留。其會員國有權要求將熱帶氣旋名字除去在委員會批准替補名字後就會交由日本氣象廳進行替換工作。大多數被除名的名字是因為在某地區造成嚴重影響而被替換但有些名字卻基於其他技術性原因而被除名。
􏿆The bitmap font for game developers who seek good font that has real multilingual support, for free (as in freedom and without cost)􀀀 दर्शनशास्त्र (अंग्रेज़ी-philosophy, यूनानी- φιλοσοφία, अर्थात् "प्रज्ञान से प्रेम" ) सामान्य और मौलिक प्रश्नों का सुव्यवस्थित अध्ययन है, जैसे की अस्तित्व, तर्क, ज्ञान, मूल्य, मन और भाषा से संबंधित। दर्शन वास्तविकता के मौलिक सत्य को तर्कबद्ध रूप से समझने और व्याख्या करने का प्रयास है, यथार्थ की परख के लिये एक दृष्टिकोण है। यह मौलिक प्रश्नों को संबोधित करने के अन्य तरीकों (जैसेकि रहस्यवाद , मिथक , या धर्म) से समालोचनात्मक, व्यवस्थित और तर्कसंगत युक्ति पर निर्भर होने के साथ-साथ अपने पूर्वनुमानों और विधियों पर चिंतन करने के कारण अलग है। व्यापक अर्थ में दर्शन, तर्कपूर्ण, विधिपूर्वक एवं क्रमबद्ध विचार की कला है। इसमें भाषा का तार्किक विश्लेषण और शब्दों और अवधारणाओं के अर्थ का स्पष्टीकरण शामिल है। वास्तव में, दर्शन को परिभाषित करना स्वयं में ही एक दार्शनिक प्रश्न है। कुछ स्रोतों का दावा है कि यह शब्द पाइथागोरस (लगभग ५७० - ४९५ ईसा पूर्व) द्वारा गढ़ा गया था, हालांकि यह पूर्णतः निश्चित नहीं है।
ऐतिहासिक रूप से, दर्शन में ज्ञान के सभी निकाय शामिल थे और इसके अभ्यासक को एक दार्शनिक के रूप में जाना जाता था।." प्राकृतिक दर्शन ", जो प्राचीन ग्रीस में एक शैक्षणिक विद्या के रूप में शुरू हुआ, इसमें खगोल विज्ञान, चिकित्सा और भौतिकी शामिल हैं। उदाहरण के लिए, आइजैक न्यूटन की १६८७ की प्राकृतिक दर्शन के गणितीय सिद्धांत बाद में भौतिकी की एक पुस्तक के रूप में वर्गीकृत हो गई। 19वीं शताब्दी में, आधुनिक अनुसंधान विश्वविद्यालयों के विकास, अकादमिक दर्शनशास्त्र और अन्य विषयों के वृत्तिकरण और उनमें विशेषज्ञता हासिल करने की ओर ले गए। तब से,सामाजिक उत्पादन के विकास और वैज्ञानिक ज्ञान के संचय की प्रक्रिया में अन्वीक्षण के विभिन्न क्षेत्र जो परंपरागत रूप से दर्शनशास्त्र का हिस्सा थे, दर्शनशास्त्र से पृथक होकर अलग-अलग शैक्षणिक विषय बन गए हैं, मूलतः सामाजिक विज्ञान जैसे मनोविज्ञान, समाजशास्त्र, भाषा विज्ञान और अर्थशास्त्र, साथ में दर्शनशास्त्र एक स्वतन्त्र विषय के रूप में विकसित होने लगा।
மெய்யியல் இயற்கை, சமுதாயம், சிந்தனை ஆகியவற்றின், வளர்ச்சியின் மீது ஆட்சி செய்யும் மிகப்பொதுவான விதிகளைக் குறித்த அறிவியலே மெய்யியல் எனப்படும். மெய்யியலானது இருப்பு, அறிவு, விழுமியம், காரணம், மனம், மொழி தொடர்பான பொதுவானதும், அடிப்படையானதுமான பிரச்சனைகள் பற்றிய படிப்பு என வரையறுக்கப்படுகிறது.
மெய்யியல் அல்லது மெய்க்கோட்பாட்டு இயல் அல்லது தத்துவம் (philosophy) என்னும் அறிவுத்துறையானது எது உண்மை, எது சரி, எது அறிவு, எது கலை, எது அறம், எது அழகு, கடவுள் என்று ஏதும் உண்டா, என்பது போன்ற அடிப்படையான கேள்விகளைப் பற்றி ஆழ ஆராயும் துறை ஆகும். தத்துவம் என்றால் உண்மை, உள்ளதை உள்ளவாறே அறிவதைப் பற்றிய கொள்கை, இயல் என்று பொருள். மெய்யியல் துறையில் கருத்துக்கள் எவ்வாறு ஏற்கப்படுகின்றன என்பதும், காரணம், ஏரணம், விவாதம் (தருக்கம்) முதலியன யாவை என்றும் கூர்ந்து நோக்கி ஆராயப்படும்.
தற்காலத்தில் அறிவியல் என்று அறியப்படும் துறை சிறப்புற்று வளரும் முன்னர், மெய்யியல் துறைதான் முன்னணியில் இருந்த அறிவுத்துறை ஆகும். 2500 ஆண்டுகளுக்கு முன்னர் வாழ்ந்த இந்தியர்களும், சீனர்களும், செருமானியர்களும், கிரேக்கர்களும் பிற உலக மாந்த இனங்களும் பலவாறாக, அடிப்படையாகச் சிந்தித்து தொகுத்து வைத்த கருத்துக்கள்தாம் மெய்யியலின் தொடக்கம். மெய்யியல் என்பது ஆங்கிலத்தில் Philosophy (ஃபிலாசஃபி) என்று கூறப்படுவது. இச்சொல் கிரேக்கச் சொல்லாகிய Φιλοσοφία (philo-sophia) என்பதில் இருந்து பெற்றது. இசொல்லின் பொருள் அறிவின் பால் காதல் (அறிவால் ஈர்க்கபடும் துறை) என்பதாகும்.
ปรัชญา (อังกฤษ: Philosophy จาก กรีก: φιλοσοφία, philosophia, 'ความรักในปัญญา') เป็นการศึกษาปัญหาทั่วไปและปัญหาพื้นฐาน เช่น เกี่ยวกับการดำรงอยู่ (อภิปรัชญา), เหตุผล (ตรรกศาสตร์), ความรู้ (ญาณวิทยา), คุณค่า (จริยศาสตร์), จิตใจ และ ภาษา Such questions are often posed as problems แหล่งข้อมูลบางแหล่งอ้างว่าคำนี้คิดขึ้นโดยพีทากอรัส (c. 570 c. 495 ปีก่อนค.ศ.) ในขณะที่บางส่วน ปฏิเสธและเชื่อว่าพีทากอรัสนำคำนี้มาใช้จากคำเดิมที่ปรากฏอยู่แล้ว วิธีวิทยาของปรัชญาประกอบด้วยการตั้งคำถาม, การถกเถียงเชิงวิพากษ์, การถกเถียงด้วยเหตุผล และการนำเสนออย่างเป็นระบบระเบียบ
ในอดีต คำว่า "ปรัชญา" หมายรวมถึงความรู้ทุกแขนง ส่วนผู้ศึกษาปรัชญา เรียก นักปรัชญา นับแต่ยุคของแอริสตอเติล นักปรัชญากรีกโบราณ จนถึงคริสต์ศตวรรษที่ 19 คำว่า "ปรัชญาธรรมชาติ" ครอบคลุมวิชาดาราศาสตร์ แพทยศาสตร์และฟิสิกส์ อย่างเช่น ตำรา Philosophiæ Naturalis Principia Mathematica (หลักคณิตศาสตร์ของปรัชญาธรรมชาติ) ของไอแซก นิวตัน ในปี 1687 เป็นวิชาปรัชญาก่อนที่ภายหลังจะถูกจำแนกเป็นวิชาฟิสิกส์แทน ในศตวรรษที่ 19 ภายหลังการเติบโตของมหาวิทยาลัยวิจัยทำให้ปรัชญาเชิงวิชาการ (academic philosophy) และสาขาวิชาอื่นกลายเป็นอาชีพและมีความเชี่ยวชาญเฉพาะด้านมากขึ้น หลังจากนั้นจึงมีหลายวิชาที่เคยเป็นส่วนหนึ่งของปรัชญาแยกออกไป โดยเฉพาะสังคมศาสตร์ เช่น จิตวิทยา สังคมวิทยา ภาษาศาสตร์ และเศรษฐศาสตร์
ในปัจจุบัน โดยทั่วไปถือว่าปรัชญาประกอบด้วยสาขาย่อยหลักทางวิชาการได้แก่ อภิปรัชญา ซึ่งศึกษาธรรมชาติพื้นฐานของการดำรงอยู่ และ ความเป็นจริง, ญาณวิทยา ซึ่งศึกษาธรรมชาติของความรู้ และ ความเชื่อ, จริยศาสตร์ ซึ่งศึกษาคุณค่าทางศีลธรรม และ ตรรกศาสตร์ ซึ่งศึกษากฎเกณฑ์ของการให้เหตุผลเพื่อสร้างข้อสรุปจากความจริง สาขาย่อยอื่น ๆ ที่เป็นที่รู้จักของปรัชญา เช่น ปรัชญาวิทยาศาสตร์, ปรัชญาการเมือง, สุนทรียศาสตร์, ปรัชญาภาษา และ ปรัชญาความคิด เป็นต้น
สาขาย่อยอื่น ๆ ที่เป็นที่รู้จักของปรัชญา