Fix latex fragment parsing
delimiters are not always 2 in length - $ being the exception. Also we have to make sure to handle both $ and $$ delimiters. Not proud of this solution but can't think of anything simpler right now - will come back to this later hopefully.
This commit is contained in:
parent
f1361615ed
commit
115a8b9c1b
4 changed files with 18 additions and 7 deletions
|
@ -66,6 +66,7 @@ var latexFragmentPairs = map[string]string{
|
||||||
`\(`: `\)`,
|
`\(`: `\)`,
|
||||||
`\[`: `\]`,
|
`\[`: `\]`,
|
||||||
`$$`: `$$`,
|
`$$`: `$$`,
|
||||||
|
`$`: `$`,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Document) parseInline(input string) (nodes []Node) {
|
func (d *Document) parseInline(input string) (nodes []Node) {
|
||||||
|
@ -88,7 +89,7 @@ func (d *Document) parseInline(input string) (nodes []Node) {
|
||||||
case '\\':
|
case '\\':
|
||||||
consumed, node = d.parseExplicitLineBreakOrLatexFragment(input, current)
|
consumed, node = d.parseExplicitLineBreakOrLatexFragment(input, current)
|
||||||
case '$':
|
case '$':
|
||||||
consumed, node = d.parseLatexFragment(input, current)
|
consumed, node = d.parseLatexFragment(input, current, 1)
|
||||||
case '\n':
|
case '\n':
|
||||||
consumed, node = d.parseLineBreak(input, current)
|
consumed, node = d.parseLineBreak(input, current)
|
||||||
case ':':
|
case ':':
|
||||||
|
@ -153,7 +154,7 @@ func (d *Document) parseExplicitLineBreakOrLatexFragment(input string, start int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case input[start+1] == '(' || input[start+1] == '[':
|
case input[start+1] == '(' || input[start+1] == '[':
|
||||||
return d.parseLatexFragment(input, start)
|
return d.parseLatexFragment(input, start, 2)
|
||||||
case strings.Index(input[start:], `\begin{`) == 0:
|
case strings.Index(input[start:], `\begin{`) == 0:
|
||||||
if m := latexFragmentRegexp.FindStringSubmatch(input[start:]); m != nil {
|
if m := latexFragmentRegexp.FindStringSubmatch(input[start:]); m != nil {
|
||||||
if open, content, close := m[1], m[2], m[3]; open == close {
|
if open, content, close := m[1], m[2], m[3]; open == close {
|
||||||
|
@ -166,15 +167,18 @@ func (d *Document) parseExplicitLineBreakOrLatexFragment(input string, start int
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Document) parseLatexFragment(input string, start int) (int, Node) {
|
func (d *Document) parseLatexFragment(input string, start int, pairLength int) (int, Node) {
|
||||||
if start+2 >= len(input) {
|
if start+2 >= len(input) {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
openingPair := input[start : start+2]
|
if pairLength == 1 && input[start:start+2] == "$$" {
|
||||||
|
pairLength = 2
|
||||||
|
}
|
||||||
|
openingPair := input[start : start+pairLength]
|
||||||
closingPair := latexFragmentPairs[openingPair]
|
closingPair := latexFragmentPairs[openingPair]
|
||||||
if i := strings.Index(input[start+2:], closingPair); i != -1 {
|
if i := strings.Index(input[start+pairLength:], closingPair); i != -1 {
|
||||||
content := d.parseRawInline(input[start+2 : start+2+i])
|
content := d.parseRawInline(input[start+pairLength : start+pairLength+i])
|
||||||
return i + 2 + 2, LatexFragment{openingPair, closingPair, content}
|
return i + pairLength + pairLength, LatexFragment{openingPair, closingPair, content}
|
||||||
}
|
}
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
5
org/testdata/latex.html
vendored
5
org/testdata/latex.html
vendored
|
@ -35,4 +35,9 @@ $$\sum_{i=1}^n a_n$$
|
||||||
\end{xyz}
|
\end{xyz}
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
$2 + 2$, $3 - 3$
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
1
org/testdata/latex.org
vendored
1
org/testdata/latex.org
vendored
|
@ -9,3 +9,4 @@ we support =\(...\)=, =\[...\]=, =$$...$$= and =\begin{$env}...\end{$env}= as la
|
||||||
- \begin{xyz}
|
- \begin{xyz}
|
||||||
\sum_{i=1}^n a_n
|
\sum_{i=1}^n a_n
|
||||||
\end{xyz}
|
\end{xyz}
|
||||||
|
- $2 + 2$, $3 - 3$
|
||||||
|
|
1
org/testdata/latex.pretty_org
vendored
1
org/testdata/latex.pretty_org
vendored
|
@ -9,3 +9,4 @@ we support =\(...\)=, =\[...\]=, =$$...$$= and =\begin{$env}...\end{$env}= as la
|
||||||
- \begin{xyz}
|
- \begin{xyz}
|
||||||
\sum_{i=1}^n a_n
|
\sum_{i=1}^n a_n
|
||||||
\end{xyz}
|
\end{xyz}
|
||||||
|
- $2 + 2$, $3 - 3$
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue