diff --git a/internal/format/creole/apply.go b/internal/format/creole/apply.go index b785c61..85db1d1 100644 --- a/internal/format/creole/apply.go +++ b/internal/format/creole/apply.go @@ -41,7 +41,6 @@ type state struct { prevLine string line string title string - firstCode bool outerDeco decoMode innerDeco decoMode } @@ -620,10 +619,11 @@ func handleBlock(s *state) bool { // open code block if s.block != blockRaw && s.block != blockCode && - s.block != blockMath && s.prevLine == "{{{" && isBlank(s.line) { + s.block != blockMath && s.line == "{{{" { + s.text.WriteString("{{{\n") + s.plain.WriteString("\n") ensureBlock(s, blockCode) nextLine(s) - s.firstCode = true return true } @@ -645,11 +645,10 @@ func handleBlock(s *state) bool { } // close code block - if s.block == blockCode && s.prevLine == "" && s.line == "}}}" { + if s.block == blockCode && s.line == "}}}" { ensureBlock(s, blockNone) - s.text.WriteString("}}}\n\n") + s.text.WriteString("}}}\n") s.plain.WriteString("\n") - s.html.WriteString("}}}\n") nextLine(s) return true } @@ -723,12 +722,6 @@ func handleBlock(s *state) bool { // in code block if s.block == blockCode { - if s.firstCode { - s.text.WriteString("\n") - s.html.WriteString("\n") - s.firstCode = false - } - s.text.WriteString(s.line) s.text.WriteString("\n") @@ -754,13 +747,6 @@ func handleBlock(s *state) bool { return true } - if s.line == "{{{" { - s.text.WriteString("{{{\n") - s.html.WriteString("{{{\n") - nextLine(s) - return true - } - if s.line == "" { ensureBlock(s, blockNone) s.text.WriteString("\n") @@ -805,7 +791,6 @@ func Apply(fc formatConfig, title string, text string) ( prevLine: "", line: "", title: "", - firstCode: false, outerDeco: decoNone, innerDeco: decoNone, } diff --git a/internal/format/creole/apply_test.go b/internal/format/creole/apply_test.go index ecaaf5b..6b081ab 100644 --- a/internal/format/creole/apply_test.go +++ b/internal/format/creole/apply_test.go @@ -145,6 +145,15 @@ func TestApply(t *testing.T) { "This is a test.\n", "

\nThis is a test.\n

\n", }, + { + "code", + "WikiPage", + "{{{\nbegin\n print\nend\n}}}\n", + "WikiPage", + "{{{\nbegin\n print\nend\n}}}\n", + "\nbegin\n print\nend\n\n", + "
begin\n  print\nend\n
\n", + }, } for _, tt := range tests { diff --git a/internal/format/markdown/apply.go b/internal/format/markdown/apply.go index 19b4c4c..cbe6d24 100644 --- a/internal/format/markdown/apply.go +++ b/internal/format/markdown/apply.go @@ -41,7 +41,6 @@ type state struct { prevLine string line string title string - firstCode bool outerDeco decoMode innerDeco decoMode } @@ -692,10 +691,11 @@ func handleBlock(s *state) bool { // open code block if s.block != blockRaw && s.block != blockCode && - s.block != blockMath && s.prevLine == "{{{" && isBlank(s.line) { + s.block != blockMath && s.line == "```" { + s.text.WriteString("```\n") + s.plain.WriteString("\n") ensureBlock(s, blockCode) nextLine(s) - s.firstCode = true return true } @@ -717,11 +717,10 @@ func handleBlock(s *state) bool { } // close code block - if s.block == blockCode && s.prevLine == "" && s.line == "}}}" { + if s.block == blockCode && s.line == "```" { ensureBlock(s, blockNone) - s.text.WriteString("}}}\n\n") + s.text.WriteString("```\n") s.plain.WriteString("\n") - s.html.WriteString("}}}\n") nextLine(s) return true } @@ -795,12 +794,6 @@ func handleBlock(s *state) bool { // in code block if s.block == blockCode { - if s.firstCode { - s.text.WriteString("\n") - s.html.WriteString("\n") - s.firstCode = false - } - s.text.WriteString(s.line) s.text.WriteString("\n") @@ -826,13 +819,6 @@ func handleBlock(s *state) bool { return true } - if s.line == "{{{" { - s.text.WriteString("{{{\n") - s.html.WriteString("{{{\n") - nextLine(s) - return true - } - if s.line == "" { ensureBlock(s, blockNone) s.text.WriteString("\n") @@ -877,7 +863,6 @@ func Apply(fc formatConfig, title string, text string) ( prevLine: "", line: "", title: "", - firstCode: false, outerDeco: decoNone, innerDeco: decoNone, } diff --git a/internal/format/markdown/apply_test.go b/internal/format/markdown/apply_test.go index 4acd9ba..f6475e4 100644 --- a/internal/format/markdown/apply_test.go +++ b/internal/format/markdown/apply_test.go @@ -154,6 +154,15 @@ func TestApply(t *testing.T) { "This is a test.\n", "

\nThis is a test.\n

\n", }, + { + "code", + "WikiPage", + "```\nbegin\n print\nend\n```\n", + "WikiPage", + "```\nbegin\n print\nend\n```\n", + "\nbegin\n print\nend\n\n", + "
begin\n  print\nend\n
\n", + }, } for _, tt := range tests { diff --git a/internal/format/nomark/apply.go b/internal/format/nomark/apply.go index 1f160e3..96a5b60 100644 --- a/internal/format/nomark/apply.go +++ b/internal/format/nomark/apply.go @@ -634,9 +634,8 @@ func handleBlock(s *state) bool { // close code block if s.block == blockCode && s.prevLine == "" && s.line == "}}}" { - ensureBlock(s, blockNone) + ensureBlock(s, blockParagraph) s.text.WriteString("}}}\n\n") - s.plain.WriteString("\n") s.html.WriteString("}}}\n") nextLine(s) return true @@ -723,8 +722,7 @@ func handleBlock(s *state) bool { if s.block == blockCode { if s.firstCode { s.text.WriteString("\n") - s.html.WriteString("\n") - s.firstCode = false + s.plain.WriteString("\n") } s.text.WriteString(s.line) @@ -733,8 +731,12 @@ func handleBlock(s *state) bool { s.plain.WriteString(s.line) s.plain.WriteString("\n") + if s.firstCode { + s.firstCode = false + } else { + s.html.WriteString("\n") + } s.html.WriteString(template.HTMLEscapeString(s.line)) - s.html.WriteString("\n") nextLine(s) return true @@ -753,6 +755,7 @@ func handleBlock(s *state) bool { } if s.line == "{{{" { + ensureBlock(s, blockParagraph) s.text.WriteString("{{{\n") s.html.WriteString("{{{\n") nextLine(s) diff --git a/internal/format/nomark/apply_test.go b/internal/format/nomark/apply_test.go index 5573aff..689838c 100644 --- a/internal/format/nomark/apply_test.go +++ b/internal/format/nomark/apply_test.go @@ -118,6 +118,15 @@ func TestApply(t *testing.T) { "This is a test.\n", "

\nThis //is// a test.\n

\n", }, + { + "code", + "WikiPage", + "{{{\n\nbegin\n print\nend\n\n}}}\n\n", + "WikiPage", + "{{{\n\nbegin\n print\nend\n\n}}}\n\n", + "\nbegin\n print\nend\n\n", + "

\n{{{\n

\n
begin\n  print\nend\n
\n

\n}}}\n

\n", + }, } for _, tt := range tests {