Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2365d6fec2 | |||
| 35c8a954d0 | |||
| e914a2d4e9 | |||
| 7fbb23b480 |
@ -20,6 +20,7 @@ from .markdown2html import markdown2html
|
|||||||
MARKDOWN_VIEW_INFOS = "markdown_view_infos"
|
MARKDOWN_VIEW_INFOS = "markdown_view_infos"
|
||||||
PREVIEW_VIEW_INFOS = "preview_view_infos"
|
PREVIEW_VIEW_INFOS = "preview_view_infos"
|
||||||
SETTING_DELAY_BETWEEN_UPDATES = "delay_between_updates"
|
SETTING_DELAY_BETWEEN_UPDATES = "delay_between_updates"
|
||||||
|
SETTING_FONT_SCALE = "font_scale"
|
||||||
|
|
||||||
resources = {}
|
resources = {}
|
||||||
|
|
||||||
@ -201,7 +202,12 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener):
|
|||||||
# This check is needed since a this function is used as a callback for when images
|
# This check is needed since a this function is used as a callback for when images
|
||||||
# are loaded from the internet (ie. it could finish loading *after* the user
|
# are loaded from the internet (ie. it could finish loading *after* the user
|
||||||
# closes the markdown_view)
|
# closes the markdown_view)
|
||||||
if time.time() - self.last_update < DELAY / 1000:
|
# Reload settings each time to catch changes
|
||||||
|
settings = get_settings()
|
||||||
|
delay = settings.get(SETTING_DELAY_BETWEEN_UPDATES, 100) # Provide default
|
||||||
|
font_scale = settings.get(SETTING_FONT_SCALE, 1.0) # Provide default
|
||||||
|
|
||||||
|
if time.time() - self.last_update < delay / 1000:
|
||||||
return
|
return
|
||||||
|
|
||||||
if markdown_view.buffer_id() == 0:
|
if markdown_view.buffer_id() == 0:
|
||||||
@ -213,15 +219,19 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener):
|
|||||||
markdown = markdown_view.substr(total_region)
|
markdown = markdown_view.substr(total_region)
|
||||||
|
|
||||||
preview_view = markdown_view.window().active_view_in_group(1)
|
preview_view = markdown_view.window().active_view_in_group(1)
|
||||||
viewport_width = preview_view.viewport_extent()[0]
|
# Get viewport_width, default to a large value if view isn't ready
|
||||||
|
viewport_extent = preview_view.viewport_extent()
|
||||||
|
viewport_width = viewport_extent[0] if viewport_extent else 1024
|
||||||
|
|
||||||
basepath = os.path.dirname(markdown_view.file_name())
|
|
||||||
|
basepath = os.path.dirname(markdown_view.file_name()) if markdown_view.file_name() else '.' # Handle unsaved files
|
||||||
html = markdown2html(
|
html = markdown2html(
|
||||||
markdown,
|
markdown,
|
||||||
basepath,
|
basepath,
|
||||||
partial(self._update_preview, markdown_view),
|
partial(self._update_preview, markdown_view),
|
||||||
resources,
|
resources,
|
||||||
viewport_width,
|
viewport_width,
|
||||||
|
font_scale,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.phantom_sets[markdown_view.id()].update(
|
self.phantom_sets[markdown_view.id()].update(
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
// minimum number of milliseconds to wait before updating the preview again
|
// minimum number of milliseconds to wait before updating the preview again
|
||||||
"delay_between_updates": 100
|
"delay_between_updates": 100,
|
||||||
|
|
||||||
|
// scale factor for the font size relative to markdown settings
|
||||||
|
"font_scale": 1.0
|
||||||
}
|
}
|
||||||
@ -25,7 +25,7 @@ markdowner = Markdown(extras=["fenced-code-blocks", "cuddled-lists"])
|
|||||||
# does it stupidly throw them out? (we could implement something of our own)
|
# does it stupidly throw them out? (we could implement something of our own)
|
||||||
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
|
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
|
||||||
|
|
||||||
def markdown2html(markdown, basepath, re_render, resources, viewport_width):
|
def markdown2html(markdown, basepath, re_render, resources, viewport_width, font_scale=1.0):
|
||||||
""" converts the markdown to html, loads the images and puts in base64 for sublime
|
""" converts the markdown to html, loads the images and puts in base64 for sublime
|
||||||
to understand them correctly. That means that we are responsible for loading the
|
to understand them correctly. That means that we are responsible for loading the
|
||||||
images from the internet. Hence, we take in re_render, which is just a function we
|
images from the internet. Hence, we take in re_render, which is just a function we
|
||||||
@ -84,7 +84,11 @@ def markdown2html(markdown, basepath, re_render, resources, viewport_width):
|
|||||||
# FIXME: highlight the code using Sublime's syntax
|
# FIXME: highlight the code using Sublime's syntax
|
||||||
|
|
||||||
# FIXME: report that ST doesn't support <br/> but does work with <br />... WTF?
|
# FIXME: report that ST doesn't support <br/> but does work with <br />... WTF?
|
||||||
return "<style>\n{}\n</style>\n\n{}".format(resources["stylesheet"], soup).replace(
|
# Add font scaling CSS rule
|
||||||
|
font_scale_css = "body {{ font-size: {}em; }}\n".format(font_scale)
|
||||||
|
stylesheet = font_scale_css + resources["stylesheet"]
|
||||||
|
|
||||||
|
return "<style>\n{}\n</style>\n\n{}".format(stylesheet, soup).replace(
|
||||||
"<br/>", "<br />"
|
"<br/>", "<br />"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -218,4 +222,5 @@ def independent_markdown2html(markdown):
|
|||||||
"stylesheet": "",
|
"stylesheet": "",
|
||||||
},
|
},
|
||||||
960,
|
960,
|
||||||
|
1.0, # Add default font_scale for independent call
|
||||||
)
|
)
|
||||||
|
|||||||
15
repository.json
Normal file
15
repository.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"schema_version": "3",
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "MarkdownLivePreview-Fork",
|
||||||
|
"description": "My enhanced live-preview fork of MarkdownLivePreview",
|
||||||
|
"releases": [
|
||||||
|
{
|
||||||
|
"version": "1.0.0",
|
||||||
|
"url": "https://git.0x42.cloud/christian.morpurgo/MarkdownLivePreview/archive/v0.0.0.zip"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user