Esempio n. 1
0
    def run(self, edit, immediate=True):
        # Whether RendererManager is finished loading?
        if not RendererManager.ensure_started():
            sublime.status_message('OmniMarkupPreviewer have not yet started')
            return

        buffer_id = self.view.buffer_id()
        # Opened in a tab already?
        opened = False
        for view in self.view.window().views():
            if view.buffer_id() == buffer_id:
                opened = True
                break
        if not opened:
            RendererManager.enqueue_view(self.view, immediate=True)

        host = Setting.instance().server_host
        port = Setting.instance().server_port
        if host == '0.0.0.0':
            host = '127.0.0.1'
        url = 'http://%s:%d/view/%d' % (host, port, buffer_id)
        # Open with the default browser
        log.info('Launching web browser for %s', url)
        launching_web_browser_for_url(
            url,
            success_msg_default='Preview launched in default web browser',
            success_msg_user='******')
 def on_modified(self, view):
     if view.is_scratch() or not Setting.instance().refresh_on_modified:
         return
     self.delayed_views_worker.queue(
         view,
         preemptive=False,
         timeout=float(Setting.instance().refresh_on_modified_delay) / 1000)
def plugin_loaded():
    Server.init()
    # Setting must be the first to initialize.
    Setting.instance().init()
    PluginManager.instance().subscribe_setting_events()
    RendererManager.start()
    PluginManager.instance().restart_server()
Esempio n. 4
0
def plugin_loaded():
    Server.init()
    # Setting must be the first to initialize.
    Setting.instance().init()
    PluginManager.instance().subscribe_setting_events()
    RendererManager.start()
    PluginManager.instance().restart_server()
    def run(self, edit, immediate=True):
        # Whether RendererManager is finished loading?
        if not RendererManager.ensure_started():
            sublime.status_message('OmniMarkupPreviewer have not yet started')
            return

        buffer_id = self.view.buffer_id()
        # Opened in a tab already?
        opened = False
        for view in self.view.window().views():
            if view.buffer_id() == buffer_id:
                opened = True
                break
        if not opened:
            RendererManager.enqueue_view(self.view, immediate=True)

        host = Setting.instance().server_host
        port = Setting.instance().server_port
        if host == '0.0.0.0':
            host = '127.0.0.1'
        url = 'http://%s:%d/view/%d' % (host, port, buffer_id)
        # Open with the default browser
        log.info('Launching web browser for %s', url)
        launching_web_browser_for_url(
            url,
            success_msg_default='Preview launched in default web browser',
            success_msg_user='******')
def launching_web_browser_for_url(url,
                                  success_msg_default=None,
                                  success_msg_user=None):
    try:
        setting = Setting.instance()
        if setting.browser_command:
            browser_command = [
                os.path.expandvars(arg).format(url=url)
                for arg in setting.browser_command
            ]

            if os.name == 'nt':
                # unicode arguments broken under windows
                encoding = locale.getpreferredencoding()
                browser_command = [
                    arg.encode(encoding) for arg in browser_command
                ]

            subprocess.Popen(browser_command)
            if success_msg_user:
                sublime.status_message(success_msg_user)
        else:
            # Default web browser
            desktop.open(url)
            if success_msg_default:
                sublime.status_message(success_msg_default)
    except:
        if setting.browser_command:
            log.exception('Error while launching user defined web browser')
        else:
            log.exception('Error while launching default web browser')
Esempio n. 7
0
 def restart_server(self):
     global g_server
     if g_server is not None:
         self.stop_server()
     setting = Setting.instance()
     g_server = Server.Server(host=setting.server_host,
                              port=setting.server_port)
Esempio n. 8
0
    def run(self, edit, clipboard_only=False):
        view = self.view
        try:
            html_content = RendererManager.render_view_as_html(view)

            if clipboard_only:
                self.copy_to_clipboard(html_content)
                return

            setting = Setting.instance()
            html_fn = self.write_to_file(html_content, setting)

            # Copy contents to clipboard
            if setting.export_options['copy_to_clipboard']:
                self.copy_to_clipboard(html_content)

            # Open output file if necessary
            if setting.export_options['open_after_exporting']:
                log.info('Launching web browser for %s', html_fn)
                launching_web_browser_for_url(html_fn)

        except NotImplementedError:
            pass
        except:
            log.exception('Error while exporting')
    def run(self, edit, clipboard_only=False):
        view = self.view
        try:
            html_content = RendererManager.render_view_as_html(view)

            if clipboard_only:
                self.copy_to_clipboard(html_content)
                return

            setting = Setting.instance()
            html_fn = self.write_to_file(html_content, setting)

            # Copy contents to clipboard
            if setting.export_options.get('copy_to_clipboard', False):
                self.copy_to_clipboard(html_content)

            # Open output file if necessary
            if setting.export_options.get('open_after_exporting', False):
                log.info('Launching web browser for %s', html_fn)
                launching_web_browser_for_url(html_fn)

        except NotImplementedError:
            pass
        except:
            sublime.error_message('Error while exporting, please check your console for more information.')
            log.exception('Error while exporting')
