[myst] the plugin is incompatible with myst-parser > 0.17.2
lorenzo-rovigatti opened this issue · comments
This PR restructured myst's code, breaking this plugin. A quick fix would be to have myst-parser==0.17.2
instead of myst-parser
in the requirements.txt
file (and update the docs accordingly).
Could you provide a patch for this?
I'm not exactly familiar with either myst's internals or nikola plugins, but applying the following patch to myst.py
seems to do the trick:
--- myst_old.py 2023-06-26 19:59:23.447605537 +0200
+++ myst.py 2023-06-26 23:41:20.177490223 +0200
@@ -31,7 +31,6 @@
try:
import myst_parser
- import myst_parser.main
except ImportError:
myst_parser = None
nikola_extension = None
@@ -63,7 +62,39 @@
if not is_two_file:
_, data = self.split_metadata(data, post, lang)
new_data, shortcodes = sc.extract_shortcodes(data)
- output = myst_parser.main.to_html(new_data)
+
+ # this works for myst-parser versions <= 0.17.2
+ try:
+ from myst_parser.main import to_html
+ output = to_html(new_data)
+ except ImportError:
+ from docutils.core import publish_string
+ from myst_parser.docutils_ import Parser
+ output = publish_string(
+ source=new_data,
+ writer_name="html5",
+ settings_overrides={
+ "myst_enable_extensions": [ # enable all extension
+ "amsmath",
+ "attrs_inline",
+ "colon_fence",
+ "deflist",
+ "dollarmath",
+ "fieldlist",
+ "html_admonition",
+ "html_image",
+ "linkify",
+ "replacements",
+ "smartquotes",
+ "strikethrough",
+ "substitution",
+ "tasklist",
+ ],
+ "embed_stylesheet": True,
+ 'output_encoding': 'unicode',
+ },
+ parser=Parser(),
+ )
output, shortcode_deps = self.site.apply_shortcodes_uuid(
output, shortcodes, filename=source_path, extra_context={"post": post}
)
Note that with the "new" myst-parser versions you can also enable some extensions that can come in handy (such as admonitions), but these require to style specific css classes.
BTW, If something like this is fine, I can try to improve the code, add some comments and submit a PR.
If the patch works with some test inputs, please make a pull request with it.