forked from Mirrors/apostrophe
Add code highlighting
Removes previously added indent. Reused for math.github/fork/yochananmarqos/patch-1
parent
bd2d78b86a
commit
7ea8f67216
|
@ -17,7 +17,7 @@
|
||||||
bind "<ctl><shift>z" { "redo" () };
|
bind "<ctl><shift>z" { "redo" () };
|
||||||
}
|
}
|
||||||
|
|
||||||
@define-color math_text_color mix(@theme_fg_color, #00b5ff, 0.15);
|
@define-color code_bg_color mix(@theme_base_color, @theme_fg_color, 0.05);
|
||||||
|
|
||||||
/* Main window and text colors */
|
/* Main window and text colors */
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@ BOLD_ITALIC = re.compile(
|
||||||
r"(\*\*\*|___)(?P<text>.+?)\1")
|
r"(\*\*\*|___)(?P<text>.+?)\1")
|
||||||
STRIKETHROUGH = re.compile(
|
STRIKETHROUGH = re.compile(
|
||||||
r"~~(?P<text>.+?)~~")
|
r"~~(?P<text>.+?)~~")
|
||||||
|
CODE = re.compile(
|
||||||
|
r"`(?P<text>[^`].*?)`")
|
||||||
LINK = re.compile(
|
LINK = re.compile(
|
||||||
r"\[(?P<text>.*)\]\((?P<url>.+?)(?: \"(?P<title>.+)\")?\)")
|
r"\[(?P<text>.*)\]\((?P<url>.+?)(?: \"(?P<title>.+)\")?\)")
|
||||||
IMAGE = re.compile(
|
IMAGE = re.compile(
|
||||||
|
|
|
@ -21,7 +21,7 @@ import gi
|
||||||
|
|
||||||
from uberwriter import helpers, markup_regex
|
from uberwriter import helpers, markup_regex
|
||||||
from uberwriter.markup_regex import STRIKETHROUGH, BOLD_ITALIC, BOLD, ITALIC, IMAGE, LINK, \
|
from uberwriter.markup_regex import STRIKETHROUGH, BOLD_ITALIC, BOLD, ITALIC, IMAGE, LINK, \
|
||||||
HORIZONTAL_RULE, LIST, ORDERED_LIST, BLOCK_QUOTE, HEADER, HEADER_UNDER, TABLE, MATH
|
HORIZONTAL_RULE, LIST, ORDERED_LIST, BLOCK_QUOTE, HEADER, HEADER_UNDER, TABLE, MATH, CODE
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk, GLib
|
from gi.repository import Gtk, GLib
|
||||||
|
@ -37,7 +37,7 @@ class MarkupHandler:
|
||||||
TAG_NAME_WRAP_NONE = 'wrap_none'
|
TAG_NAME_WRAP_NONE = 'wrap_none'
|
||||||
TAG_NAME_PLAIN_TEXT = 'plain_text'
|
TAG_NAME_PLAIN_TEXT = 'plain_text'
|
||||||
TAG_NAME_GRAY_TEXT = 'gray_text'
|
TAG_NAME_GRAY_TEXT = 'gray_text'
|
||||||
TAG_NAME_MATH_TEXT = 'math_text'
|
TAG_NAME_CODE_TEXT = 'code_text'
|
||||||
TAG_NAME_UNFOCUSED_TEXT = 'unfocused_text'
|
TAG_NAME_UNFOCUSED_TEXT = 'unfocused_text'
|
||||||
TAG_NAME_MARGIN_INDENT = 'margin_indent'
|
TAG_NAME_MARGIN_INDENT = 'margin_indent'
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ class MarkupHandler:
|
||||||
weight=Pango.Weight.NORMAL,
|
weight=Pango.Weight.NORMAL,
|
||||||
style=Pango.Style.NORMAL)
|
style=Pango.Style.NORMAL)
|
||||||
|
|
||||||
self.tag_math_text = buffer.create_tag(self.TAG_NAME_MATH_TEXT,
|
self.tag_code_text = buffer.create_tag(self.TAG_NAME_CODE_TEXT,
|
||||||
weight=Pango.Weight.NORMAL,
|
weight=Pango.Weight.NORMAL,
|
||||||
style=Pango.Style.NORMAL,
|
style=Pango.Style.NORMAL,
|
||||||
strikethrough=False)
|
strikethrough=False)
|
||||||
|
@ -97,7 +97,7 @@ class MarkupHandler:
|
||||||
self.TAG_NAME_WRAP_NONE: lambda args: self.tag_wrap_none,
|
self.TAG_NAME_WRAP_NONE: lambda args: self.tag_wrap_none,
|
||||||
self.TAG_NAME_PLAIN_TEXT: lambda args: self.tag_plain_text,
|
self.TAG_NAME_PLAIN_TEXT: lambda args: self.tag_plain_text,
|
||||||
self.TAG_NAME_GRAY_TEXT: lambda args: self.tag_gray_text,
|
self.TAG_NAME_GRAY_TEXT: lambda args: self.tag_gray_text,
|
||||||
self.TAG_NAME_MATH_TEXT: lambda args: self.tag_math_text,
|
self.TAG_NAME_CODE_TEXT: lambda args: self.tag_code_text,
|
||||||
self.TAG_NAME_MARGIN_INDENT: lambda args: self.get_margin_indent_tag(*args)
|
self.TAG_NAME_MARGIN_INDENT: lambda args: self.get_margin_indent_tag(*args)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,10 +126,12 @@ class MarkupHandler:
|
||||||
self.parent_conn.fileno(), GLib.PRIORITY_DEFAULT, GLib.IO_IN, self.on_parsed)
|
self.parent_conn.fileno(), GLib.PRIORITY_DEFAULT, GLib.IO_IN, self.on_parsed)
|
||||||
|
|
||||||
def on_style_updated(self, *_):
|
def on_style_updated(self, *_):
|
||||||
(found, color) = self.text_view.get_style_context().lookup_color('math_text_color')
|
style_context = self.text_view.get_style_context()
|
||||||
|
(found, color) = style_context.lookup_color('code_bg_color')
|
||||||
if not found:
|
if not found:
|
||||||
(_, color) = self.text_view.get_style_context().lookup_color('foreground_color')
|
(_, color) = style_context.lookup_color('background_color')
|
||||||
self.tag_math_text.set_property("foreground", color.to_string())
|
self.tag_code_text.set_property("background", color.to_string())
|
||||||
|
self.tag_code_text.set_property("paragraph-background", color.to_string())
|
||||||
|
|
||||||
def apply(self):
|
def apply(self):
|
||||||
"""Applies markup, parsing it in a worker process if the text has changed.
|
"""Applies markup, parsing it in a worker process if the text has changed.
|
||||||
|
@ -171,6 +173,7 @@ class MarkupHandler:
|
||||||
# - "**bold**" (bold)
|
# - "**bold**" (bold)
|
||||||
# - "***bolditalic***" (bold/italic)
|
# - "***bolditalic***" (bold/italic)
|
||||||
# - "~~strikethrough~~" (strikethrough)
|
# - "~~strikethrough~~" (strikethrough)
|
||||||
|
# - "`code`" (colorize)
|
||||||
# - "$math$" (colorize)
|
# - "$math$" (colorize)
|
||||||
# - "---" table (wrap/pixels)
|
# - "---" table (wrap/pixels)
|
||||||
regexps = (
|
regexps = (
|
||||||
|
@ -178,7 +181,8 @@ class MarkupHandler:
|
||||||
(BOLD, self.TAG_NAME_BOLD),
|
(BOLD, self.TAG_NAME_BOLD),
|
||||||
(BOLD_ITALIC, self.TAG_NAME_BOLD_ITALIC),
|
(BOLD_ITALIC, self.TAG_NAME_BOLD_ITALIC),
|
||||||
(STRIKETHROUGH, self.TAG_NAME_STRIKETHROUGH),
|
(STRIKETHROUGH, self.TAG_NAME_STRIKETHROUGH),
|
||||||
(MATH, self.TAG_NAME_MATH_TEXT),
|
(CODE, self.TAG_NAME_CODE_TEXT),
|
||||||
|
(MATH, self.TAG_NAME_CODE_TEXT),
|
||||||
(TABLE, self.TAG_NAME_WRAP_NONE)
|
(TABLE, self.TAG_NAME_WRAP_NONE)
|
||||||
)
|
)
|
||||||
for regexp, tag_name in regexps:
|
for regexp, tag_name in regexps:
|
||||||
|
@ -244,8 +248,8 @@ class MarkupHandler:
|
||||||
matches = re.finditer(HEADER, text)
|
matches = re.finditer(HEADER, text)
|
||||||
for match in matches:
|
for match in matches:
|
||||||
margin = -len(match.group("level")) - 1
|
margin = -len(match.group("level")) - 1
|
||||||
result.append(
|
result.append((
|
||||||
(self.TAG_NAME_MARGIN_INDENT, (margin, 0), match.start(), match.end()))
|
self.TAG_NAME_MARGIN_INDENT, (margin, 0), match.start(), match.end()))
|
||||||
result.append((self.TAG_NAME_BOLD, (), match.start(), match.end()))
|
result.append((self.TAG_NAME_BOLD, (), match.start(), match.end()))
|
||||||
|
|
||||||
# Find "=======" header underline (bold).
|
# Find "=======" header underline (bold).
|
||||||
|
@ -257,9 +261,9 @@ class MarkupHandler:
|
||||||
matches = re.finditer(markup_regex.CODE_BLOCK, text)
|
matches = re.finditer(markup_regex.CODE_BLOCK, text)
|
||||||
for match in matches:
|
for match in matches:
|
||||||
result.append((
|
result.append((
|
||||||
self.TAG_NAME_MARGIN_INDENT, (0, 2), match.start("block"), match.end("block")))
|
self.TAG_NAME_MARGIN_INDENT, (0, 1), match.start("block"), match.end("block")))
|
||||||
result.append((
|
result.append((
|
||||||
self.TAG_NAME_PLAIN_TEXT, (), match.start("block"), match.end("block")))
|
self.TAG_NAME_CODE_TEXT, (), match.start("block"), match.end("block")))
|
||||||
|
|
||||||
# Send parsed data back.
|
# Send parsed data back.
|
||||||
child_conn.send((text, result))
|
child_conn.send((text, result))
|
||||||
|
@ -295,7 +299,7 @@ class MarkupHandler:
|
||||||
buffer.remove_tag(self.tag_center, start, end)
|
buffer.remove_tag(self.tag_center, start, end)
|
||||||
buffer.remove_tag(self.tag_plain_text, start, end)
|
buffer.remove_tag(self.tag_plain_text, start, end)
|
||||||
buffer.remove_tag(self.tag_gray_text, start, end)
|
buffer.remove_tag(self.tag_gray_text, start, end)
|
||||||
buffer.remove_tag(self.tag_math_text, start, end)
|
buffer.remove_tag(self.tag_code_text, start, end)
|
||||||
buffer.remove_tag(self.tag_wrap_none, start, end)
|
buffer.remove_tag(self.tag_wrap_none, start, end)
|
||||||
for tag in self.tags_margins_indents.values():
|
for tag in self.tags_margins_indents.values():
|
||||||
buffer.remove_tag(tag, start, end)
|
buffer.remove_tag(tag, start, end)
|
||||||
|
|
Loading…
Reference in New Issue