Skip to content

Commit 56495a1

Browse files
committed
implemented parser to support basic use of math delimiters
1 parent 3bd6209 commit 56495a1

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

conversion2025/tools/validator/src/main/scala/lexer.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ object lexer {
1111

1212
private val desc = LexicalDesc.plain.copy(
1313
nameDesc = NameDesc.plain.copy(
14-
identifierStart = Basic(_.isInstanceOf[Char]),
15-
identifierLetter = Basic(_.isInstanceOf[Char]),
14+
identifierStart = Basic(x => x.isInstanceOf[Char] && x != '$'),
15+
identifierLetter = Basic(x => x.isInstanceOf[Char] && x != '$'),
1616
),
1717
symbolDesc = SymbolDesc.plain.copy(
18-
hardOperators = genericKeywords,
18+
hardOperators = genericKeywords
1919
)
2020
)
2121

conversion2025/tools/validator/src/main/scala/parser.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ object parser {
2121
private lazy val blocks = many(block)
2222

2323
private lazy val block: Parsley[Block] =
24-
Display(display) |
25-
Inline(inline) |
24+
atomic(Display(display)) |
25+
atomic(Inline(inline)) |
2626
Text(lexer.text)
2727

2828
private lazy val display = "$$" ~> lexer.text <~ "$$"

conversion2025/tools/validator/src/test/scala/MainTest.scala

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,26 @@ class MainSpec extends FunSuite {
1010

1111
test("only inline math") {
1212
val result = parser.parse("$ x + y = z $")
13-
assertEquals(result, Right(MarkDown(List(Inline("$x + y = z$")))))
13+
assertEquals(result, Right(MarkDown(List(Inline("x + y = z ")))))
1414
}
1515

1616
test("only display math") {
1717
val result = parser.parse("$$ x + y = z $$")
18-
assertEquals(result, Right(MarkDown(List(Display("x + y = z")))))
18+
assertEquals(result, Right(MarkDown(List(Display("x + y = z ")))))
19+
}
20+
21+
test("text, inline and display math together") {
22+
val result = parser.parse("question 1: $$ x + y = z $$ question 2: $ a + b = c $")
23+
assertEquals(result, Right(MarkDown(List(Text("question 1: "), Display("x + y = z "), Text("question 2: "), Inline("a + b = c ")))))
24+
}
25+
26+
test("inline math with no spaces") {
27+
val result = parser.parse("$x+y=z$")
28+
assertEquals(result, Right(MarkDown(List(Inline("x+y=z")))))
29+
}
30+
31+
test("display math with no spaces") {
32+
val result = parser.parse("$$x+y=z$$")
33+
assertEquals(result, Right(MarkDown(List(Display("x+y=z")))))
1934
}
2035
}

0 commit comments

Comments
 (0)