@@ -20,28 +20,31 @@ class TypstAnnotatedTextBuilder(
20
20
private var codeModeString = false
21
21
private var codeModeBracketsCounter = 0
22
22
private var codeModeStringCounter = 0
23
+ private var headingMode = false
23
24
24
25
override fun processCharacter () {
25
26
processEscapeCharacter()
26
27
addMarkupInternal(NO_TEXT_INLINE_MATH_REGEX , " " , true )
27
28
processMathBlock()
28
29
processCodeMode()
30
+ processHeading()
29
31
30
32
if (this .isStartOfLine) {
31
33
addMarkupInternal(LIST_REGEX )
32
34
addMarkupInternal(LEADING_WHITESPACE_REGEX )
33
- addMarkupInternal(HEADING_REGEX )
34
35
}
35
36
36
37
addMarkupInternal(LET_CURLY_BRACKETS_REGEX )
37
38
addMarkupInternal(LET_CODE_REGEX , " " , false , true )
38
39
addMarkupInternal(LET_REGEX )
40
+ addMarkupInternal(CITE_REGEX )
39
41
addMarkupInternal(CODE_REGEX , " " , false , true )
40
42
addMarkupInternal(CODE_SQUARE_BRACKETS_REGEX , " " , true )
41
43
addMarkupInternal(LINE_COMMENT_REGEX , " \n " )
42
44
addMarkupInternal(MULTILINELINE_COMMENT_REGEX , " \n " )
43
45
addMarkupInternal(MARKUP_REGEX )
44
46
addMarkupInternal(IMPORT_REGEX , " \n " )
47
+ addMarkupInternal(SHOW_REGEX , " \n " )
45
48
addMarkupInternal(LABEL_REGEX , " " , true )
46
49
addMarkupInternal(LABEL_REF_REGEX )
47
50
addMarkupInternal(VARIABLE_REGEX , " " , true )
@@ -152,20 +155,42 @@ class TypstAnnotatedTextBuilder(
152
155
}
153
156
}
154
157
158
+ private fun processHeading () {
159
+ if (this .isStartOfLine && matchFromPosition(HEADING_REGEX ) != null ) {
160
+ addMarkupInternal(HEADING_REGEX )
161
+ headingMode = true
162
+ }
163
+ if (headingMode) {
164
+ if (matchFromPosition(HEADING_END_REGEX ) != null ) {
165
+ if (this .curString == " ?" ) {
166
+ addMarkupInternal(HEADING_END_REGEX , " ?\n " )
167
+ } else if (curString == " !" ) {
168
+ addMarkupInternal(HEADING_END_REGEX , " !\n " )
169
+ } else {
170
+ addMarkupInternal(HEADING_END_REGEX , " .\n " )
171
+ }
172
+ headingMode = false
173
+ }
174
+ }
175
+ }
176
+
155
177
companion object {
156
178
private val NO_TEXT_INLINE_MATH_REGEX = Regex (" ^\\ $[^\" $\n ]*\\ $" )
157
179
private val LIST_REGEX = Regex (" ^\\ s*[+|\\ -|\\ /]\\ s" )
158
180
private val LEADING_WHITESPACE_REGEX = Regex (" ^\\ s*" )
159
181
private val HEADING_REGEX = Regex (" ^=+\\ s" )
182
+ private val HEADING_END_REGEX = Regex (" ^\\ .?\\ ??\\ !?\r ?\n " )
160
183
private val LET_CURLY_BRACKETS_REGEX = Regex (" ^#let.*=\\ s*\\ {(.|\r ?\n )*?\\ }" )
161
184
private val LET_CODE_REGEX = Regex (" ^#let.*?=\\ s*?\\ w*?\\ (" )
162
185
private val LET_REGEX = Regex (" ^#let.*=\\ s*" )
163
- private val CODE_REGEX = Regex (" ^#.*\\ (" )
186
+ private val CITE_REGEX = Regex (" ^#cite\\ (\\ S+\\ )" )
187
+ private val CODE_REGEX = Regex (" ^#.*?\\ (" )
164
188
private val CODE_SQUARE_BRACKETS_REGEX = Regex (" ^#.*\\ [(.|\r ?\n )*?\\ ]" )
165
189
private val LINE_COMMENT_REGEX = Regex (" ^\\ /\\ /.*(\r ?\n |$)" )
166
190
private val MULTILINELINE_COMMENT_REGEX = Regex (" ^\\ /\\ *(.|\r ?\n )*?\\ *\\ /" )
167
191
private val MARKUP_REGEX = Regex (" ^(\\ *|\\ _)" )
168
192
private val IMPORT_REGEX = Regex (" ^(#import|#include).*\r ?\n " )
193
+ private val SHOW_REGEX = Regex (" ^#show.*\r ?\n " )
169
194
private val LABEL_REGEX = Regex (" ^\\ s@[^\\ s]*" )
170
195
private val LABEL_REF_REGEX = Regex (" ^<[^\\ s]*>" )
171
196
private val VARIABLE_REGEX = Regex (" ^#\\ S+" )
0 commit comments