Implement Markdown inline code
.
This commit is contained in:
parent
ae2f70a723
commit
b235a890e6
1 changed files with 40 additions and 9 deletions
|
@ -93,15 +93,29 @@ class Formatted(object):
|
||||||
i = 0
|
i = 0
|
||||||
while i < len(line):
|
while i < len(line):
|
||||||
# Bold
|
# Bold
|
||||||
if line[i] == "\x02":
|
if line[i] == "\x02" and not attributes["code"]:
|
||||||
if text:
|
if text:
|
||||||
substrings.append(FormattedString(text, attributes.copy()))
|
substrings.append(FormattedString(text, attributes.copy()))
|
||||||
text = ""
|
text = ""
|
||||||
attributes["bold"] = not attributes["bold"]
|
attributes["bold"] = not attributes["bold"]
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
|
# Markdown inline code
|
||||||
|
elif line[i] == "`":
|
||||||
|
if text:
|
||||||
|
# strip leading and trailing spaces from inline code blocks
|
||||||
|
if attributes["code"]:
|
||||||
|
text = text.strip()
|
||||||
|
|
||||||
|
substrings.append(
|
||||||
|
FormattedString(text, attributes.copy())
|
||||||
|
)
|
||||||
|
text = ""
|
||||||
|
attributes["code"] = not attributes["code"]
|
||||||
|
i = i + 1
|
||||||
|
|
||||||
# Markdown emphasis
|
# Markdown emphasis
|
||||||
elif line[i] == "*":
|
elif line[i] == "*" and not attributes["code"]:
|
||||||
if attributes["italic"] and not line[i - 1].isspace():
|
if attributes["italic"] and not line[i - 1].isspace():
|
||||||
if text:
|
if text:
|
||||||
substrings.append(
|
substrings.append(
|
||||||
|
@ -134,7 +148,7 @@ class Formatted(object):
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
# Color
|
# Color
|
||||||
elif line[i] == "\x03":
|
elif line[i] == "\x03" and not attributes["code"]:
|
||||||
if text:
|
if text:
|
||||||
substrings.append(FormattedString(text, attributes.copy()))
|
substrings.append(FormattedString(text, attributes.copy()))
|
||||||
text = ""
|
text = ""
|
||||||
|
@ -172,7 +186,7 @@ class Formatted(object):
|
||||||
else:
|
else:
|
||||||
attributes["bgcolor"] = None
|
attributes["bgcolor"] = None
|
||||||
# Reset
|
# Reset
|
||||||
elif line[i] == "\x0F":
|
elif line[i] == "\x0F" and not attributes["code"]:
|
||||||
if text:
|
if text:
|
||||||
substrings.append(FormattedString(text, attributes.copy()))
|
substrings.append(FormattedString(text, attributes.copy()))
|
||||||
text = ""
|
text = ""
|
||||||
|
@ -181,7 +195,7 @@ class Formatted(object):
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
# Italic
|
# Italic
|
||||||
elif line[i] == "\x1D":
|
elif line[i] == "\x1D" and not attributes["code"]:
|
||||||
if text:
|
if text:
|
||||||
substrings.append(FormattedString(text, attributes.copy()))
|
substrings.append(FormattedString(text, attributes.copy()))
|
||||||
text = ""
|
text = ""
|
||||||
|
@ -189,7 +203,7 @@ class Formatted(object):
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
# Underline
|
# Underline
|
||||||
elif line[i] == "\x1F":
|
elif line[i] == "\x1F" and not attributes["code"]:
|
||||||
if text:
|
if text:
|
||||||
substrings.append(FormattedString(text, attributes.copy()))
|
substrings.append(FormattedString(text, attributes.copy()))
|
||||||
text = ""
|
text = ""
|
||||||
|
@ -236,6 +250,10 @@ class Formatted(object):
|
||||||
text=string,
|
text=string,
|
||||||
quote_off="</blockquote>",
|
quote_off="</blockquote>",
|
||||||
)
|
)
|
||||||
|
if name == "code" and value:
|
||||||
|
return "{code_on}{text}{code_off}".format(
|
||||||
|
code_on="<code>", text=string, code_off="</code>"
|
||||||
|
)
|
||||||
if name == "fgcolor" and value:
|
if name == "fgcolor" and value:
|
||||||
return "{color_on}{text}{color_off}".format(
|
return "{color_on}{text}{color_off}".format(
|
||||||
color_on="<font color={color}>".format(
|
color_on="<font color={color}>".format(
|
||||||
|
@ -249,10 +267,23 @@ class Formatted(object):
|
||||||
|
|
||||||
def format_string(formatted_string):
|
def format_string(formatted_string):
|
||||||
text = formatted_string.text
|
text = formatted_string.text
|
||||||
attributes = formatted_string.attributes
|
attributes = formatted_string.attributes.copy()
|
||||||
|
|
||||||
|
if attributes["code"]:
|
||||||
|
if attributes["preformatted"]:
|
||||||
|
# XXX: This can't really happen since there's no way of
|
||||||
|
# creating preformatted code blocks in weechat (because
|
||||||
|
# there is not multiline input), but I'm creating this
|
||||||
|
# branch as a note that it should be handled once we do
|
||||||
|
# implement them.
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
text = add_attribute(text, "code", True)
|
||||||
|
attributes.pop("code")
|
||||||
|
else:
|
||||||
|
for key, value in attributes.items():
|
||||||
|
text = add_attribute(text, key, value)
|
||||||
|
|
||||||
for key, value in attributes.items():
|
|
||||||
text = add_attribute(text, key, value)
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
html_string = map(format_string, self.substrings)
|
html_string = map(format_string, self.substrings)
|
||||||
|
|
Loading…
Add table
Reference in a new issue