From aaadba3812d3bd46a25239cac923e047112a7132 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Fri, 20 Feb 2026 00:10:15 -0600 Subject: [PATCH] Clean up deprecated code and fix multiple issues - Remove deprecated markdown_preview plugin and re-wrote - Renamed alt_provider.py under words completer - Fix words completion provider logic and cache handling - Fix container orientations (VERTICAL -> HORIZONTAL) and add Separators - Remove unused Gtk imports from search_replace plugin - Fix event creation parameter order in source_file.py - Fix typo in source_view.py (_load_pretify_json -> _load_prettify_json) - Refactor webkit_ui with new load methods and enhanced settings --- .../{alt_provider.py => default_provider.py} | 15 +++ .../default_provider_response_cache.py | 29 +++++ .../completers/words_completer/provider.py | 12 +- .../provider_response_cache.py | 3 +- .../markdown_preview/__init__.py | 0 .../markdown_preview/__main__.py | 0 plugins/code/markdown_preview/manifest.json | 7 + .../markdown_preview/markdown/__init__.py | 0 .../markdown_preview/markdown/__main__.py | 0 .../markdown_preview/markdown/__meta__.py | 0 .../markdown_preview/markdown/blockparser.py | 0 .../markdown/blockprocessors.py | 0 .../markdown_preview/markdown/core.py | 0 .../markdown/extensions/__init__.py | 0 .../markdown/extensions/abbr.py | 0 .../markdown/extensions/admonition.py | 0 .../markdown/extensions/attr_list.py | 0 .../markdown/extensions/codehilite.py | 0 .../markdown/extensions/def_list.py | 0 .../markdown/extensions/extra.py | 0 .../markdown/extensions/fenced_code.py | 0 .../markdown/extensions/footnotes.py | 0 .../markdown/extensions/legacy_attrs.py | 0 .../markdown/extensions/legacy_em.py | 0 .../markdown/extensions/md_in_html.py | 0 .../markdown/extensions/meta.py | 0 .../markdown/extensions/nl2br.py | 0 .../markdown/extensions/sane_lists.py | 0 .../markdown/extensions/smarty.py | 0 .../markdown/extensions/tables.py | 0 .../markdown/extensions/toc.py | 0 .../markdown/extensions/wikilinks.py | 0 .../markdown_preview/markdown/htmlparser.py | 0 .../markdown/inlinepatterns.py | 0 .../markdown/postprocessors.py | 0 .../markdown/preprocessors.py | 0 .../markdown_preview/markdown/serializers.py | 0 .../markdown_preview/markdown/test_tools.py | 0 .../markdown/treeprocessors.py | 0 .../markdown_preview/markdown/util.py | 0 .../code/markdown_preview/markdown_preview.py | 101 +++++++++++++++ .../code/markdown_preview/mixins/__init__.py | 3 + .../mixins/markdown_preview_mixin.py | 38 ++++++ .../mixins}/markdown_template_mixin.py | 5 +- plugins/code/markdown_preview/plugin.py | 56 ++++++++ plugins/code/search_replace/plugin.py | 4 +- .../depricated/markdown_preview/manifest.json | 11 -- .../markdown_preview/markdown_preview.glade | 121 ------------------ plugins/depricated/markdown_preview/plugin.py | 114 ----------------- src/core/containers/footer_container.py | 5 +- src/core/containers/header_container.py | 2 + src/core/containers/left_container.py | 4 +- src/core/containers/right_container.py | 5 +- .../provider_response_cache_base.py | 9 +- src/core/widgets/code/source_file.py | 7 +- src/core/widgets/code/source_view.py | 2 +- src/core/widgets/webkit/webkit_ui.py | 26 ++-- src/libs/settings/other/webkit_ui_settings.py | 62 ++++++++- 58 files changed, 366 insertions(+), 275 deletions(-) rename plugins/code/completers/words_completer/{alt_provider.py => default_provider.py} (70%) create mode 100644 plugins/code/completers/words_completer/default_provider_response_cache.py rename plugins/{depricated => code}/markdown_preview/__init__.py (100%) rename plugins/{depricated => code}/markdown_preview/__main__.py (100%) create mode 100644 plugins/code/markdown_preview/manifest.json rename plugins/{depricated => code}/markdown_preview/markdown/__init__.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/__main__.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/__meta__.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/blockparser.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/blockprocessors.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/core.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/__init__.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/abbr.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/admonition.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/attr_list.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/codehilite.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/def_list.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/extra.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/fenced_code.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/footnotes.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/legacy_attrs.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/legacy_em.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/md_in_html.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/meta.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/nl2br.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/sane_lists.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/smarty.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/tables.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/toc.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/extensions/wikilinks.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/htmlparser.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/inlinepatterns.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/postprocessors.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/preprocessors.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/serializers.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/test_tools.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/treeprocessors.py (100%) rename plugins/{depricated => code}/markdown_preview/markdown/util.py (100%) create mode 100644 plugins/code/markdown_preview/markdown_preview.py create mode 100644 plugins/code/markdown_preview/mixins/__init__.py create mode 100644 plugins/code/markdown_preview/mixins/markdown_preview_mixin.py rename plugins/{depricated/markdown_preview => code/markdown_preview/mixins}/markdown_template_mixin.py (83%) create mode 100644 plugins/code/markdown_preview/plugin.py delete mode 100644 plugins/depricated/markdown_preview/manifest.json delete mode 100644 plugins/depricated/markdown_preview/markdown_preview.glade delete mode 100644 plugins/depricated/markdown_preview/plugin.py diff --git a/plugins/code/completers/words_completer/alt_provider.py b/plugins/code/completers/words_completer/default_provider.py similarity index 70% rename from plugins/code/completers/words_completer/alt_provider.py rename to plugins/code/completers/words_completer/default_provider.py index f4ede69..7b315dd 100644 --- a/plugins/code/completers/words_completer/alt_provider.py +++ b/plugins/code/completers/words_completer/default_provider.py @@ -32,8 +32,23 @@ class Provider(GtkSource.CompletionWords): return 'Words Completion' def do_match(self, context): + # Note: If provider is in interactive activation then need to check + # view focus as otherwise non focus views start trying to grab it. + completion = context.get_property("completion") + if not completion.get_view().has_focus(): return + word = self.response_cache.get_word(context) if not word or len(word) < 2: return False + + iter = self.response_cache.get_iter_correctly(context) + iter.backward_char() + ch = iter.get_char() + # NOTE: Look to re-add or apply supprting logic to use spaces + # As is it slows down the editor in certain contexts... + # if not (ch in ('_', '.', ' ') or ch.isalnum()): + if not (ch in ('_', '.') or ch.isalnum()): + return False + return True def do_get_priority(self): diff --git a/plugins/code/completers/words_completer/default_provider_response_cache.py b/plugins/code/completers/words_completer/default_provider_response_cache.py new file mode 100644 index 0000000..3efb546 --- /dev/null +++ b/plugins/code/completers/words_completer/default_provider_response_cache.py @@ -0,0 +1,29 @@ +# Python imports + +# Lib imports + +# Application imports +from libs.event_factory import Code_Event_Types + +from core.widgets.code.completion_providers.provider_response_cache_base import ProviderResponseCacheBase + + + +class ProviderResponseCache(ProviderResponseCacheBase): + def __init__(self): + super(ProviderResponseCache, self).__init__() + + self.matchers: dict = {} + + + def process_file_load(self, event: Code_Event_Types.AddedNewFileEvent): + ... + + def process_file_close(self, event: Code_Event_Types.RemovedFileEvent): + ... + + def process_file_save(self, event: Code_Event_Types.SavedFileEvent): + ... + + def process_file_change(self, event: Code_Event_Types.TextChangedEvent): + ... diff --git a/plugins/code/completers/words_completer/provider.py b/plugins/code/completers/words_completer/provider.py index 845acc8..70997b2 100644 --- a/plugins/code/completers/words_completer/provider.py +++ b/plugins/code/completers/words_completer/provider.py @@ -18,7 +18,7 @@ class Provider(GObject.GObject, GtkSource.CompletionProvider): This is a Words Completion Provider. # NOTE: used information from here --> https://warroom.rsmus.com/do-that-auto-complete/ """ - # __gtype_name__ = 'WordsCompletionProvider' + __gtype_name__ = 'WordsCompletionProvider' def __init__(self): super(Provider, self).__init__() @@ -37,6 +37,16 @@ class Provider(GObject.GObject, GtkSource.CompletionProvider): word = self.response_cache.get_word(context) if not word or len(word) < 2: return False + + iter = self.response_cache.get_iter_correctly(context) + iter.backward_char() + ch = iter.get_char() + # NOTE: Look to re-add or apply supprting logic to use spaces + # As is it slows down the editor in certain contexts... + # if not (ch in ('_', '.', ' ') or ch.isalnum()): + if not (ch in ('_', '.') or ch.isalnum()): + return False + return True def do_get_priority(self): diff --git a/plugins/code/completers/words_completer/provider_response_cache.py b/plugins/code/completers/words_completer/provider_response_cache.py index 5a55313..61648ad 100644 --- a/plugins/code/completers/words_completer/provider_response_cache.py +++ b/plugins/code/completers/words_completer/provider_response_cache.py @@ -90,7 +90,8 @@ class ProviderResponseCache(ProviderResponseCacheBase): self.matchers[buffer] = set() def load_into_set(self, buffer, new_words): - self.matchers[buffer].update(new_words) + # self.matchers[buffer].update(new_words) + self.matchers[buffer] = new_words def load_as_new_set(self, buffer, data): self.matchers[buffer] = self.get_all_words(data) diff --git a/plugins/depricated/markdown_preview/__init__.py b/plugins/code/markdown_preview/__init__.py similarity index 100% rename from plugins/depricated/markdown_preview/__init__.py rename to plugins/code/markdown_preview/__init__.py diff --git a/plugins/depricated/markdown_preview/__main__.py b/plugins/code/markdown_preview/__main__.py similarity index 100% rename from plugins/depricated/markdown_preview/__main__.py rename to plugins/code/markdown_preview/__main__.py diff --git a/plugins/code/markdown_preview/manifest.json b/plugins/code/markdown_preview/manifest.json new file mode 100644 index 0000000..6acb594 --- /dev/null +++ b/plugins/code/markdown_preview/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Markdown Preview", + "author": "ITDominator", + "version": "0.0.1", + "support": "", + "requests": {} +} diff --git a/plugins/depricated/markdown_preview/markdown/__init__.py b/plugins/code/markdown_preview/markdown/__init__.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/__init__.py rename to plugins/code/markdown_preview/markdown/__init__.py diff --git a/plugins/depricated/markdown_preview/markdown/__main__.py b/plugins/code/markdown_preview/markdown/__main__.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/__main__.py rename to plugins/code/markdown_preview/markdown/__main__.py diff --git a/plugins/depricated/markdown_preview/markdown/__meta__.py b/plugins/code/markdown_preview/markdown/__meta__.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/__meta__.py rename to plugins/code/markdown_preview/markdown/__meta__.py diff --git a/plugins/depricated/markdown_preview/markdown/blockparser.py b/plugins/code/markdown_preview/markdown/blockparser.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/blockparser.py rename to plugins/code/markdown_preview/markdown/blockparser.py diff --git a/plugins/depricated/markdown_preview/markdown/blockprocessors.py b/plugins/code/markdown_preview/markdown/blockprocessors.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/blockprocessors.py rename to plugins/code/markdown_preview/markdown/blockprocessors.py diff --git a/plugins/depricated/markdown_preview/markdown/core.py b/plugins/code/markdown_preview/markdown/core.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/core.py rename to plugins/code/markdown_preview/markdown/core.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/__init__.py b/plugins/code/markdown_preview/markdown/extensions/__init__.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/__init__.py rename to plugins/code/markdown_preview/markdown/extensions/__init__.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/abbr.py b/plugins/code/markdown_preview/markdown/extensions/abbr.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/abbr.py rename to plugins/code/markdown_preview/markdown/extensions/abbr.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/admonition.py b/plugins/code/markdown_preview/markdown/extensions/admonition.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/admonition.py rename to plugins/code/markdown_preview/markdown/extensions/admonition.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/attr_list.py b/plugins/code/markdown_preview/markdown/extensions/attr_list.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/attr_list.py rename to plugins/code/markdown_preview/markdown/extensions/attr_list.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/codehilite.py b/plugins/code/markdown_preview/markdown/extensions/codehilite.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/codehilite.py rename to plugins/code/markdown_preview/markdown/extensions/codehilite.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/def_list.py b/plugins/code/markdown_preview/markdown/extensions/def_list.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/def_list.py rename to plugins/code/markdown_preview/markdown/extensions/def_list.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/extra.py b/plugins/code/markdown_preview/markdown/extensions/extra.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/extra.py rename to plugins/code/markdown_preview/markdown/extensions/extra.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/fenced_code.py b/plugins/code/markdown_preview/markdown/extensions/fenced_code.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/fenced_code.py rename to plugins/code/markdown_preview/markdown/extensions/fenced_code.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/footnotes.py b/plugins/code/markdown_preview/markdown/extensions/footnotes.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/footnotes.py rename to plugins/code/markdown_preview/markdown/extensions/footnotes.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/legacy_attrs.py b/plugins/code/markdown_preview/markdown/extensions/legacy_attrs.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/legacy_attrs.py rename to plugins/code/markdown_preview/markdown/extensions/legacy_attrs.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/legacy_em.py b/plugins/code/markdown_preview/markdown/extensions/legacy_em.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/legacy_em.py rename to plugins/code/markdown_preview/markdown/extensions/legacy_em.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/md_in_html.py b/plugins/code/markdown_preview/markdown/extensions/md_in_html.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/md_in_html.py rename to plugins/code/markdown_preview/markdown/extensions/md_in_html.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/meta.py b/plugins/code/markdown_preview/markdown/extensions/meta.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/meta.py rename to plugins/code/markdown_preview/markdown/extensions/meta.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/nl2br.py b/plugins/code/markdown_preview/markdown/extensions/nl2br.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/nl2br.py rename to plugins/code/markdown_preview/markdown/extensions/nl2br.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/sane_lists.py b/plugins/code/markdown_preview/markdown/extensions/sane_lists.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/sane_lists.py rename to plugins/code/markdown_preview/markdown/extensions/sane_lists.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/smarty.py b/plugins/code/markdown_preview/markdown/extensions/smarty.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/smarty.py rename to plugins/code/markdown_preview/markdown/extensions/smarty.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/tables.py b/plugins/code/markdown_preview/markdown/extensions/tables.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/tables.py rename to plugins/code/markdown_preview/markdown/extensions/tables.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/toc.py b/plugins/code/markdown_preview/markdown/extensions/toc.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/toc.py rename to plugins/code/markdown_preview/markdown/extensions/toc.py diff --git a/plugins/depricated/markdown_preview/markdown/extensions/wikilinks.py b/plugins/code/markdown_preview/markdown/extensions/wikilinks.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/extensions/wikilinks.py rename to plugins/code/markdown_preview/markdown/extensions/wikilinks.py diff --git a/plugins/depricated/markdown_preview/markdown/htmlparser.py b/plugins/code/markdown_preview/markdown/htmlparser.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/htmlparser.py rename to plugins/code/markdown_preview/markdown/htmlparser.py diff --git a/plugins/depricated/markdown_preview/markdown/inlinepatterns.py b/plugins/code/markdown_preview/markdown/inlinepatterns.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/inlinepatterns.py rename to plugins/code/markdown_preview/markdown/inlinepatterns.py diff --git a/plugins/depricated/markdown_preview/markdown/postprocessors.py b/plugins/code/markdown_preview/markdown/postprocessors.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/postprocessors.py rename to plugins/code/markdown_preview/markdown/postprocessors.py diff --git a/plugins/depricated/markdown_preview/markdown/preprocessors.py b/plugins/code/markdown_preview/markdown/preprocessors.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/preprocessors.py rename to plugins/code/markdown_preview/markdown/preprocessors.py diff --git a/plugins/depricated/markdown_preview/markdown/serializers.py b/plugins/code/markdown_preview/markdown/serializers.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/serializers.py rename to plugins/code/markdown_preview/markdown/serializers.py diff --git a/plugins/depricated/markdown_preview/markdown/test_tools.py b/plugins/code/markdown_preview/markdown/test_tools.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/test_tools.py rename to plugins/code/markdown_preview/markdown/test_tools.py diff --git a/plugins/depricated/markdown_preview/markdown/treeprocessors.py b/plugins/code/markdown_preview/markdown/treeprocessors.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/treeprocessors.py rename to plugins/code/markdown_preview/markdown/treeprocessors.py diff --git a/plugins/depricated/markdown_preview/markdown/util.py b/plugins/code/markdown_preview/markdown/util.py similarity index 100% rename from plugins/depricated/markdown_preview/markdown/util.py rename to plugins/code/markdown_preview/markdown/util.py diff --git a/plugins/code/markdown_preview/markdown_preview.py b/plugins/code/markdown_preview/markdown_preview.py new file mode 100644 index 0000000..b9a0400 --- /dev/null +++ b/plugins/code/markdown_preview/markdown_preview.py @@ -0,0 +1,101 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +gi.require_version('Gdk', '3.0') + +from gi.repository import Gtk +from gi.repository import Gdk + +# Application imports +from core.widgets.webkit.webkit_ui import WebkitUI + +from .mixins.markdown_preview_mixin import MarkdownPreviewMixin + + + +class MarkdownPreview(Gtk.Popover, MarkdownPreviewMixin): + def __init__(self): + super(MarkdownPreview, self).__init__() + + self.can_hide: bool = True + self.is_preview_paused: bool = True # True by default b/c started hidden + + self._setup_styling() + self._setup_signals() + self._load_widgets() + + + def _setup_styling(self): + ctx = self.get_style_context() + ctx.add_class("markdown-preview") + + self.set_modal(False) + self.set_can_focus(False) + self.set_transitions_enabled(False) + self.set_size_request(480, 720) + self.override_background_color( + Gtk.StateFlags.NORMAL, + Gdk.RGBA(0, 0, 0, 0.0) + ) + self.set_constrain_to( + Gtk.PopoverConstraint.WINDOW + ) + + def _setup_signals(self): + self.connect("hide", self._handle_hide) + self.connect("show", self._handle_show) + + def _load_widgets(self): + box = Gtk.Box() + bttn_box = Gtk.ButtonBox() + scrolled_win = Gtk.ScrolledWindow() + viewport = Gtk.Viewport() + self._markdown_view = WebkitUI() + + self.start_stop_bttn = Gtk.ToggleButton() + settings_bttn = Gtk.Button() + + self.start_stop_bttn.set_label("gtk-media-pause") + self.start_stop_bttn.set_use_stock(True) + + settings_bttn.set_image( + Gtk.Image.new_from_stock( + "gtk-justify-fill", Gtk.IconSize.BUTTON + ) + ) + + self._markdown_view.set_vexpand(True) + box.set_orientation(Gtk.Orientation.VERTICAL) + + self.start_stop_bttn.connect("clicked", self._tggle_preview_updates) + settings_bttn.connect("clicked", self._handle_settings) + + bttn_box.pack_end(self.start_stop_bttn, expand = False, fill = False, padding = 1) + bttn_box.pack_end(settings_bttn, expand = False, fill = False, padding = 1) + viewport.add(self._markdown_view) + scrolled_win.add(viewport) + box.add(bttn_box) + box.add(scrolled_win) + self.add(box) + + box.show_all() + + + def _handle_hide(self, widget): + if self.can_hide: + self.is_preview_paused = True + return False + + return True + + def _handle_show(self, widget): + self.can_hide = False + self.is_preview_paused = self.start_stop_bttn.get_active() + + def _tggle_preview_updates(self, widget): + self.is_preview_paused = not self.is_preview_paused + + def _handle_settings(self, widget): + ... diff --git a/plugins/code/markdown_preview/mixins/__init__.py b/plugins/code/markdown_preview/mixins/__init__.py new file mode 100644 index 0000000..da03c94 --- /dev/null +++ b/plugins/code/markdown_preview/mixins/__init__.py @@ -0,0 +1,3 @@ +""" + Pligin Module Mixins +""" diff --git a/plugins/code/markdown_preview/mixins/markdown_preview_mixin.py b/plugins/code/markdown_preview/mixins/markdown_preview_mixin.py new file mode 100644 index 0000000..5a3a944 --- /dev/null +++ b/plugins/code/markdown_preview/mixins/markdown_preview_mixin.py @@ -0,0 +1,38 @@ +# Python imports + +# Lib imports + +# Application imports +from .markdown_template_mixin import MarkdownTemplateMixin + +from .. import markdown + + + +class MarkdownPreviewMixin(MarkdownTemplateMixin): + def _do_markdown_translate(self, buffer): + if self.is_preview_paused: return + + if not self.is_markdown(buffer): + data = self.wrap_html_to_body("

