Skip to content

Commit f538ac2

Browse files
committed
calculate start and end offset of each note part
1 parent 8081ff4 commit f538ac2

File tree

2 files changed

+40
-32
lines changed

2 files changed

+40
-32
lines changed

app/src/androidTest/java/com/orgzly/android/ui/notes/NoteContentTest.kt

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class NoteContentTest {
1919

2020
@Test
2121
fun emptyLinesShouldStayInSingleSection() {
22-
checkExpected("\n\n", listOf(TextNoteContent("\n\n")))
22+
checkExpected("\n\n", listOf(TextNoteContent("\n\n", 0, 1)))
2323
}
2424

2525
@Test
@@ -28,9 +28,9 @@ class NoteContentTest {
2828
|
2929
3030
foo|bar""", listOf(
31-
TextNoteContent("foo\n"),
32-
TableNoteContent("|\n"),
33-
TextNoteContent("\nfoo|bar")
31+
TextNoteContent("foo\n", 0, 3),
32+
TableNoteContent("|\n", 4, 5),
33+
TextNoteContent("\nfoo|bar", 6, 13)
3434
))
3535
}
3636

@@ -40,24 +40,24 @@ foo|bar""", listOf(
4040
|c|d|
4141
""", listOf(TableNoteContent("""|a|b|
4242
|c|d|
43-
""")))
43+
""", 0, 11)))
4444
}
4545

4646
@Test
4747
fun singleTableNoFinalNewline() {
4848
checkExpected("""|a|b|
4949
|c|d|""", listOf(TableNoteContent("""|a|b|
50-
|c|d|""")))
50+
|c|d|""", 0, 10)))
5151
}
5252

5353
@Test
5454
fun singleLineTextTableText() {
5555
checkExpected("""foo
5656
|
5757
bar""", listOf(
58-
TextNoteContent("foo\n"),
59-
TableNoteContent("|\n"),
60-
TextNoteContent("bar")
58+
TextNoteContent("foo\n", 0, 3),
59+
TableNoteContent("|\n", 4, 5),
60+
TextNoteContent("bar", 6, 8)
6161
))
6262
}
6363

@@ -68,9 +68,9 @@ bar""", listOf(
6868
|
6969
bar
7070
""", listOf(
71-
TextNoteContent("\n"),
72-
TableNoteContent("|\n"),
73-
TextNoteContent("bar\n")
71+
TextNoteContent("\n", 0, 0),
72+
TableNoteContent("|\n", 1, 2),
73+
TextNoteContent("bar\n", 3, 6)
7474
))
7575
}
7676

@@ -79,9 +79,9 @@ bar
7979
checkExpected("""|zoo|
8080
8181
|zog|""", listOf(
82-
TableNoteContent("|zoo|\n"),
83-
TextNoteContent("\n"),
84-
TableNoteContent("|zog|")
82+
TableNoteContent("|zoo|\n",0,5),
83+
TextNoteContent("\n",6,6),
84+
TableNoteContent("|zog|",7,11)
8585
))
8686
}
8787

@@ -91,9 +91,9 @@ bar
9191
|
9292
9393
chops""", listOf(
94-
TextNoteContent("foo\n"),
95-
TableNoteContent("|\n"),
96-
TextNoteContent("\nchops")
94+
TextNoteContent("foo\n",0,3),
95+
TableNoteContent("|\n",4,5),
96+
TextNoteContent("\nchops",6,11)
9797
))
9898
}
9999

@@ -109,11 +109,11 @@ text3c
109109
|table4|
110110
text5
111111
""", listOf(
112-
TextNoteContent("text1\n"),
113-
TableNoteContent("|table2a|\n|table2b|\n"),
114-
TextNoteContent("text3a\ntext3b\ntext3c\n"),
115-
TableNoteContent("|table4|\n"),
116-
TextNoteContent("text5\n")
112+
TextNoteContent("text1\n",0,5),
113+
TableNoteContent("|table2a|\n|table2b|\n",6,25),
114+
TextNoteContent("text3a\ntext3b\ntext3c\n",26,46),
115+
TableNoteContent("|table4|\n",47,55),
116+
TextNoteContent("text5\n",56,61)
117117
))
118118
}
119119

@@ -150,5 +150,8 @@ text5
150150

151151
assertEquals(input, roundTripped)
152152

153+
actual.forEach {
154+
assertEquals(it.text, input.substring(it.startOffset, it.endOffset + 1))
155+
}
153156
}
154157
}

app/src/main/java/com/orgzly/android/ui/notes/NoteContent.kt

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ package com.orgzly.android.ui.notes
33
/**
44
* Represents a subsection of note content: either text, or a table
55
*/
6-
sealed class NoteContent {
6+
sealed class NoteContent(val text: String, val startOffset: Int, val endOffset: Int) {
77

8-
abstract val text: String
98

10-
data class TextNoteContent(override val text: String) : NoteContent() {
11-
}
9+
data class TextNoteContent(val s_text: String, val s_startOffset: Int, val s_endOffset: Int) : NoteContent(s_text, s_startOffset, s_endOffset)
1210

13-
data class TableNoteContent(override val text: String) : NoteContent() {
11+
data class TableNoteContent(val s_text: String, val s_startOffset: Int, val s_endOffset: Int) : NoteContent(s_text, s_startOffset, s_endOffset) {
1412

1513
fun reformat() {
1614
// placeholder - but would fix all the spacing, missing cells, etc. Complicated
@@ -55,12 +53,14 @@ sealed class NoteContent {
5553
}
5654
currentIsTable && !previousIsTable -> {
5755
currentTable = it + "\n"
58-
list.add(TextNoteContent(currentText))
56+
val s_startOffset = getLastOffset(list)
57+
list.add(TextNoteContent(currentText, s_startOffset, s_startOffset + currentText.length - 1))
5958
currentText = ""
6059
}
6160
!currentIsTable && previousIsTable -> {
6261
currentText = it + "\n"
63-
list.add(TableNoteContent(currentTable))
62+
val s_startOffset = getLastOffset(list)
63+
list.add(TableNoteContent(currentTable, s_startOffset, s_startOffset + currentTable.length - 1))
6464
currentTable = ""
6565
}
6666
!currentIsTable && !previousIsTable -> {
@@ -71,18 +71,23 @@ sealed class NoteContent {
7171
}
7272

7373
if (linesForParsing.isNotEmpty()) {
74+
75+
val endOffsetAdjustment = if (missingLastNewline) 2 else 1
76+
7477
if (previousIsTable) {
7578
list.add(TableNoteContent(if (missingLastNewline) {
7679
currentTable.dropLast(1)
77-
} else currentTable))
80+
} else currentTable, getLastOffset(list), getLastOffset(list) + currentTable.length - endOffsetAdjustment))
7881
} else {
7982
list.add(TextNoteContent(if (missingLastNewline) {
8083
currentText.dropLast(1)
81-
} else currentText))
84+
} else currentText, getLastOffset(list), getLastOffset(list) + currentText.length - endOffsetAdjustment))
8285
}
8386
}
8487

8588
return list
8689
}
90+
91+
private fun getLastOffset(list: MutableList<NoteContent>) = if (list.isEmpty()) 0 else list.last().endOffset + 1
8792
}
8893
}

0 commit comments

Comments
 (0)