def launching_web_browser_for_url(url, success_msg_default=None, success_msg_user=None):
    try:
        setting = Setting.instance()
        if setting.browser_command:
            browser_command = [os.path.expandvars(arg).format(url=url)
                               for arg in setting.browser_command]

            if os.name == 'nt':
                # unicode arguments broken under windows
                encoding = locale.getpreferredencoding()
                browser_command = [arg.encode(encoding) for arg in browser_command]

            subprocess.Popen(browser_command)
            if success_msg_user:
                sublime.status_message(success_msg_user)
        else:
            # Default web browser
            desktop.open(url)
            if success_msg_default:
                sublime.status_message(success_msg_default)
    except:
        if setting.browser_command:
            log.exception('Error while launching user defined web browser')
        else:
            log.exception('Error while launching default web browser')
Esempio n. 11
0
    def init(cls):
        setting = Setting.instance()
        setting.subscribe('changing', cls.on_setting_changing)
        setting.subscribe('changed', cls.on_setting_changed)

        cls.on_setting_changing(setting)
        cls.load_renderers()
        cls.on_setting_changed(setting)
Esempio n. 12
0
    def init(cls):
        setting = Setting.instance()
        setting.subscribe('changing', cls.on_setting_changing)
        setting.subscribe('changed', cls.on_setting_changed)

        cls.on_setting_changing(setting)
        cls.load_renderers()
        cls.on_setting_changed(setting)
Esempio n. 13
0
 def render_view_to_string(cls, view):
     fullpath = view.file_name() or ''
     lang = RendererManager.get_lang_by_scope_name(view.scope_name(0))
     text = view.substr(sublime.Region(0, view.size()))
     html_part = RendererManager.render_text(
         fullpath,
         lang,
         text,
         post_process_func=cls.render_text_postprocess_exporting)
     setting = Setting.instance()
     return template(setting.export_options['template_name'],
                     mathjax_enabled=setting.mathjax_enabled,
                     filename=os.path.basename(fullpath),
                     dirname=os.path.dirname(fullpath),
                     html_part=html_part)
Esempio n. 14
0
 def render_view_to_string(cls, view):
     fullpath = view.file_name() or ''
     lang = RendererManager.get_lang_by_scope_name(view.scope_name(0))
     text = view.substr(sublime.Region(0, view.size()))
     html_part = RendererManager.render_text(
         fullpath, lang, text,
         post_process_func=cls.render_text_postprocess_exporting
     )
     setting = Setting.instance()
     return template(setting.export_options['template_name'],
                     mathjax_enabled=setting.mathjax_enabled,
                     filename=os.path.basename(fullpath),
                     dirname=os.path.dirname(fullpath),
                     html_part=html_part
     )
    def run(self, edit):
        view = self.view
        try:
            html_content = RendererManager.render_view_to_string(view)
            setting = Setting.instance()
            target_folder = setting.export_options['target_folder']

            if target_folder is not None:
                fullpath = self.view.file_name() or ''
                timestamp_format = setting.export_options['timestamp_format']

                if (not os.path.exists(fullpath) and target_folder == ".") or \
                not os.path.isdir(target_folder):
                    target_folder = None
                elif target_folder == '.':
                    fn_base, _ = os.path.splitext(fullpath)
                    html_fn = '%s%s.html' % (
                        fn_base,
                        time.strftime(timestamp_format, time.localtime()))
                elif not os.path.exists(fullpath):
                    html_fn = os.path.join(target_folder, 'Untitled%s.html' % \
                        time.strftime(timestamp_format, time.localtime()))
                else:
                    fn_base = os.path.basename(fullpath)
                    html_fn = os.path.join(target_folder, '%s%s.html' % \
                        (fn_base, time.strftime(timestamp_format, time.localtime())))

            if target_folder is None:
                with tempfile.NamedTemporaryFile(delete=False,
                                                 suffix='.html') as f:
                    html_fn = f.name

            with codecs.open(html_fn, 'w', encoding='utf-8') as html_file:
                html_file.write(html_content)

            # Copy contents to clipboard
            if setting.export_options['copy_to_clipboard']:
                sublime.set_clipboard(html_content)
                sublime.status_message('Exported result copied to clipboard')
            # Open output file if necessary
            if setting.export_options['open_after_exporting']:
                log.info('Launching web browser for %s', html_fn)
                launching_web_browser_for_url(html_fn)

        except NotImplementedError:
            pass
        except:
            log.exception("Error while exporting")
