Skip to content

Commit

Permalink
Merge branch 'feature/add-code-formatters'
Browse files Browse the repository at this point in the history
  • Loading branch information
catcombo committed Jan 12, 2022
2 parents 89f7f54 + 815b11e commit 58e3c1b
Show file tree
Hide file tree
Showing 20 changed files with 956 additions and 282 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -129,4 +129,5 @@ dmypy.json
.pyre/

# IDE
/.idea/
.idea/*
!.idea/watcherTasks.xml
45 changes: 45 additions & 0 deletions .idea/watcherTasks.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

93 changes: 53 additions & 40 deletions jira2markdown/elements.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,55 @@
from jira2markdown.markup.lists import OrderedList, UnorderedList
from jira2markdown.markup.tables import Table
from jira2markdown.markup.text_breaks import LineBreak, Mdash, Ndash, Ruler
from jira2markdown.markup.text_effects import BlockQuote, Bold, Color, EscSpecialChars, InlineQuote, Monospaced, \
Quote, Strikethrough, Subscript, Superscript, Underline
from jira2markdown.markup.text_effects import (
BlockQuote,
Bold,
Color,
EscSpecialChars,
InlineQuote,
Monospaced,
Quote,
Strikethrough,
Subscript,
Superscript,
Underline,
)


class MarkupElements(list):
def __init__(self, seq: Iterable = ()):
super().__init__(seq or [
UnorderedList,
OrderedList,
Code,
Noformat,
Monospaced,
Mention,
MailTo,
Attachment,
Link,
Image,
Table,
Headings,
Quote,
BlockQuote,
Panel,
Bold,
Ndash,
Mdash,
Ruler,
Strikethrough,
Underline,
InlineQuote,
Superscript,
Subscript,
Color,
LineBreak,
EscSpecialChars,
])
super().__init__(
seq
or [
UnorderedList,
OrderedList,
Code,
Noformat,
Monospaced,
Mention,
MailTo,
Attachment,
Link,
Image,
Table,
Headings,
Quote,
BlockQuote,
Panel,
Bold,
Ndash,
Mdash,
Ruler,
Strikethrough,
Underline,
InlineQuote,
Superscript,
Subscript,
Color,
LineBreak,
EscSpecialChars,
],
)

def insert_after(self, element: Type[AbstractMarkup], new_element: Type[AbstractMarkup]):
index = self.index(element)
Expand All @@ -55,13 +69,12 @@ def replace(self, old_element: Type[AbstractMarkup], new_element: Type[AbstractM
self[index] = new_element

def expr(
self,
inline_markup: Forward,
markup: Forward,
usernames: dict,
elements: Iterable[Type[AbstractMarkup]],
self,
inline_markup: Forward,
markup: Forward,
usernames: dict,
elements: Iterable[Type[AbstractMarkup]],
) -> ParseExpression:
return MatchFirst([
element(inline_markup=inline_markup, markup=markup, usernames=usernames).expr
for element in elements
])
return MatchFirst(
[element(inline_markup=inline_markup, markup=markup, usernames=usernames).expr for element in elements],
)
37 changes: 21 additions & 16 deletions jira2markdown/markup/advanced.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
from pyparsing import Combine, FollowedBy, Group, Literal, OneOrMore, Optional, ParseResults, ParserElement, \
SkipTo, Suppress, Word, alphanums, alphas
from pyparsing import (
Combine,
FollowedBy,
Group,
Literal,
OneOrMore,
Optional,
ParserElement,
ParseResults,
SkipTo,
Suppress,
Word,
alphanums,
alphas,
)

from jira2markdown.markup.base import AbstractMarkup

Expand All @@ -12,9 +25,7 @@ def action(self, tokens: ParseResults) -> str:
@property
def expr(self) -> ParserElement:
return Combine(
Literal("{noformat") + ... + Literal("}")
+ SkipTo("{noformat}").setResultsName("text")
+ "{noformat}",
Literal("{noformat") + ... + Literal("}") + SkipTo("{noformat}").setResultsName("text") + "{noformat}",
).setParseAction(self.action)


Expand All @@ -29,11 +40,10 @@ def expr(self) -> ParserElement:
return Combine(
"{code"
+ Optional(
":"
+ Word(alphanums + "#+").setResultsName("lang")
+ FollowedBy(Literal("}") | Literal("|")),
":" + Word(alphanums + "#+").setResultsName("lang") + FollowedBy(Literal("}") | Literal("|")),
)
+ ... + "}"
+ ...
+ "}"
+ SkipTo("{code}").setResultsName("text")
+ "{code}",
).setParseAction(self.action)
Expand All @@ -48,17 +58,12 @@ def action(self, tokens: ParseResults) -> str:
else:
prefix = ""

text = self.markup.transformString("\n".join([
line.lstrip() for line in tokens.text.strip().splitlines()
]))
text = self.markup.transformString("\n".join([line.lstrip() for line in tokens.text.strip().splitlines()]))
return prefix + "\n".join([f"> {line}" for line in text.splitlines()])

@property
def expr(self) -> ParserElement:
PARAM = Word(alphas) \
+ Suppress("=") \
+ SkipTo(Literal("|") | Literal("}")) \
+ Optional("|").suppress()
PARAM = Word(alphas) + Suppress("=") + SkipTo(Literal("|") | Literal("}")) + Optional("|").suppress()

return Combine(
"{panel"
Expand Down
2 changes: 1 addition & 1 deletion jira2markdown/markup/headings.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pyparsing import Combine, LineEnd, ParseResults, ParserElement, SkipTo, StringEnd, StringStart, Word
from pyparsing import Combine, LineEnd, ParserElement, ParseResults, SkipTo, StringEnd, StringStart, Word

from jira2markdown.markup.base import AbstractMarkup

Expand Down
17 changes: 14 additions & 3 deletions jira2markdown/markup/images.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
import re

from pyparsing import Combine, Optional, ParseResults, ParserElement, PrecededBy, Regex, SkipTo, StringStart, Word, \
printables
from pyparsing import (
Combine,
Optional,
ParserElement,
ParseResults,
PrecededBy,
Regex,
SkipTo,
StringStart,
Word,
printables,
)

from jira2markdown.markup.base import AbstractMarkup

Expand All @@ -16,5 +26,6 @@ def expr(self) -> ParserElement:
"!"
+ Word(printables + " ", min=3, excludeChars="|!").setResultsName("url")
+ Optional("|")
+ SkipTo("!", failOn="\n") + "!",
+ SkipTo("!", failOn="\n")
+ "!",
).setParseAction(self.action)
28 changes: 22 additions & 6 deletions jira2markdown/markup/links.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
from string import punctuation

from pyparsing import CaselessLiteral, Char, Combine, FollowedBy, Optional, ParseResults, ParserElement, \
PrecededBy, SkipTo, StringEnd, StringStart, Suppress, White, Word, alphanums
from pyparsing import (
CaselessLiteral,
Char,
Combine,
FollowedBy,
Optional,
ParserElement,
ParseResults,
PrecededBy,
SkipTo,
StringEnd,
StringStart,
Suppress,
White,
Word,
alphanums,
)

from jira2markdown.markup.base import AbstractMarkup

Expand Down Expand Up @@ -80,7 +95,8 @@ def expr(self) -> ParserElement:
+ Word(alphanums + ":-").setResultsName("accountid")
+ "]",
)
return (StringStart() | Optional(PrecededBy(White(), retreat=1), default=" ")) \
+ MENTION.setParseAction(self.action) \
+ (StringEnd()
| Optional(FollowedBy(White() | Char(punctuation, excludeChars="[") | MENTION), default=" "))
return (
(StringStart() | Optional(PrecededBy(White(), retreat=1), default=" "))
+ MENTION.setParseAction(self.action)
+ (StringEnd() | Optional(FollowedBy(White() | Char(punctuation, excludeChars="[") | MENTION), default=" "))
)
22 changes: 16 additions & 6 deletions jira2markdown/markup/lists.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
from pyparsing import Char, Combine, LineEnd, LineStart, Literal, MatchFirst, OneOrMore, Optional, ParseResults, \
ParserElement, SkipTo, StringEnd, White
from pyparsing import (
Char,
Combine,
LineEnd,
LineStart,
Literal,
MatchFirst,
OneOrMore,
Optional,
ParserElement,
ParseResults,
SkipTo,
StringEnd,
White,
)

from jira2markdown.markup.advanced import Panel
from jira2markdown.markup.base import AbstractMarkup
Expand Down Expand Up @@ -65,10 +78,7 @@ def action(self, tokens: ParseResults) -> str:
text = self.markup.transformString(text).splitlines() or [""]

result.append(
"\n".join([
item_padding + line if i == 0 else line_padding + line
for i, line in enumerate(text)
]),
"\n".join([item_padding + line if i == 0 else line_padding + line for i, line in enumerate(text)]),
)

self.indent_state.reset()
Expand Down
38 changes: 30 additions & 8 deletions jira2markdown/markup/tables.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
from pyparsing import Combine, Group, LineEnd, LineStart, Literal, OneOrMore, Optional, ParseResults, \
ParserElement, SkipTo, StringEnd, StringStart, White, ZeroOrMore
from pyparsing import (
Combine,
Group,
LineEnd,
LineStart,
Literal,
OneOrMore,
Optional,
ParserElement,
ParseResults,
SkipTo,
StringEnd,
StringStart,
White,
ZeroOrMore,
)

from jira2markdown.markup.base import AbstractMarkup
from jira2markdown.markup.images import Image
Expand All @@ -16,12 +30,14 @@ def action(self, tokens: ParseResults) -> str:
# Converts multiline text to one line,
# because markdown doesn't support multiline text in table cells
output = [
"|" + "|".join(
"|"
+ "|".join(
map(
lambda cell: cell.replace("\n", "<br>"),
map(self.markup.transformString, row),
),
) + "|"
)
+ "|"
for row in lines
]

Expand All @@ -38,15 +54,21 @@ def expr(self) -> ParserElement:
NL = LineEnd().suppress()
SEP = (Literal("||") | Literal("|")).suppress()
ROW_BREAK = NL + SEP | NL + NL | StringEnd()
IGNORE = Link(**self.init_kwargs).expr | MailTo(**self.init_kwargs).expr \
| Image(**self.init_kwargs).expr | Mention(**self.init_kwargs).expr
IGNORE = (
Link(**self.init_kwargs).expr
| MailTo(**self.init_kwargs).expr
| Image(**self.init_kwargs).expr
| Mention(**self.init_kwargs).expr
)

ROW = SEP + ZeroOrMore(
SkipTo(SEP | ROW_BREAK, ignore=IGNORE) + Optional(SEP),
stopOn=ROW_BREAK | NL + ~SEP,
)

EMPTY_LINE = Combine("\n" + White(" \t", min=0) + "\n")
return ((StringStart() + Optional("\n")) ^ Optional(EMPTY_LINE, default="\n")) \
+ OneOrMore(LineStart() + Group(ROW) + NL).setParseAction(self.action) \
return (
((StringStart() + Optional("\n")) ^ Optional(EMPTY_LINE, default="\n"))
+ OneOrMore(LineStart() + Group(ROW) + NL).setParseAction(self.action)
+ (StringEnd() | Optional(LineEnd(), default="\n"))
)
Loading

0 comments on commit 58e3c1b

Please sign in to comment.