Skip to content

Commit f54f9a8

Browse files
committed
Add Y coordinate and height metadata to all parsed tokens
1 parent cc0a7a6 commit f54f9a8

File tree

20 files changed

+227
-161
lines changed

20 files changed

+227
-161
lines changed

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/books/ArchivesOfTheEmpire1.kt

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,26 @@ object ArchivesOfTheEmpire1 : Book, CareerSource, TrappingSource {
5151

5252
override fun resolveToken(textToken: TextToken): Token? {
5353
if (textToken.fontName.endsWith("CaslonAntique-Bold-SC700")) {
54-
return Token.BoxHeader(textToken.text)
54+
return Token.BoxHeader(textToken)
5555
}
5656

5757
if (textToken.fontName.endsWith("CaslonAntique")) {
5858
if (textToken.fontSizePt == 11f) {
59-
return Token.TableHeading(textToken.text)
59+
return Token.TableHeading(textToken.text, textToken.metadata)
6060
}
6161

6262
if (textToken.fontSizePt == 15f) {
63-
return Token.BoxHeader(textToken.text)
63+
return Token.BoxHeader(textToken)
6464
}
6565
}
6666

6767
if (textToken.fontName.endsWith("CaslonAntique-Bold")) {
6868
if (textToken.fontSizePt == 19f || textToken.fontSizePt == 22f) {
69-
return Token.Heading1(textToken.text)
69+
return Token.Heading1(textToken.text, textToken.metadata)
7070
}
7171

7272
if (textToken.fontSizePt == 10f) {
73-
return Token.TableHeadCell(textToken.text)
73+
return Token.TableHeadCell(textToken)
7474
}
7575
}
7676

@@ -79,28 +79,24 @@ object ArchivesOfTheEmpire1 : Book, CareerSource, TrappingSource {
7979
}
8080

8181
if (textToken.fontSizePt == 12f && textToken.fontName.endsWith("ACaslonPro-Bold")) {
82-
return Token.Heading3(textToken.text)
82+
return Token.Heading3(textToken)
8383
}
8484

8585
if (textToken.fontSizePt == 8f && textToken.fontName.endsWith("ACaslonPro-Regular")) {
86-
return Token.BodyCellPart(
87-
text = textToken.text,
88-
y = textToken.y,
89-
height = textToken.height,
90-
)
86+
return Token.BodyCellPart(textToken)
9187
}
9288

9389
if (textToken.fontSizePt == 9f) {
9490
if (textToken.fontName.endsWith("ACaslonPro-Bold")) {
95-
return Token.BoldPart(textToken.text)
91+
return Token.BoldPart(textToken)
9692
}
9793

9894
if (textToken.fontName.endsWith("ACaslonPro-Italic")) {
99-
return Token.ItalicsPart(textToken.text)
95+
return Token.ItalicsPart(textToken)
10096
}
10197

10298
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
103-
return Token.NormalPart(textToken.text)
99+
return Token.NormalPart(textToken)
104100
}
105101
}
106102

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/books/ArchivesOfTheEmpire2.kt

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ object ArchivesOfTheEmpire2 : Book, CareerSource, SpellSource, TrappingSource {
2828
return CareerParser(
2929
tokenMapper = {
3030
when (it) {
31-
is Token.BodyCellPart -> Token.NormalPart(it.text)
32-
is Token.TableHeadCell -> Token.BoldPart(it.text)
31+
is Token.BodyCellPart -> Token.NormalPart(it.text, it.metadata)
32+
is Token.TableHeadCell -> Token.BoldPart(it.text, it.metadata)
3333
else -> it
3434
}
3535
},
@@ -89,29 +89,29 @@ object ArchivesOfTheEmpire2 : Book, CareerSource, SpellSource, TrappingSource {
8989
override fun resolveToken(textToken: TextToken): Token? {
9090
if (textToken.fontName.endsWith("CaslonAntique-Bold-SC700")) {
9191
if (textToken.fontSizePt == 12f || textToken.fontSizePt == 18f) {
92-
return Token.Heading1(textToken.text)
92+
return Token.Heading1(textToken)
9393
}
9494

95-
return Token.BoxHeader(textToken.text)
95+
return Token.BoxHeader(textToken)
9696
}
9797

9898
if (textToken.fontName.endsWith("CaslonAntique")) {
9999
if (textToken.fontSizePt == 11f) {
100-
return Token.TableHeading(textToken.text)
100+
return Token.TableHeading(textToken)
101101
}
102102

103103
if (textToken.fontSizePt == 15f) {
104-
return Token.BoxHeader(textToken.text)
104+
return Token.BoxHeader(textToken)
105105
}
106106
}
107107

108108
if (textToken.fontName.endsWith("CaslonAntique-Bold")) {
109109
if (textToken.fontSizePt == 19f || textToken.fontSizePt == 22f) {
110-
return Token.Heading1(textToken.text)
110+
return Token.Heading1(textToken)
111111
}
112112

113113
if (textToken.fontSizePt == 10f) {
114-
return Token.TableHeadCell(textToken.text)
114+
return Token.TableHeadCell(textToken)
115115
}
116116
}
117117

@@ -120,43 +120,41 @@ object ArchivesOfTheEmpire2 : Book, CareerSource, SpellSource, TrappingSource {
120120
}
121121

122122
if (textToken.fontSizePt == 12f && textToken.fontName.endsWith("ACaslonPro-Bold")) {
123-
return Token.Heading3(textToken.text)
123+
return Token.Heading3(textToken)
124124
}
125125

126126
if (textToken.fontSizePt == 8f) {
127127
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
128128
return Token.BodyCellPart(
129129
text = textToken.text,
130-
y = textToken.y,
131-
height = textToken.height,
130+
metadata = Token.Metadata(
131+
y = textToken.y,
132+
height = textToken.height
133+
)
132134
)
133135
}
134136

135137
if (textToken.fontName.endsWith("ACaslonPro-Italic")) {
136-
return Token.ItalicsPart(textToken.text)
138+
return Token.ItalicsPart(textToken)
137139
}
138140
}
139141

140142
if (textToken.fontSizePt == 9f) {
141143
if (textToken.fontName.endsWith("ACaslonPro-Bold")) {
142-
return Token.BoldPart(textToken.text)
144+
return Token.BoldPart(textToken)
143145
}
144146

145147
if (textToken.fontName.endsWith("ACaslonPro-Italic")) {
146-
return Token.ItalicsPart(textToken.text)
148+
return Token.ItalicsPart(textToken)
147149
}
148150

149151
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
150152
// These table cells are not formatted as table cells
151153
if (textToken.text == "Ironfist" || textToken.text == "Big Ogre Club") {
152-
return Token.BodyCellPart(
153-
text = textToken.text,
154-
y = textToken.y,
155-
height = textToken.height,
156-
)
154+
return Token.BodyCellPart(textToken)
157155
}
158156

159-
return Token.NormalPart(textToken.text)
157+
return Token.NormalPart(textToken)
160158
}
161159
}
162160

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/books/CoreRulebook.kt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ object CoreRulebook :
312312
tokenMapper = { token ->
313313
if (token is Token.Heading3 && token.text == "Armour Flaws\n") {
314314
// This is incorrectly formatted in the PDF, see the bottom of page 300
315-
Token.Heading2(token.text)
315+
Token.Heading2(token.text, token.metadata)
316316
} else {
317317
token
318318
}
@@ -380,20 +380,20 @@ object CoreRulebook :
380380

381381
override fun resolveToken(textToken: TextToken): Token? {
382382
if (textToken.fontName.endsWith("CaslonAntique") && textToken.fontSizePt == 15f) {
383-
return Token.BoxHeader(textToken.text)
383+
return Token.BoxHeader(textToken)
384384
}
385385

386386
if (textToken.fontName.endsWith("CaslonAntique") && textToken.fontSizePt == 10f) {
387-
return Token.BoxContent(textToken.text)
387+
return Token.BoxContent(textToken)
388388
}
389389

390390
if (textToken.fontName.endsWith("CaslonAntique,Bold")) {
391391
if (textToken.fontSizePt == 19f) {
392-
return Token.Heading1(textToken.text)
392+
return Token.Heading1(textToken)
393393
}
394394

395395
if (textToken.fontSizePt == 10f && textToken.text.isNotBlank()) {
396-
return Token.TableHeadCell(textToken.text)
396+
return Token.TableHeadCell(textToken)
397397
}
398398
}
399399

@@ -403,14 +403,14 @@ object CoreRulebook :
403403

404404
if (textToken.fontName.endsWith("CaslonAntique-Bold-SC700")) {
405405
if (textToken.fontSizePt == 12f || textToken.fontSizePt == 18f) {
406-
return Token.Heading2(textToken.text)
406+
return Token.Heading2(textToken)
407407
}
408408

409-
return Token.BoxHeader(textToken.text)
409+
return Token.BoxHeader(textToken)
410410
}
411411

412412
if (textToken.fontName.endsWith("ACaslonPro-Bold") && textToken.fontSizePt == 12f) {
413-
return Token.Heading3(textToken.text)
413+
return Token.Heading3(textToken)
414414
}
415415

416416
if (textToken.text.startsWith("")) {
@@ -419,30 +419,32 @@ object CoreRulebook :
419419

420420
if (textToken.fontSizePt == 9.0f) {
421421
if (textToken.fontName.endsWith("ACaslonPro-Bold")) {
422-
return Token.BoldPart(textToken.text)
422+
return Token.BoldPart(textToken)
423423
}
424424

425425
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
426426
if (heightEquals(textToken.height, 6.39f)) {
427-
return Token.ItalicsPart(textToken.text)
427+
return Token.ItalicsPart(textToken)
428428
}
429429

430430
if (heightEquals(textToken.height, 6.2f)) {
431-
return Token.NormalPart(textToken.text)
431+
return Token.NormalPart(textToken)
432432
}
433433
}
434434
}
435435

436436
if (textToken.fontSizePt == 8f && textToken.fontName.endsWith("ACaslonPro-Regular")) {
437437
return Token.BodyCellPart(
438438
text = textToken.text,
439-
y = textToken.y,
440-
height = textToken.height,
439+
metadata = Token.Metadata(
440+
y = textToken.y,
441+
height = textToken.height
442+
)
441443
)
442444
}
443445

444446
if (textToken.fontSizePt == 11f && textToken.fontName.endsWith("CaslonAntique")) {
445-
return Token.TableHeading(textToken.text)
447+
return Token.TableHeading(textToken)
446448
}
447449

448450
return null

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/books/EnemyInShadowsCompanion.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,30 +60,30 @@ object EnemyInShadowsCompanion : Book, SpellSource {
6060
(textToken.fontSizePt == 12f || textToken.fontSizePt == 18f) &&
6161
textToken.fontName.endsWith("CaslonAntique-Bold-SC700")
6262
) {
63-
return Token.Heading2(textToken.text)
63+
return Token.Heading2(textToken)
6464
}
6565

6666
if (
6767
(textToken.fontSizePt == 19f || textToken.fontSizePt == 22f) &&
6868
textToken.fontName.endsWith("CaslonAntique-Bold")
6969
) {
70-
return Token.Heading2(textToken.text)
70+
return Token.Heading2(textToken)
7171
}
7272

7373
if (textToken.fontSizePt == 12f && textToken.fontName.endsWith("ACaslonPro-Bold")) {
74-
return Token.Heading3(textToken.text)
74+
return Token.Heading3(textToken)
7575
}
7676

7777
if (textToken.fontSizePt == 10f || textToken.fontSizePt == 9f) {
7878
if (textToken.fontName.endsWith("ACaslonPro-Bold")) {
79-
return Token.BoldPart(textToken.text)
79+
return Token.BoldPart(textToken)
8080
}
8181

8282
if (textToken.fontName.endsWith("ACaslonPro-Italic")) {
83-
return Token.ItalicsPart(textToken.text)
83+
return Token.ItalicsPart(textToken)
8484
}
8585
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
86-
return Token.NormalPart(textToken.text)
86+
return Token.NormalPart(textToken)
8787
}
8888
}
8989

common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/books/SeaOfClaws.kt

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ object SeaOfClaws : Book, SpellSource, TalentSource, CareerSource, MiracleSource
3737
override fun importCareers(document: Document): List<Career> {
3838
val tokenMapper: (Token) -> Token = {
3939
when (it) {
40-
is Token.BodyCellPart -> Token.NormalPart(it.text)
41-
is Token.TableHeadCell -> Token.BoldPart(it.text)
40+
is Token.BodyCellPart -> Token.NormalPart(it.text, it.metadata)
41+
is Token.TableHeadCell -> Token.BoldPart(it.text, it.metadata)
4242
else -> it
4343
}
4444
}
@@ -90,25 +90,25 @@ object SeaOfClaws : Book, SpellSource, TalentSource, CareerSource, MiracleSource
9090
override fun resolveToken(textToken: TextToken): Token? {
9191
if (textToken.fontSizePt == 10f) {
9292
if (textToken.fontName.endsWith("ACaslonPro-Bold")) {
93-
return Token.BoldPart(textToken.text)
93+
return Token.BoldPart(textToken)
9494
}
9595

9696
if (textToken.fontName.endsWith("ACaslonPro-Italic")) {
97-
return Token.ItalicsPart(textToken.text)
97+
return Token.ItalicsPart(textToken)
9898
}
9999

100100
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
101-
return Token.NormalPart(textToken.text)
101+
return Token.NormalPart(textToken)
102102
}
103103
}
104104

105105
if (textToken.fontName.endsWith("CaslonAntique-Bold")) {
106106
if (textToken.fontSizePt == 22f) {
107-
return Token.Heading1(textToken.text)
107+
return Token.Heading1(textToken)
108108
}
109109

110110
if (textToken.fontSizePt == 10f) {
111-
return Token.TableHeading(textToken.text)
111+
return Token.TableHeading(textToken)
112112
}
113113
}
114114

@@ -117,29 +117,31 @@ object SeaOfClaws : Book, SpellSource, TalentSource, CareerSource, MiracleSource
117117
}
118118

119119
if (textToken.fontSizePt == 12f && textToken.fontName.endsWith("ACaslonPro-Bold")) {
120-
return Token.Heading3(textToken.text)
120+
return Token.Heading3(textToken)
121121
}
122122

123123
if (textToken.fontSizePt == 9f) {
124124
if (textToken.fontName.endsWith("ACaslonPro-Regular")) {
125125
return Token.BodyCellPart(
126126
text = textToken.text,
127-
y = textToken.y,
128-
height = textToken.height,
127+
metadata = Token.Metadata(
128+
y = textToken.y,
129+
height = textToken.height,
130+
)
129131
)
130132
}
131133

132134
if (textToken.fontName.endsWith("ACaslonPro-Bold")) {
133-
return Token.TableHeadCell(textToken.text)
135+
return Token.TableHeadCell(textToken)
134136
}
135137
}
136138

137139
if (textToken.fontName.endsWith("CaslonAntique-Bold-SC700")) {
138140
if (textToken.fontSizePt == 12f || textToken.fontSizePt == 18f) {
139-
return Token.Heading2(textToken.text)
141+
return Token.Heading2(textToken)
140142
}
141143

142-
return Token.BoxHeader(textToken.text)
144+
return Token.BoxHeader(textToken)
143145
}
144146

145147
return null

0 commit comments

Comments
 (0)