Esempio n. 16
0
def handler_view(buffer_id):
    # A browser refresh always get the latest result
    f = Future(render_text_by_buffer_id, buffer_id)
    sublime.set_timeout(f, 0)
    entry = f.result()
    entry = entry or RenderedMarkupCache.instance().get_entry(buffer_id)
    if entry is None:
        return bottle.HTTPError(
            404,
            'buffer_id(%d) is not valid (not open or unsupported file format)' % buffer_id
        )
    setting = Setting.instance()
    return template(setting.html_template_name,
                    buffer_id=buffer_id,
                    ajax_polling_interval=setting.ajax_polling_interval,
                    mathjax_enabled=setting.mathjax_enabled,
                    **entry)
Esempio n. 17
0
def handler_view(buffer_id):
    # A browser refresh always get the latest result
    f = Future(render_text_by_buffer_id, buffer_id)
    sublime.set_timeout(f, 0)
    entry = f.result()
    entry = entry or RenderedMarkupCache.instance().get_entry(buffer_id)
    if entry is None:
        return bottle.HTTPError(
            404,
            'buffer_id(%d) is not valid (not open or unsupported file format)'
            % buffer_id)
    setting = Setting.instance()
    return template(setting.html_template_name,
                    buffer_id=buffer_id,
                    ajax_polling_interval=setting.ajax_polling_interval,
                    mathjax_enabled=setting.mathjax_enabled,
                    **entry)
    def run(self, edit):
        view = self.view
        try:
            html_content = RendererManager.render_view_to_string(view)
            setting = Setting.instance()
            target_folder = setting.export_options['target_folder']

            if target_folder is not None:
                fullpath = self.view.file_name() or ''
                timestamp_format = setting.export_options['timestamp_format']

                if (not os.path.exists(fullpath) and target_folder == ".") or \
                not os.path.isdir(target_folder):
                    target_folder = None
                elif target_folder == '.':
                    fn_base, _ = os.path.splitext(fullpath)
                    html_fn = '%s%s.html' % (fn_base, time.strftime(timestamp_format,
                        time.localtime()))
                elif not os.path.exists(fullpath):
                    html_fn = os.path.join(target_folder, 'Untitled%s.html' % \
                        time.strftime(timestamp_format, time.localtime()))
                else:
                    fn_base = os.path.basename(fullpath)
                    html_fn = os.path.join(target_folder, '%s%s.html' % \
                        (fn_base, time.strftime(timestamp_format, time.localtime())))

            if target_folder is None:
                with tempfile.NamedTemporaryFile(delete=False, suffix='.html') as f:
                    html_fn = f.name

            with codecs.open(html_fn, 'w', encoding='utf-8') as html_file:
                html_file.write(html_content)

            # Copy contents to clipboard
            if setting.export_options['copy_to_clipboard']:
                sublime.set_clipboard(html_content)
                sublime.status_message('Exported result copied to clipboard')
            # Open output file if necessary
            if setting.export_options['open_after_exporting']:
                log.info('Launching web browser for %s', html_fn)
                launching_web_browser_for_url(html_fn)

        except NotImplementedError:
            pass
        except:
            log.exception("Error while exporting")
    def run(self, edit, immediate=True):
        buffer_id = self.view.buffer_id()
        # Is opened in a tab?
        opened = False
        for view in self.view.window().views():
            if view.buffer_id == buffer_id:
                opened = True
                break
        if not opened:
            RendererManager.queue_view(self.view, immediate=True)

        url = 'http://localhost:%d/view/%d' % (Setting.instance().server_port, buffer_id)
        # Open with the default browser
        log.info('Launching web browser for %s', url)
        launching_web_browser_for_url(
            url,
            success_msg_default='Preview launched in default web browser',
            success_msg_user='******'
        )
    def run(self, edit, immediate=True):
        buffer_id = self.view.buffer_id()
        # Is opened in a tab?
        opened = False
        for view in self.view.window().views():
            if view.buffer_id == buffer_id:
                opened = True
                break
        if not opened:
            RendererManager.queue_view(self.view, immediate=True)

        url = 'http://localhost:%d/view/%d' % (Setting.instance().server_port,
                                               buffer_id)
        # Open with the default browser
        log.info('Launching web browser for %s', url)
        launching_web_browser_for_url(
            url,
            success_msg_default='Preview launched in default web browser',
            success_msg_user='******')
 def on_post_save(self, view):
     if view.is_scratch() or not Setting.instance().refresh_on_saved:
         return
     self.delayed_views_worker.queue(view, preemptive=True)
 def restart_server(self):
     global g_server
     if g_server is not None:
         self.stop_server()
     setting = Setting.instance()
     g_server = Server.Server(host=setting.server_host, port=setting.server_port)
 def subscribe_setting_events(self):
     Setting.instance().subscribe('changing', self.on_setting_changing)
     Setting.instance().subscribe('changed', self.on_setting_changed)
 def __init__(self):
     setting = Setting.instance()
     self.on_setting_changing(setting)
 def _on_post_save(self, view):
     if not Setting.instance().refresh_on_saved:
         return
     self.throttle.put(view, preemptive=True)
 def on_post_save(self, view):
     if view.is_scratch() or not Setting.instance().refresh_on_saved:
         return
     self.delayed_views_worker.queue(view, preemptive=True)
 def try_download_mathjax(self, setting=None):
     if setting is None:
         setting = Setting.instance()
     if setting.mathjax_enabled:
         OnDemandDownloader.on_demand_download_mathjax(setting)
