Skip to content

Commit 784801e

Browse files
committed
Improve table handling, add support for nobility table header template
Closes #154
1 parent 6bec8ad commit 784801e

File tree

7 files changed

+59
-30
lines changed

7 files changed

+59
-30
lines changed

app/src/main/java/org/nsh07/wikireader/parser/cleanUpWikitext.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ package org.nsh07.wikireader.parser
66
* @param wikitext Source Wikitext to clean up
77
*/
88
fun cleanUpWikitext(wikitext: String): String {
9-
var bodyText = wikitext
9+
return wikitext
1010
.replace(
1111
"<ref[^/]*?>.+?</ref>|<ref.*?/>".toRegex(RegexOption.DOT_MATCHES_ALL),
1212
""
1313
)
14-
bodyText = bodyText.replace("<var>|</var>".toRegex(), "''")
15-
return bodyText
14+
.replace(
15+
"\\{\\{nobility table header.*?\\}\\}"
16+
.toRegex(setOf(RegexOption.IGNORE_CASE, RegexOption.DOT_MATCHES_ALL)),
17+
"{| class=\"wikitable\"\n"
18+
)
1619
}

app/src/main/java/org/nsh07/wikireader/parser/parseWikitable.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ fun parseWikitable(
1515
val rows = mutableListOf<MutableList<AnnotatedString>>()
1616
var caption = AnnotatedString("")
1717
val lines = table.lines().map { it.trim() }.filter { it.isNotEmpty() }
18-
val styling = "class=|align=|scope=|style=|rowspan=|colspan=|width=|nowrap|data-sort".toRegex()
18+
val styling =
19+
"class=|align=|scope=|style=|rowspan=|colspan=|width=|[^{]nowrap|data-sort".toRegex()
1920

2021
var currentRow = mutableListOf<AnnotatedString>()
2122
val rowSpan = mutableMapOf<Int, Int>()

app/src/main/java/org/nsh07/wikireader/parser/wikitextToAnnotatedString.kt

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ fun String.toWikitextAnnotatedString(
3939
newLine: Boolean = true,
4040
inIndentCode: Boolean = false
4141
): AnnotatedString {
42+
val hrChar = ''
4243
val input = this
4344
var i = 0
4445
var number = 1 // Count for numbered lists
@@ -92,6 +93,13 @@ fun String.toWikitextAnnotatedString(
9293
i += currSubstring.substringBefore('>').length
9394
}
9495

96+
currSubstring.startsWith("<hr", ignoreCase = true) -> {
97+
append('\n')
98+
repeat(5) { append(hrChar) }
99+
append('\n')
100+
i += currSubstring.substringBefore('>').length
101+
}
102+
95103
currSubstring.startsWith("<u>") -> {
96104
val curr = currSubstring.substringBefore("</u>").substringAfter('>')
97105
withStyle(SpanStyle(textDecoration = TextDecoration.Underline)) {
@@ -156,6 +164,12 @@ fun String.toWikitextAnnotatedString(
156164
i += 5 + curr.length + 5
157165
}
158166

167+
currSubstring.startsWith("<var>") -> {
168+
val curr = currSubstring.substringBefore("</var>").substringAfter('>')
169+
append("''$curr''".twasNoNewline())
170+
i += 5 + curr.length + 5
171+
}
172+
159173
currSubstring.startsWith("<sup>") -> {
160174
val curr = currSubstring.substringBefore("</sup>").substringAfter('>')
161175
withStyle(
@@ -262,12 +276,10 @@ fun String.toWikitextAnnotatedString(
262276
currSubstring.startsWith("{{math", ignoreCase = true) ||
263277
currSubstring.startsWith("{{mvar", ignoreCase = true)
264278
-> {
265-
val curr = currSubstring.substringAfter(
266-
'|',
267-
currSubstring.substringAfter("{{").substringBefore("}}")
268-
)
279+
val curr = currSubstring.substringAfter('|').removePrefix("1=")
269280
withStyle(SpanStyle(fontFamily = FontFamily.Serif)) {
270281
append(curr.replace(' ', nbsp).twas())
282+
append(curr.replace(' ', nbsp).twas())
271283
}
272284
}
273285

@@ -276,6 +288,20 @@ fun String.toWikitextAnnotatedString(
276288
append(curr.twas())
277289
}
278290

291+
currSubstring.startsWith("{{var", ignoreCase = true) -> {
292+
val curr = currSubstring.substringAfter('|')
293+
append("''$curr''".twas())
294+
}
295+
296+
arrayOf("{{small", "{{smaller", "{{petit", "{{hw-small", "{{sma").any {
297+
currSubstring.startsWith(it, ignoreCase = true)
298+
} -> {
299+
val curr = currSubstring.substringAfter('|')
300+
withStyle(SpanStyle(fontSize = (fontSize - 2).sp)) {
301+
append(curr.twas())
302+
}
303+
}
304+
279305
currSubstring.startsWith("{{main", ignoreCase = true) -> {
280306
val curr = currSubstring.substringAfter('|')
281307
val splitList = curr.split('|')

app/src/main/java/org/nsh07/wikireader/ui/homeScreen/EquationImage.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Box
66
import androidx.compose.foundation.layout.padding
77
import androidx.compose.foundation.rememberScrollState
88
import androidx.compose.runtime.Composable
9-
import androidx.compose.runtime.remember
109
import androidx.compose.ui.Modifier
1110
import androidx.compose.ui.graphics.ColorFilter
1211
import androidx.compose.ui.graphics.ColorMatrix
@@ -16,6 +15,7 @@ import coil3.compose.AsyncImage
1615
import coil3.request.ImageRequest
1716
import coil3.size.Size
1817
import org.nsh07.wikireader.R
18+
import org.nsh07.wikireader.ui.theme.ColorConstants.colorMatrixInvert
1919

2020
@Composable
2121
fun EquationImage(
@@ -25,15 +25,6 @@ fun EquationImage(
2525
fontSize: Int,
2626
darkTheme: Boolean
2727
) {
28-
val colorMatrixInvert = remember {
29-
floatArrayOf(
30-
-1f, 0f, 0f, 0f, 255f, // Red
31-
0f, -1f, 0f, 0f, 255f, // Green
32-
0f, 0f, -1f, 0f, 255f, // Blue
33-
0f, 0f, 0f, 1f, 0f // Alpha
34-
)
35-
}
36-
3728
Box(modifier = Modifier.horizontalScroll(rememberScrollState())) {
3829
AsyncImage(
3930
model = ImageRequest.Builder(context)

app/src/main/java/org/nsh07/wikireader/ui/homeScreen/ImageWithCaption.kt

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.ui.unit.sp
2020
import coil3.ImageLoader
2121
import org.nsh07.wikireader.parser.toWikitextAnnotatedString
2222
import org.nsh07.wikireader.ui.image.FeedImage
23+
import org.nsh07.wikireader.ui.theme.ColorConstants.colorMatrixInvert
2324

2425
@Composable
2526
fun ImageWithCaption(
@@ -29,17 +30,9 @@ fun ImageWithCaption(
2930
background: Boolean,
3031
imageLoader: ImageLoader,
3132
onLinkClick: (String) -> Unit,
32-
onClick: (String, String) -> Unit
33+
onClick: (String, String) -> Unit,
34+
modifier: Modifier = Modifier
3335
) {
34-
val colorMatrixInvert = remember {
35-
floatArrayOf(
36-
-1f, 0f, 0f, 0f, 255f, // Red
37-
0f, -1f, 0f, 0f, 255f, // Green
38-
0f, 0f, -1f, 0f, 255f, // Blue
39-
0f, 0f, 0f, 1f, 0f // Alpha
40-
)
41-
}
42-
4336
val uriLow = remember(text) {
4437
"https://commons.wikimedia.org/wiki/Special:FilePath/${
4538
text.substringAfter(':').substringBefore('|').substringBefore("]]")
@@ -62,7 +55,7 @@ fun ImageWithCaption(
6255
ColorFilter.colorMatrix(ColorMatrix(colorMatrixInvert))
6356
else null,
6457
background = background,
65-
modifier = Modifier
58+
modifier = modifier
6659
.padding(horizontal = 16.dp)
6760
.padding(top = 8.dp)
6861
.clip(shapes.large)

app/src/main/java/org/nsh07/wikireader/ui/homeScreen/ParsedBodyText.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.compose.runtime.remember
1010
import androidx.compose.ui.Alignment
1111
import androidx.compose.ui.Modifier
1212
import androidx.compose.ui.platform.LocalContext
13+
import androidx.compose.ui.platform.LocalDensity
1314
import androidx.compose.ui.text.AnnotatedString
1415
import androidx.compose.ui.text.font.FontFamily
1516
import androidx.compose.ui.text.style.Hyphens
@@ -34,7 +35,7 @@ fun ParsedBodyText(
3435
modifier: Modifier = Modifier
3536
) {
3637
val context = LocalContext.current
37-
val dpi = context.resources.displayMetrics.density
38+
val dpi = LocalDensity.current.density
3839

3940
Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier) {
4041
body.forEach {

app/src/main/java/org/nsh07/wikireader/ui/theme/Color.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.material3.MaterialTheme.colorScheme
55
import androidx.compose.material3.TopAppBarColors
66
import androidx.compose.material3.TopAppBarDefaults
77
import androidx.compose.runtime.Composable
8+
import androidx.compose.runtime.remember
89
import androidx.compose.ui.graphics.Color
910

1011
val Purple80 = Color(0xFFD0BCFF)
@@ -17,6 +18,7 @@ val Pink40 = Color(0xFF7D5260)
1718

1819
object CustomTopBarColors {
1920
var black = false
21+
2022
@OptIn(ExperimentalMaterial3Api::class)
2123
val topBarColors: TopAppBarColors
2224
@Composable get() {
@@ -25,4 +27,16 @@ object CustomTopBarColors {
2527
scrolledContainerColor = colorScheme.surfaceContainer
2628
) else TopAppBarDefaults.topAppBarColors()
2729
}
30+
}
31+
32+
object ColorConstants {
33+
val colorMatrixInvert: FloatArray
34+
@Composable get() = remember {
35+
floatArrayOf(
36+
-1f, 0f, 0f, 0f, 255f, // Red
37+
0f, -1f, 0f, 0f, 255f, // Green
38+
0f, 0f, -1f, 0f, 255f, // Blue
39+
0f, 0f, 0f, 1f, 0f // Alpha
40+
)
41+
}
2842
}

0 commit comments

Comments
 (0)