Fix indentation error after quotes (#20)
diff --git a/migration/src/jira_util.py b/migration/src/jira_util.py
index 7dcecde..157803f 100644
--- a/migration/src/jira_util.py
+++ b/migration/src/jira_util.py
@@ -6,8 +6,10 @@
import jira2markdown
from jira2markdown.elements import MarkupElements
from jira2markdown.markup.lists import UnorderedList, OrderedList
+from jira2markdown.markup.text_effects import BlockQuote, Quote
from markup.lists import UnorderedTweakedList, OrderedTweakedList
+from markup.text_effects import TweakedBlockQuote, TweakedQuote
@dataclass
class Attachment(object):
@@ -203,6 +205,8 @@
elements = MarkupElements()
elements.replace(UnorderedList, UnorderedTweakedList)
elements.replace(OrderedList, OrderedTweakedList)
+ elements.replace(BlockQuote, TweakedBlockQuote)
+ elements.replace(Quote, TweakedQuote)
text = jira2markdown.convert(text, elements=elements)
# markup @ mentions with ``
diff --git a/migration/src/markup/text_effects.py b/migration/src/markup/text_effects.py
new file mode 100644
index 0000000..61f541d
--- /dev/null
+++ b/migration/src/markup/text_effects.py
@@ -0,0 +1,51 @@
+import re
+
+from pyparsing import (
+ ParserElement,
+ ParseResults,
+ QuotedString,
+ StringEnd,
+ StringStart,
+ SkipTo,
+ Literal,
+ LineEnd,
+ Optional,
+ Combine,
+ White,
+ OneOrMore,
+ nums,
+ replaceWith,
+
+)
+
+from jira2markdown.markup.base import AbstractMarkup
+
+class TweakedBlockQuote(AbstractMarkup):
+ def action(self, tokens: ParseResults) -> str:
+ text = self.markup.transformString("\n".join([line.lstrip() for line in tokens[0].strip().splitlines()]))
+ # escape numbered list in quotes.
+ # e.g.,
+ # {quote}
+ # 2. foo
+ # 5. bar
+ # {quote}
+ # should be
+ # > 2\\. foo
+ # > 5\\. bar
+ pat_ordered_list = re.compile(r"((?<=^\d)||(?<=^\d\d))\.")
+ return "\n".join(["> " + re.sub(pat_ordered_list, '\.', line) for line in text.splitlines()]) + "\n" # needs additional line feed at the end of quotation to preserve indentation
+
+ @property
+ def expr(self) -> ParserElement:
+ return QuotedString("{quote}", multiline=True).setParseAction(self.action)
+
+
+class TweakedQuote(AbstractMarkup):
+ is_inline_element = False
+
+ @property
+ def expr(self) -> ParserElement:
+ return ("\n" | StringStart()) + Combine(
+ Literal("bq. ").setParseAction(replaceWith("> "))
+ + SkipTo(LineEnd()) + LineEnd().setParseAction(replaceWith("\n\n")) # needs additional line feed at the end of quotation to preserve indentation
+ )