new tokeniser

This commit is contained in:
minjaesong
2024-03-29 23:43:58 +09:00
parent f69b39df95
commit 258f70dbf4
3 changed files with 124 additions and 65 deletions

View File

@@ -45,12 +45,7 @@ class MovableType(
val inputCharSeqsTokenised = inputText.tokenise() val inputCharSeqsTokenised = inputText.tokenise()
val inputWords = inputCharSeqsTokenised.map { val inputWords = inputCharSeqsTokenised.map {
val seq = it.also { seq -> TODO()
seq.add(0, 0)
seq.add(0)
}
font.createTextCache(CodepointSequence(seq))
}.toMutableList() // list of [ word, word, \n, word, word, word, ... ] }.toMutableList() // list of [ word, word, \n, word, word, word, ... ]
@@ -80,7 +75,7 @@ class MovableType(
hyphenated: Boolean = false, hyphenated: Boolean = false,
hyphenationScore0: Int? = null, hyphenationScore0: Int? = null,
hyphenationScore: Float? = null hyphenationScore: Float? = null
) { ) { /*
println(" JustifyAndFlush: widthNow = $lineWidthNow, thisWord = ${thisWord.textBuffer.toReadable()}, hyphenated = $hyphenated") println(" JustifyAndFlush: widthNow = $lineWidthNow, thisWord = ${thisWord.textBuffer.toReadable()}, hyphenated = $hyphenated")
@@ -196,7 +191,7 @@ class MovableType(
// flush the line // flush the line
flush() flush()
} }*/
} }
var thisWordObj: TextCacheObj var thisWordObj: TextCacheObj
@@ -290,7 +285,7 @@ class MovableType(
private val spaceWidth = 5 private val spaceWidth = 5
private val hangWidth = 6 private val hangWidth = 6
private fun Int.toHex() = "U+${this.toString(16).padStart(4, '0').toUpperCase()}" private fun CodePoint.toHex() = "U+${this.toString(16).padStart(4, '0').toUpperCase()}"
/** /**
* @return indices of blocks in the `currentLine` * @return indices of blocks in the `currentLine`
@@ -359,13 +354,13 @@ class MovableType(
private fun CodepointSequence.tokenise(): List<ArrayList<CodepointSequence>> { private fun CodepointSequence.tokenise(): List<ArrayList<CodepointSequence>> {
val lines = ArrayList<ArrayList<CodepointSequence>>() val lines = ArrayList<ArrayList<CodepointSequence>>()
var tokens = ArrayList<CodepointSequence>() var tokens = ArrayList<CodepointSequence>()
var boxBuffer = mutableListOf<Int>() var boxBuffer = ArrayList<CodePoint>()
val controlCharStack = ArrayList<CodePoint>() val controlCharStack = ArrayList<CodePoint>()
var colourCode: CodePoint? = null var colourCode: CodePoint? = null
var colourCodeRemovalRequested = false var colourCodeRemovalRequested = false
var cM: Int? = null var cM: CodePoint? = null
var glue = 0 var glue = 0
fun getControlHeader() = if (colourCode != null) fun getControlHeader() = if (colourCode != null)
@@ -383,17 +378,17 @@ class MovableType(
colourCode = null colourCode = null
} }
boxBuffer = mutableListOf() boxBuffer = ArrayList()
} }
fun sendoutGlue() { fun sendoutGlue() {
if (glue == 0) if (glue == 0)
tokens.add(CodepointSequence(ZWSP)) tokens.add(CodepointSequence(listOf((ZWSP))))
else if (glue.absoluteValue <= 16) else if (glue.absoluteValue <= 16)
if (glue > 0) if (glue > 0)
tokens.add(CodepointSequence(GLUE_POSITIVE_ONE + (glue - 1))) tokens.add(CodepointSequence(listOf(GLUE_POSITIVE_ONE + (glue - 1))))
else else
tokens.add(CodepointSequence(GLUE_NEGATIVE_ONE + (glue.absoluteValue - 1))) tokens.add(CodepointSequence(listOf(GLUE_NEGATIVE_ONE + (glue.absoluteValue - 1))))
else else
throw IllegalStateException("Glue too large ($glue)") throw IllegalStateException("Glue too large ($glue)")
@@ -405,12 +400,17 @@ class MovableType(
} }
fun appendGlue(char: CodePoint) { fun appendGlue(char: CodePoint) {
glue += whitespaceGlues[char]!! glue += whitespaceGlues[char] ?: throw NullPointerException("${char.toHex()} is not a whitespace")
}
fun appendZeroGlue() {
glue += 0
} }
fun proceedToNextLine() { fun proceedToNextLine() {
lines.add(tokens) lines.add(tokens)
tokens = ArrayList<CodepointSequence>() tokens = ArrayList<CodepointSequence>()
cM = null
} }
this.forEachIndexed { index, it -> this.forEachIndexed { index, it ->
@@ -438,8 +438,12 @@ class MovableType(
if (cM.isWhiteSpace()) { if (cM.isWhiteSpace()) {
sendoutGlue() sendoutGlue()
} }
else if (cM.isCJpunct()) { else if (cM.isCJparenStart()) {
appendGlue(cM!!) // will append 0 to the glue /* do nothing */
}
else if (cM.isCJpunctOrParenEnd()) {
sendoutBox()
appendZeroGlue()
sendoutGlue() sendoutGlue()
} }
else { // includes if cM.isCJ() else { // includes if cM.isCJ()
@@ -449,12 +453,20 @@ class MovableType(
appendToBuffer(c0) appendToBuffer(c0)
} }
else if (c0.isWhiteSpace()) { else if (c0.isWhiteSpace()) {
if (cM.isWhiteSpace() && cM != null) if (cM != null && !cM.isWhiteSpace())
sendoutBox() sendoutBox()
appendGlue(c0) appendGlue(c0)
} }
else if (c0.isCJpunct()) { else if (c0.isCJparenStart()) {
if (boxBuffer.isNotEmpty())
sendoutBox()
appendZeroGlue()
sendoutGlue()
appendToBuffer(c0)
}
else if (c0.isCJpunctOrParenEnd()) {
if (cM.isWhiteSpace()) if (cM.isWhiteSpace())
sendoutGlue() sendoutGlue()
@@ -467,21 +479,41 @@ class MovableType(
else if (cM.isWhiteSpace()) { else if (cM.isWhiteSpace()) {
sendoutGlue() sendoutGlue()
} }
else if (cM.isCJpunct()) { else if (cM.isCJpunctOrParenEnd()) {
appendGlue(cM!!) // will append 0 to the glue sendoutBox()
appendZeroGlue()
sendoutGlue() sendoutGlue()
} }
appendToBuffer(c0) appendToBuffer(c0)
} }
cM = it cM = c0
} }
// Add the last token if it's not empty // Add the last token if it's not empty
sendoutBox() sendoutBox()
proceedToNextLine() proceedToNextLine()
lines.forEach {
if (it[0].isEmpty() || it[0].isZeroGlue())
it.removeAt(0)
}
println("Tokenised (${lines.size} lines):")
lines.forEach {
val readables = it.map {
if (it.isEmpty())
"<!! EMPTY !!>"
else if (it.isGlue())
"<Glue ${it.first().toGlueSize()}>"
else
it.toReadable()
}
println("(${readables.size})[ ${readables.joinToString(" | ")} ]")
}
return lines return lines
} }
@@ -493,17 +525,27 @@ class MovableType(
private fun penaliseHyphenation(score: Int): Float = (10.0 * pow(score.toDouble(), 1.0/3.0) + 0.47*score).toFloat() private fun penaliseHyphenation(score: Int): Float = (10.0 * pow(score.toDouble(), 1.0/3.0) + 0.47*score).toFloat()
private fun CodePoint?.isCJ() = listOf(4, 6).any { private fun CodePoint?.isCJ() = if (this == null) false else listOf(4, 6).any {
TerrarumSansBitmap.codeRange[it].contains(this) TerrarumSansBitmap.codeRange[it].contains(this)
} }
private fun CodePoint?.isWhiteSpace() = whitespaceGlues.contains(this) private fun CodePoint?.isWhiteSpace() = if (this == null) false else whitespaceGlues.contains(this)
private fun CodePoint?.isCJpunct() = cjpuncts.contains(this) private fun CodePoint?.isCJparenStart() = if (this == null) false else cjparenStarts.contains(this)
private fun CodePoint?.isCJpunctOrParenEnd() = if (this == null) false else (cjpuncts.contains(this) || cjparenEnds.contains(this))
private fun CodePoint?.isControlIn() = controlIns.contains(this) private fun CodePoint?.isControlIn() = if (this == null) false else controlIns.contains(this)
private fun CodePoint?.isControlOut() = controlOuts.contains(this) private fun CodePoint?.isControlOut() = if (this == null) false else controlOuts.contains(this)
private fun CodePoint?.isColourCode() = colourCodes.contains(this) private fun CodePoint?.isColourCode() = if (this == null) false else colourCodes.contains(this)
private fun CodepointSequence.isGlue() = this.size == 1 && (this[0] == ZWSP || this[0] in 0xFFFE0..0xFFFFF)
private fun CodepointSequence.isZeroGlue() = this.size == 1 && (this[0] == ZWSP)
private fun CodePoint.toGlueSize() = when (this) {
ZWSP -> 0
in 0xFFFE0..0xFFFEF -> -(this - 0xFFFE0 + 1)
in 0xFFFF0..0xFFFFF -> this - 0xFFFF0 + 1
else -> throw IllegalArgumentException()
}
/** /**
* Hyphenates the word at the middle ("paragraph" -> "para-graph") * Hyphenates the word at the middle ("paragraph" -> "para-graph")
@@ -592,19 +634,25 @@ class MovableType(
private val whitespaceGlues = hashMapOf( private val whitespaceGlues = hashMapOf(
0x20 to 5, 0x20 to 5,
0x3000 to 16, 0x3000 to 16,
// cjpuncts
0x3001 to 0,
0x3002 to 0,
0xff0c to 0,
0xff0e to 0,
) )
private val cjpuncts = listOf(0x3001, 0x3002, 0xff0c, 0xff0e).toSortedSet() private val cjpuncts = listOf(0x3001, 0x3002, 0x3006, 0x303b, 0x30a0, 0x30fb, 0x30fc, 0x301c, 0xff01, 0xff0c, 0xff0e, 0xff1a, 0xff1b, 0xff1f, 0xff5e, 0xff65).toSortedSet()
private val cjparenStarts = listOf(0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016, 0x3018, 0x301A, 0x30fb, 0xff65).toSortedSet()
private val cjparenEnds = listOf(0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015, 0x3017, 0x3019, 0x301B).toSortedSet()
private val ZWSP = 0x200B private val ZWSP = 0x200B
private val GLUE_POSITIVE_ONE = 0xFFFF0 private val GLUE_POSITIVE_ONE = 0xFFFF0
private val GLUE_NEGATIVE_ONE = 0xFFFE0 private val GLUE_NEGATIVE_ONE = 0xFFFE0
private fun CodepointSequence.toReadable() = this.joinToString("") { Character.toString(it.toChar()) } private fun CodepointSequence.toReadable() = this.joinToString("") {
if (it == 0xA0)
"{NBSP}"
else if (it == 0xAD)
"{SHY}"
else if (it >= 0xF0000)
it.toHex() + " "
else
Character.toString(it.toChar())
}
} // end of companion object } // end of companion object
} }

View File

@@ -1,34 +1,11 @@
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. Lorem ipsum dolor sit amet, consec­tetur adipicit elit.
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. 하수는 두 산 틈에서 나와 돌과 부딪쳐 싸우며, 그 놀란 파도와 성난 물머리와 우는 여울과 노한 물결과 슬픈 곡조와 원망하는 소리가 굽이쳐 돌면서, 우는 듯, 소리치는 듯, 바쁘게 호령하는 듯, 항상 장성을 깨뜨릴 형세가 있어, 전차 만승과 전기 만대나 전포 만가와 전고 만좌로써는 그 무너뜨리고 내뿜는 소리를 족히 형용할 수 없을 것이다.
Vel eros donec ac odio tempor. Suspendisse in est ante in nibh mauris cursus. Urna cursus eget nunc scelerisque viverra mauris in. Cursus sit amet dictum sit. Quis imperdiet massa tincidunt nunc pulvinar sapien et ligula ullamcorper. Aenean vel elit scelerisque mauris pellentesque. Mauris in aliquam sem fringilla ut morbi. Nulla aliquet enim tortor at auctor. Pellentesque habitant morbi tristique senectus et. Cras pulvinar mattis nunc sed blandit libero volutpat. Eget velit aliquet sagittis id consectetur purus ut. At volutpat diam ut venenatis tellus in. In tellus integer feugiat scelerisque varius. Dapibus ultrices in iaculis nunc sed augue lacus viverra. Varius quam quisque id diam. 「L-函数」のことばでの「ハッセ・ヴェイユ」のL-函数を計算することができ
Ut aliquam purus sit amet luctus venenatis lectus magna. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Dictum at tempor commodo ullamcorper a lacus vestibulum sed. Mi proin sed libero enim sed faucibus turpis. Vel turpis nunc eget lorem dolor sed viverra ipsum nunc. Est sit amet facilisis magna. Ultricies tristique nulla aliquet enim. Orci sagittis eu volutpat odio facilisis. Aliquet nec ullamcorper sit amet. Massa placerat duis ultricies lacus sed turpis tincidunt id. Morbi tristique senectus et netus et. Quam id leo in vitae turpis massa sed elementum tempus. Proin sagittis nisl rhoncus mattis rhoncus urna neque viverra justo. Tincidunt eget nullam non nisi est sit amet. 志村五郎と谷山豊の基本的結果は、CM-タイプとヘッケの「L-函数」のことばで、Aの「ハッセ・ヴェイユ」のL-函数を計算することができ、これから導出された無限部分を持つ。これらが、楕円曲線の場合のマックス・ドイリング(Max Deuring)の結果を一般化する。
Feugiat in ante metus dictum at tempor commodo. Maecenas accumsan lacus vel facilisis volutpat. Dignissim cras tincidunt lobortis feugiat vivamus. Ante in nibh mauris cursus mattis molestie a iaculis. Odio pellentesque diam volutpat commodo sed egestas egestas fringilla. Leo integer malesuada nunc vel risus. Tellus id interdum velit laoreet id donec ultrices tincidunt. Et tortor consequat id porta nibh venenatis cras sed. Consectetur libero id faucibus nisl tincidunt eget nullam non nisi. Dapibus ultrices in iaculis nunc sed augue lacus viverra vitae. Enim praesent elementum facilisis leo vel fringilla. Lorem ipsum dolor sit amet consectetur adipiscing elit. Mollis aliquam ut porttitor leo. 從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)􀀀
산중의 내 집 문 앞에는 큰 시내가 있어 매양 여름철이 되어 큰 비가 한번 지나가면, 시냇물이 갑자기 불어서 항상 차기와 포고의 소리를 듣게 되어 드디어 귀에 젖어 버렸다. 내가 일찍이 문을 닫고 누워서 소리 종류를 비교해 보니, 깊은 소나무가 퉁소 소리를 내는 것은 듣는 이가 청아한 탓이요, 산이 찢어지고 언덕이 무너지는 듯한 것은 듣는 이가 분노한 탓이요, 뭇 개구리가 다투어 우는 것은 듣는 이가 교만한 탓이요, 천둥과 우레가 급한 것은 듣는 이가 놀란 탓이요, 찻물이 끓는 듯이 문무가 겸한 것은 듣는 이가 취미로운 탓이요, 거문고가 궁우에 맞는 것은 듣는 이가 슬픈 탓이요, 종이창에 바람이 우는 것은 듣는 이가 의심나는 탓이니, 모두 바르게 듣지 못하고 특히 흉중에 먹은 뜻을 가지고 귀에 들리는 대로 소리를 만든 것이다.
지금 나는 밤중에 한 강을 아홉 번 건넜다. 강은 새외로부터 나와서 장성을 뚫고 유하와 조하 · 황화 · 진천 등의 모든 물과 합쳐 밀운성 밑을 거쳐 백하가 되었다. 나는 어제 배로 백하를 건넜는데, 이것은 하류였다. 내가 막 요동 땅에 들어왔을 때는 바야흐로 한여름이라, 뜨거운 볕 밑을 가노라니 홀연 큰 강이 앞에 당하였다. 또한 물결이 산같이 일어나 끝을 볼 수 없으니, 이것은 대개 천리 밖에서 폭우가 온 것이다. 물을 건널 때는 사람들이 모두 머리를 우러러 하늘을 보는데, 나는 생각하기에 사람들이 머리를 들고 쳐다보는 것은 하늘에 묵도하는 것인 줄 알았더니, 나중에 알고 보니 물을 건너는 사람들이 물이 돌아 탕탕히 흐르는 것을 보면 자기 몸은 물이 거슬러 올라가는 것 같고 눈은 강물과 함께 따라 내려가는 것 같아서 갑자기 현기가 나면서 물에 빠지는 것이기 때문에, 그들이 머리를 들어 우러러보는 것은 하늘에 비는 것이 아니라 물을 피하여 보지 않으려 함이었다. 또한 어느 겨를에 잠깐 동안의 목숨을 위하여 기도할 수 있겠는가.
그 위험함이 이와 같으니, 물 소리를 들어보지 못하고 모두 말하기를, “요동 들은 평평하고 넓기 때문에 물 소리가 크게 울지 않는 것이다.” 하지만 이것은 물을 알지 못하는 것이다. 요하가 울지 않는 것이 아니라 특히 밤에 건너 보지 않은 때문이니, 낮에는 눈으로 물을 볼 수 있으므로 눈이 오로지 위험한 데만 보면서 무서움을 느껴 도리어 눈이 있는 것을 걱정하는 판인데, 어찌 또 들리는 소리가 있겠는가. 지금 나는 밤중에 물을 건너는지라 눈으로 위험한 것을 볼 수 없으니, 위험은 오로지 듣는 데만 있어 바야흐로 귀로 무서움을 느끼니 걱정을 이기지 못하는 것이다.
나는 이제야 도를 알았도다. 마음이 어두운 자는 이목이 누가 되지 않고, 이 목만을 믿는 자는 보고 듣는 것을 더욱 밝혀서 병이 되는 것이다. 이제 내 마부가 발을 말굽을 밟혀서 뒷차에 실리었으므로, 나는 드디어 혼자 고삐를 늦추어 강에 띄우고, 무릎을 구부려 발을 모으고 안장 위에 앉았으니, 한번 떨어지면 강이나 물로 땅을 삼고 물로 옷을 삼으며 물로 몸을 삼고 물로 성정을 삼으니, 이제야 내 마음은 한번 떨어질 것을 판단한 터이므로 내 귓속에 강물 소리가 없어지고, 무릇 아홉 번 건너는데도 걱정이 없어 의자 위에서 좌와하고 기거하는 것 같았다. 옛날 우는 강을 건너는데, 황룡이 배를 등으로 져서 지극히 위험했으나 사생의 판단이 먼저 마음 속에 밝고 보니, 용이거나 지렁이거나, 크거나 작거나 족히 관계될 바 없었다. 소리와 빛은 외물이니 외물이 항상 이목에 누가 되어 사람으로 하여금 똑바로 보고 듣는 것을 잃게 하는 것이 이 같거든, 하물며 인생이 세상을 지나는 데 그 험하고 위태로운 것이 강물보다 심하고, 보고 듣는 것이 문득 병이 되는 것임에랴.
数学において体K上定義されたアーベル多様体AがCM-タイプ(CM-type)であるとは、自己準同型環 End(A)の中で十分に大きな部分可換環を持つことをいう。この用語は虚数乗法 (complex multiplication) 論から来ていて、虚数乗法論は19世紀に楕円曲線の研究のため開発された。20世紀の代数的整数論と代数幾何学の主要な成果のひとつに、アーベル多様体の次元d>1の理論の正しい定式化が発見されたことがある。この問題は、多変数複素函数論を使うことが非常に困難であるため、非常に抽象的である。
フォーマルな定義は、有理数体QとEnd(A)のテンソル積
End_Q(A)
はZ上、次元2dの可換部分環を含んでいることである。d=1のとき、このことは二次体以外にはありえなく、End(A)は虚二次体の整環(英語版)(order)である。d>1に対しては、総実体の虚二次拡大であるCM体の場合が比較すべきに対象である。A が単純アーベル多様体ではないかもしれない例えば、楕円曲線のカルテシアン積ことを反映する他の他の場合もある。CM-タイプのアーベル多様体の別の名称は、十分に多くの虚数乗法を持つアーベル多様体である。
Kが複素数体であれば、任意のCM-タイプのAは、実は、数体である定義体英語版(field of definition)を持っている。自己準同型環の可能なタイプは、対合(ロサチの対合(英語版)(Rosati involution)をもつ環として既に分類されていて、CM-タイプのアーベル多様体の分類を導き出す。楕円曲線と同じような方法でCM-タイプの多様体を構成するには、C^dの中の格子 Λ から始め、アーベル多様体のリーマンの関係式を考えに入れる必要がある。
CM-タイプ(CM-type)は、単位元におけるAの正則接空間上の、EndQ(A)の極大可換部分環Lの作用を記述したものである。単純な種類のスペクトル理論が適用され、Lが固有ベクトルの基底を通して作用することを示すことができる。言い換えると、LはAの正則ベクトル場の上の対角行列を通した作用を持っている。L自体が複数の体の積ではなく数体であるという単純な場合には、CM-タイプはLの複素埋め込み(complex embedding)のリストである。複素共役をペアとして、2d個の複素埋め込みがあり、CM-タイプは各々のペアのから一つを選択する。そのようなCM-タイプの全てが実現されることが知られている。
志村五郎と谷山豊の基本的結果は、CM-タイプとヘッケのL-函数のことばで、A のハッセ・ヴェイユのL-函数を計算することができ、これから導出された無限部分を持つ。これらが、楕円曲線の場合のマックス・ドイリング(英語版)(Max Deuring)の結果を一般化する。
從20世紀西北太平洋热带气旋有命名紀錄起至今有79個熱帶氣旋的名字被除名。在1999年及以前西北太平洋的熱帶氣旋命名和除名工作是由美國負責。2000年起命名表改由世界氣象組織颱風委員會制訂再交由日本氣象廳命名而颱風委員會都會舉行年度會議商討部份熱帶氣旋名稱的去留。其會員國有權要求將熱帶氣旋名字除去在委員會批准替補名字後就會交由日本氣象廳進行替換工作。大多數被除名的名字是因為在某地區造成嚴重影響而被替換但有些名字卻基於其他技術性原因而被除名。

View File

@@ -0,0 +1,34 @@
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.
Vel eros donec ac odio tempor. Suspendisse in est ante in nibh mauris cursus. Urna cursus eget nunc scelerisque viverra mauris in. Cursus sit amet dictum sit. Quis imperdiet massa tincidunt nunc pulvinar sapien et ligula ullamcorper. Aenean vel elit scelerisque mauris pellentesque. Mauris in aliquam sem fringilla ut morbi. Nulla aliquet enim tortor at auctor. Pellentesque habitant morbi tristique senectus et. Cras pulvinar mattis nunc sed blandit libero volutpat. Eget velit aliquet sagittis id consectetur purus ut. At volutpat diam ut venenatis tellus in. In tellus integer feugiat scelerisque varius. Dapibus ultrices in iaculis nunc sed augue lacus viverra. Varius quam quisque id diam.
Ut aliquam purus sit amet luctus venenatis lectus magna. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Dictum at tempor commodo ullamcorper a lacus vestibulum sed. Mi proin sed libero enim sed faucibus turpis. Vel turpis nunc eget lorem dolor sed viverra ipsum nunc. Est sit amet facilisis magna. Ultricies tristique nulla aliquet enim. Orci sagittis eu volutpat odio facilisis. Aliquet nec ullamcorper sit amet. Massa placerat duis ultricies lacus sed turpis tincidunt id. Morbi tristique senectus et netus et. Quam id leo in vitae turpis massa sed elementum tempus. Proin sagittis nisl rhoncus mattis rhoncus urna neque viverra justo. Tincidunt eget nullam non nisi est sit amet.
Feugiat in ante metus dictum at tempor commodo. Maecenas accumsan lacus vel facilisis volutpat. Dignissim cras tincidunt lobortis feugiat vivamus. Ante in nibh mauris cursus mattis molestie a iaculis. Odio pellentesque diam volutpat commodo sed egestas egestas fringilla. Leo integer malesuada nunc vel risus. Tellus id interdum velit laoreet id donec ultrices tincidunt. Et tortor consequat id porta nibh venenatis cras sed. Consectetur libero id faucibus nisl tincidunt eget nullam non nisi. Dapibus ultrices in iaculis nunc sed augue lacus viverra vitae. Enim praesent elementum facilisis leo vel fringilla. Lorem ipsum dolor sit amet consectetur adipiscing elit. Mollis aliquam ut porttitor leo.
하수는 두 산 틈에서 나와 돌과 부딪쳐 싸우며, 그 놀란 파도와 성난 물머리와 우는 여울과 노한 물결과 슬픈 곡조와 원망하는 소리가 굽이쳐 돌면서, 우는 듯, 소리치는 듯, 바쁘게 호령하는 듯, 항상 장성을 깨뜨릴 형세가 있어, 전차 만승과 전기 만대나 전포 만가와 전고 만좌로써는 그 무너뜨리고 내뿜는 소리를 족히 형용할 수 없을 것이다. 모래 위에 큰 돌은 홀연히 떨어져 섰고, 강 언덕에 버드나무는 어둡고 컴컴하여 물지킴과 하수 귀신이 다투어 나와서 사람을 놀리는 듯한데, 좌우의 교리가 붙들려고 애쓰는 듯싶었다. 혹은 말하기를, “여기는 옛 전쟁터이므로 강물이 저같이 우는 것이다.” 하지만 이는 그런 것이 아니니, 강물 소리는 듣기 여하에 달렸을 것이다.
산중의 내 집 문 앞에는 큰 시내가 있어 매양 여름철이 되어 큰 비가 한번 지나가면, 시냇물이 갑자기 불어서 항상 차기와 포고의 소리를 듣게 되어 드디어 귀에 젖어 버렸다. 내가 일찍이 문을 닫고 누워서 소리 종류를 비교해 보니, 깊은 소나무가 퉁소 소리를 내는 것은 듣는 이가 청아한 탓이요, 산이 찢어지고 언덕이 무너지는 듯한 것은 듣는 이가 분노한 탓이요, 뭇 개구리가 다투어 우는 것은 듣는 이가 교만한 탓이요, 천둥과 우레가 급한 것은 듣는 이가 놀란 탓이요, 찻물이 끓는 듯이 문무가 겸한 것은 듣는 이가 취미로운 탓이요, 거문고가 궁우에 맞는 것은 듣는 이가 슬픈 탓이요, 종이창에 바람이 우는 것은 듣는 이가 의심나는 탓이니, 모두 바르게 듣지 못하고 특히 흉중에 먹은 뜻을 가지고 귀에 들리는 대로 소리를 만든 것이다.
지금 나는 밤중에 한 강을 아홉 번 건넜다. 강은 새외로부터 나와서 장성을 뚫고 유하와 조하 · 황화 · 진천 등의 모든 물과 합쳐 밀운성 밑을 거쳐 백하가 되었다. 나는 어제 배로 백하를 건넜는데, 이것은 하류였다. 내가 막 요동 땅에 들어왔을 때는 바야흐로 한여름이라, 뜨거운 볕 밑을 가노라니 홀연 큰 강이 앞에 당하였다. 또한 물결이 산같이 일어나 끝을 볼 수 없으니, 이것은 대개 천리 밖에서 폭우가 온 것이다. 물을 건널 때는 사람들이 모두 머리를 우러러 하늘을 보는데, 나는 생각하기에 사람들이 머리를 들고 쳐다보는 것은 하늘에 묵도하는 것인 줄 알았더니, 나중에 알고 보니 물을 건너는 사람들이 물이 돌아 탕탕히 흐르는 것을 보면 자기 몸은 물이 거슬러 올라가는 것 같고 눈은 강물과 함께 따라 내려가는 것 같아서 갑자기 현기가 나면서 물에 빠지는 것이기 때문에, 그들이 머리를 들어 우러러보는 것은 하늘에 비는 것이 아니라 물을 피하여 보지 않으려 함이었다. 또한 어느 겨를에 잠깐 동안의 목숨을 위하여 기도할 수 있겠는가.
그 위험함이 이와 같으니, 물 소리를 들어보지 못하고 모두 말하기를, “요동 들은 평평하고 넓기 때문에 물 소리가 크게 울지 않는 것이다.” 하지만 이것은 물을 알지 못하는 것이다. 요하가 울지 않는 것이 아니라 특히 밤에 건너 보지 않은 때문이니, 낮에는 눈으로 물을 볼 수 있으므로 눈이 오로지 위험한 데만 보면서 무서움을 느껴 도리어 눈이 있는 것을 걱정하는 판인데, 어찌 또 들리는 소리가 있겠는가. 지금 나는 밤중에 물을 건너는지라 눈으로 위험한 것을 볼 수 없으니, 위험은 오로지 듣는 데만 있어 바야흐로 귀로 무서움을 느끼니 걱정을 이기지 못하는 것이다.
나는 이제야 도를 알았도다. 마음이 어두운 자는 이목이 누가 되지 않고, 이 목만을 믿는 자는 보고 듣는 것을 더욱 밝혀서 병이 되는 것이다. 이제 내 마부가 발을 말굽을 밟혀서 뒷차에 실리었으므로, 나는 드디어 혼자 고삐를 늦추어 강에 띄우고, 무릎을 구부려 발을 모으고 안장 위에 앉았으니, 한번 떨어지면 강이나 물로 땅을 삼고 물로 옷을 삼으며 물로 몸을 삼고 물로 성정을 삼으니, 이제야 내 마음은 한번 떨어질 것을 판단한 터이므로 내 귓속에 강물 소리가 없어지고, 무릇 아홉 번 건너는데도 걱정이 없어 의자 위에서 좌와하고 기거하는 것 같았다. 옛날 우는 강을 건너는데, 황룡이 배를 등으로 져서 지극히 위험했으나 사생의 판단이 먼저 마음 속에 밝고 보니, 용이거나 지렁이거나, 크거나 작거나 족히 관계될 바 없었다. 소리와 빛은 외물이니 외물이 항상 이목에 누가 되어 사람으로 하여금 똑바로 보고 듣는 것을 잃게 하는 것이 이 같거든, 하물며 인생이 세상을 지나는 데 그 험하고 위태로운 것이 강물보다 심하고, 보고 듣는 것이 문득 병이 되는 것임에랴.
数学において体K上定義されたアーベル多様体AがCM-タイプ(CM-type)であるとは、自己準同型環 End(A)の中で十分に大きな部分可換環を持つことをいう。この用語は虚数乗法 (complex multiplication) 論から来ていて、虚数乗法論は19世紀に楕円曲線の研究のため開発された。20世紀の代数的整数論と代数幾何学の主要な成果のひとつに、アーベル多様体の次元d>1の理論の正しい定式化が発見されたことがある。この問題は、多変数複素函数論を使うことが非常に困難であるため、非常に抽象的である。
フォーマルな定義は、有理数体QとEnd(A)のテンソル積
End_Q(A)
はZ上、次元2dの可換部分環を含んでいることである。d=1のとき、このことは二次体以外にはありえなく、End(A)は虚二次体の整環(英語版)(order)である。d>1に対しては、総実体の虚二次拡大であるCM体の場合が比較すべきに対象である。A が単純アーベル多様体ではないかもしれない例えば、楕円曲線のカルテシアン積ことを反映する他の他の場合もある。CM-タイプのアーベル多様体の別の名称は、十分に多くの虚数乗法を持つアーベル多様体である。
Kが複素数体であれば、任意のCM-タイプのAは、実は、数体である定義体英語版(field of definition)を持っている。自己準同型環の可能なタイプは、対合(ロサチの対合(英語版)(Rosati involution)をもつ環として既に分類されていて、CM-タイプのアーベル多様体の分類を導き出す。楕円曲線と同じような方法でCM-タイプの多様体を構成するには、C^dの中の格子 Λ から始め、アーベル多様体のリーマンの関係式を考えに入れる必要がある。
CM-タイプ(CM-type)は、単位元におけるAの正則接空間上の、EndQ(A)の極大可換部分環Lの作用を記述したものである。単純な種類のスペクトル理論が適用され、Lが固有ベクトルの基底を通して作用することを示すことができる。言い換えると、LはAの正則ベクトル場の上の対角行列を通した作用を持っている。L自体が複数の体の積ではなく数体であるという単純な場合には、CM-タイプはLの複素埋め込み(complex embedding)のリストである。複素共役をペアとして、2d個の複素埋め込みがあり、CM-タイプは各々のペアのから一つを選択する。そのようなCM-タイプの全てが実現されることが知られている。
志村五郎と谷山豊の基本的結果は、CM-タイプとヘッケのL-函数のことばで、A のハッセ・ヴェイユのL-函数を計算することができ、これから導出された無限部分を持つ。これらが、楕円曲線の場合のマックス・ドイリング(英語版)(Max Deuring)の結果を一般化する。
從20世紀西北太平洋热带气旋有命名紀錄起至今有79個熱帶氣旋的名字被除名。在1999年及以前西北太平洋的熱帶氣旋命名和除名工作是由美國負責。2000年起命名表改由世界氣象組織颱風委員會制訂再交由日本氣象廳命名而颱風委員會都會舉行年度會議商討部份熱帶氣旋名稱的去留。其會員國有權要求將熱帶氣旋名字除去在委員會批准替補名字後就會交由日本氣象廳進行替換工作。大多數被除名的名字是因為在某地區造成嚴重影響而被替換但有些名字卻基於其他技術性原因而被除名。