Esempio n. 28
0
 def callback():
     setting = Setting.instance()
     if not setting.refresh_on_modified:
         return
     timeout = setting.refresh_on_modified_delay / 1000.0
     self.throttle.put(view, preemptive=False, timeout=timeout)
Esempio n. 29
0
 def on_post_save(self, view):
     if not Setting.instance().refresh_on_saved:
         return
     self.throttle.put(view, preemptive=True)
        g_server = Server(host=setting.server_host, port=setting.server_port)

    def stop_server(self):
        global g_server
        if g_server is not None:
            g_server.stop()
            g_server = None

    def try_download_mathjax(self, setting=None):
        if setting is None:
            setting = Setting.instance()
        if setting.mathjax_enabled:
            OnDemandDownloader.on_demand_download_mathjax()


def unload_handler():
    log.info('Unloading plugin...')
    # Cleaning up resources...
    PluginManager.instance().stop_server()
    # Stopping renderer worker
    RendererManager.WORKER.stop()


# Setting must be the first to initialize.
Setting.instance().init()
PluginManager.instance().subscribe_setting_events()
RendererManager.init()
RendererManager.WORKER.start()
PluginManager.instance().restart_server()
PluginManager.instance().try_download_mathjax()
 def on_modified(self, view):
     if view.is_scratch() or not Setting.instance().refresh_on_modified:
         return
     self.delayed_views_worker.queue(view, preemptive=False,
                                     timeout=float(Setting.instance().refresh_on_modified_delay) / 1000)
 def callback():
     setting = Setting.instance()
     if not setting.refresh_on_modified:
         return
     timeout = setting.refresh_on_modified_delay / 1000.0
     self.throttle.put(view, preemptive=False, timeout=timeout)
 def subscribe_setting_events(self):
     Setting.instance().subscribe('changing', self.on_setting_changing)
     Setting.instance().subscribe('changed', self.on_setting_changed)
 def __init__(self):
     setting = Setting.instance()
     self.on_setting_changing(setting)
 def try_download_mathjax(self, setting=None):
     if setting is None:
         setting = Setting.instance()
     if setting.mathjax_enabled:
         OnDemandDownloader.on_demand_download_mathjax()
        g_server = Server(host=setting.server_host, port=setting.server_port)

    def stop_server(self):
        global g_server
        if g_server is not None:
            g_server.stop()
            g_server = None

    def try_download_mathjax(self, setting=None):
        if setting is None:
            setting = Setting.instance()
        if setting.mathjax_enabled:
            OnDemandDownloader.on_demand_download_mathjax()


def unload_handler():
    log.info('Unloading plugin...')
    # Cleaning up resources...
    PluginManager.instance().stop_server()
    # Stopping renderer worker
    RendererManager.WORKER.stop()


# Setting must be the first to initialize.
Setting.instance().init()
PluginManager.instance().subscribe_setting_events()
RendererManager.init()
RendererManager.WORKER.start()
PluginManager.instance().restart_server()
PluginManager.instance().try_download_mathjax()