Not a Markdown file...

") + self._load_html(data) + return + + data = self.get_rendered_markdown(buffer) + self._load_html(data) + + def _load_html(self, data: str): + self._markdown_view.load_html( + content = data, base_uri = None + ) + + def get_rendered_markdown(self, buffer) -> str: + start_itr = buffer.get_start_iter() + end_itr = buffer.get_end_iter() + text = buffer.get_text(start_itr, end_itr, include_hidden_chars = False) + html = markdown.markdown(text) + + return self.wrap_html_to_body(html) + + def is_markdown(self, buffer) -> bool: + return buffer.get_language() and buffer.get_language().get_id() == "markdown" \ No newline at end of file diff --git a/plugins/depricated/markdown_preview/markdown_template_mixin.py b/plugins/code/markdown_preview/mixins/markdown_template_mixin.py similarity index 83% rename from plugins/depricated/markdown_preview/markdown_template_mixin.py rename to plugins/code/markdown_preview/mixins/markdown_template_mixin.py index 710db12..05ef98d 100644 --- a/plugins/depricated/markdown_preview/markdown_template_mixin.py +++ b/plugins/code/markdown_preview/mixins/markdown_template_mixin.py @@ -7,7 +7,7 @@ class MarkdownTemplateMixin: - def wrap_html_to_body(self, html): + def wrap_html_to_body(self, html: str): return f"""\ @@ -17,7 +17,8 @@ class MarkdownTemplateMixin: