From 385681d774dec40cc8ab866324bcb7cf856bb53c Mon Sep 17 00:00:00 2001 From: Yassir BARCHI Date: Wed, 1 Mar 2017 17:39:15 +0100 Subject: [PATCH] Initial release --- .gitignore | 2 + CHANGELOG | 3 + README.md | 71 ++++++- docs/images/img1.png | Bin 0 -> 52507 bytes docs/images/img2.png | Bin 0 -> 27480 bytes docs/images/img3.png | Bin 0 -> 25090 bytes markdown_fenced_code_tabs.py | 379 +++++++++++++++++++++++++++++++++++ setup.cfg | 2 + setup.py | 25 +++ 9 files changed, 481 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG create mode 100644 docs/images/img1.png create mode 100644 docs/images/img2.png create mode 100644 docs/images/img3.png create mode 100644 markdown_fenced_code_tabs.py create mode 100644 setup.cfg create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 72364f9..1a2d967 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.DS* + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..01f7100 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,3 @@ +## 0.1.0 (2017-03-01) + + * Initial release \ No newline at end of file diff --git a/README.md b/README.md index ea806ab..b8f46a4 100644 --- a/README.md +++ b/README.md @@ -1 +1,70 @@ -# mkdocs-fenced-code-tabs \ No newline at end of file +[![PyPI][pypi-image]][pypi-link] + + [pypi-image]: https://img.shields.io/pypi/v/markdown-fenced-code-tabs.svg + [pypi-link]: https://pypi.python.org/pypi/markdown-fenced-code-tabs + +# Markdown Code Tabs Extension + +Generates Bootstrap HTML Tabs for Consecutive Markdown Fenced Code Blocks + +```md + ## Tabs + + ```curl + $ curl -O wget http://example.com/pk.zip + ``` + + ```wget + $ wget http://example.com/pk.zip + ``` + + ## Single block + + ``` + $ ls -lisa + ``` +``` + +Becomes: + +![Generated result](docs/images/img1.png) + +## Installation + +Install the latest version with `pip`: +```sh +pip install markdown-fenced-code-tabs +``` + +## MkDocs Usage + +```yml +markdown_extensions: + - markdown_fenced_code_tabs: + single_block_as_tab: True +``` + +## Options + +### `single_block_as_tab` +If `True`, the extension will render a single code block as a tab. Default is `False`. + +`single_block_as_tab: True` generates: + +![True single_block_as_tab](docs/images/img2.png) + +`single_block_as_tab: False` generates: + +![False single_block_as_tab](docs/images/img3.png) + +## License + +MIT License + +Copyright (c) 2017 Yassir Barchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/docs/images/img1.png b/docs/images/img1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b7207351cad334794fc64638eb213811351d17e GIT binary patch literal 52507 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 H$FF|@%SYaE literal 0 HcmV?d00001 diff --git a/docs/images/img2.png b/docs/images/img2.png new file mode 100644 index 0000000000000000000000000000000000000000..f1916921a3f44cdc7465ba7d852f50dc980baafc GIT binary patch literal 27480 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 literal 0 HcmV?d00001 diff --git a/markdown_fenced_code_tabs.py b/markdown_fenced_code_tabs.py new file mode 100644 index 0000000..9cd5ab6 --- /dev/null +++ b/markdown_fenced_code_tabs.py @@ -0,0 +1,379 @@ +#!/usr/bin/env python + +""" +Fenced Code Tabs Extension for Python Markdown +========================================= + +This extension generates Bootstrap HTML Tabs for consecutive fenced code blocks + +See for documentation. + +Copyright (c) 2017 [Yassir Barchi](https://github.com/yacir). + +License: [MIT](https://opensource.org/licenses/MIT) +""" + +from __future__ import absolute_import +from __future__ import unicode_literals + +from markdown.extensions import Extension +from markdown.preprocessors import Preprocessor + +from markdown.extensions.codehilite import CodeHilite, CodeHiliteExtension +from markdown.extensions.codehilite import parse_hl_lines + +from collections import deque +from collections import OrderedDict as odict + +from time import time + +import re +import random + +# Ordered so that 'data-' attrs of html are in deterministic order. +PARAM_REGEXES = odict(( + ('hl_lines', re.compile(r'''hl_lines=(?P"|')(?P.*?)(?P=quot)''')), +)) + + +# Fenced Code Nav Extension +class FencedCodeTabsPreprocessor(Preprocessor): + + FENCE_BLOCK_REGEX = re.compile(r''' + (?P^(?:~{3,}|`{3,}))[ ]* # Opening ``` or ~~~ + (\{?\.?(?P[\w#.+-]*))?[ ]* # Optional {, and lang + # Optional highlight lines, single- or double-quote-delimited + (hl_lines=(?P"|')(?P.*?)(?P=quot))?[ ]* + }?[ ]*\n # Optional closing } + (?P.*?)(?<=\n) + (?P=fence)[ ]*$''', re.MULTILINE | re.DOTALL | re.VERBOSE) + + TAB_ITEM_PLACE_HOLDER_TEMPLATE = '' + TAB_ITEM_PLACE_HOLDER_REGEX_TEMPLATE = '' + TAB_ITEM_BODY_WRAP_ESCAPE = '
%s
' + + def __init__(self, md, code_fence_tabs_config=None): + # Initialize the Preprocessor + self.tab_items = deque() + + self.code_fence_tabs_config = code_fence_tabs_config + + self.checked_for_codehilite = False + self.codehilite_conf = {} + + placeholder_dict = self._generate_tab_item_placeholder() + self.tab_item_placeholder = placeholder_dict['placeholder'] + self.tab_item_placeholder_regex = placeholder_dict['placeholder_regex'] + + super(FencedCodeTabsPreprocessor, self).__init__(md) + + def _generate_tab_item_placeholder(self): + + # used to create a unique signature + current_time = time() + + return { + 'placeholder': self.TAB_ITEM_PLACE_HOLDER_TEMPLATE.format(current_time), + 'placeholder_regex': re.compile(self.TAB_ITEM_PLACE_HOLDER_REGEX_TEMPLATE.format(current_time)) + } + + @staticmethod + def _filter_content(content): + + string_block = content.replace(u'\u2018', '‘') + string_block = string_block.replace(u'\u2019', '’') + string_block = string_block.replace(u'\u201c', '“') + string_block = string_block.replace(u'\u201d', '”') + string_block = string_block.replace(u'\u2013', '–') + string_block = string_block.replace(u'\xa0', '') + + try: + string_block = string_block.decode('ascii', 'remove') + except: + string_block = content + + return string_block + + @staticmethod + def _escape(txt): + # HTML-entity-ize common characters + txt = txt.replace('&', '&') + txt = txt.replace('<', '<') + txt = txt.replace('>', '>') + txt = txt.replace('"', '"') + return txt + + def _identify_code_tabs(self, block_str): + + text = FencedCodeTabsPreprocessor._filter_content(block_str) + + while True: + m = self.FENCE_BLOCK_REGEX.search(text) + if m: + + first_line = text[m.start():].split('\n')[0] + + kwargs = {} + for param, regex in PARAM_REGEXES.items(): + param_m = regex.search(first_line) + if param_m: + if param_m.group(param): + kwargs[param] = param_m.group(param) + elif (not param_m.group(param) is None) and param in PARAM_DEFAULTS: + kwargs[param] = PARAM_DEFAULTS[param] + else: + raise Exception("{} needs an argument within \n{}".format(param, first_line)) + + lang = '' + + if m.group('lang') and m.group('lang') not in PARAM_REGEXES: + lang = m.group('lang') + + if self.codehilite_conf: + highliter = CodeHilite( + m.group('code'), + linenums=self.codehilite_conf['linenums'][0], + guess_lang=self.codehilite_conf['guess_lang'][0], + css_class=self.codehilite_conf['css_class'][0], + style=self.codehilite_conf['pygments_style'][0], + lang=(m.group('lang') or None), + noclasses=self.codehilite_conf['noclasses'][0], + hl_lines=parse_hl_lines(kwargs.get('hl_lines')) + ) + + code = highliter.hilite() + else: + code = self.TAB_ITEM_BODY_WRAP_ESCAPE % (lang, + self._escape(m.group('code'))) + + self.tab_items.append(FencedCodeTabs(lang, lang, code)) + + placeholder = self.tab_item_placeholder.format(len(self.tab_items) - 1) + + text = "{}\n{}\n{}".format(text[:m.start()], + placeholder, + text[m.end():]) + + else: + break + + return text + + def _populate_tabs(self, text): + + lines = text.split('\n') + start_tab_index = None + tab_run_length = 0 + tab_set_count = 0 + transformed_lines = '' + num_tabs = len(self.tab_items) + single_block_as_tab = self.code_fence_tabs_config['single_block_as_tab'] + + for line in lines: + m = self.tab_item_placeholder_regex.search(line) + if m: + if start_tab_index is None: + start_tab_index = m.group(1) + + tab_run_length += 1 + + # Ignore the remainder of the loop + continue + else: + + # We have a non tab save to the tab set so let's aggregate + # the tabs into a tab set and generate the corresponding HTML + if len(line.strip()) != 0 and start_tab_index is not None: + + if single_block_as_tab or tab_run_length > 1: + tab_set = FencedCodeTabsSet('tab-' + str(tab_set_count) + '-') + tab_set_count += 1 + + for i in range(0, tab_run_length): + tab = self.tab_items.popleft() + tab_set.add_code_tab(tab) + + # Convert our tab set (and tabs) into the appropriate HTML + tab_html = str(tab_set) + else: + # Convert our single tab into the appropriate HTML + tab_html = str(self.tab_items.popleft()) + + start_tab_index = None + tab_run_length = 0 + transformed_lines += '\n' + self.markdown.htmlStash.store(tab_html, safe=True) + '\n\n' + + transformed_lines += line + '\n' + + # If there are any remaining tabs enclose them in a final last tab set + if len(self.tab_items) > 0: + tab_html = str(self.tab_items[0]) + + if single_block_as_tab or len(self.tab_items) > 1: + tab_set = FencedCodeTabsSet('tab-' + str(num_tabs) + '-') + + for tab in self.tab_items: + tab_set.add_code_tab(tab) + + tab_html = str(tab_set) + + transformed_lines += '\n\n' + self.markdown.htmlStash.store(str(tab_html), safe=True) + '\n\n' + self.tab_items.clear() + + return transformed_lines + + def run(self, lines): + # Check for code hilite extension + if not self.checked_for_codehilite: + for ext in self.markdown.registeredExtensions: + if isinstance(ext, CodeHiliteExtension): + self.codehilite_conf = ext.config + break + + self.checked_for_codehilite = True + + text = self._identify_code_tabs('\n'.join(lines)) + return self._populate_tabs(text).split('\n') + + +# Fenced Code Nav +class FencedCodeTabsSet(object): + + TAB_SET_HANDLE_CONTAINER_TEMPLATE = """ + + """ + TAB_SET_HANDLE_TEMPLATE = """ + + """ + TAB_SET_TAB_CONTAINER_TEMPLATE = """ +
+ {tabs} +
+ """ + TAB_BODY_CONTAINER_TEMPLATE = """ +
+ {tabContent} +
+ """ + RANDOM_ID_CHAR_LENGTH = 15 + + def __init__(self, tab_id): + self.id = tab_id + self.codeTabs = deque() + + def add_code_tab(self, code_tab): + self.codeTabs.append(code_tab) + + def get_code_tabs(self): + return self.codeTabs + + def _get_tab_id(self, tab): + + tab_lang = tab.get_lang() + tab_id = tab_lang + + if tab_lang is None or not tab_lang.strip(): + tab_id = ''. join( + random.SystemRandom().choice( + string.ascii_lowercase + string.digits + ) for _ in range(self.RANDOM_ID_CHAR_LENGTH) + ) + + tab_set_id = self.id + tab_id + + return tab_set_id + + def __str__(self): + tab_active_class = 'active' + tab_handles = '' + tabs = '' + + for tab in self.codeTabs: + + tab_set_id = self._get_tab_id(tab) + lang = tab.get_lang() + + tab_handles += self.TAB_SET_HANDLE_TEMPLATE.format(id=tab_set_id, + isTabActiveClass=tab_active_class, + lang=lang, + ulang=lang[0:1].capitalize() + lang[1:]) + + tabs += self.TAB_BODY_CONTAINER_TEMPLATE.format(id=tab_set_id, + isTabActiveClass=tab_active_class, + lang=tab.get_lang(), + tabContent=str(tab)) + tab_active_class = '' + + tab_set_str = self.TAB_SET_HANDLE_CONTAINER_TEMPLATE.format(tabHandles=tab_handles) + tab_set_str += self.TAB_SET_TAB_CONTAINER_TEMPLATE.format(tabs=tabs) + + return """ +
+ {tabSet} +
+ """.format(tabSet=tab_set_str) + + def __repr__(self): + return self.__str__() + + +# Fenced Code Nav Item +class FencedCodeTabs(object): + + def __init__(self, name, lang, body): + self.name = name + self.lang = lang + self.tabBody = body + + def __str__(self): + return self.tabBody + + def get_lang(self): + return self.lang + + def __repr__(self): + return self.__str__() + + +# Extension Class +class FencedCodeTabsExtension(Extension): + + def __init__(self, *args, **kwargs): + + # Config defaults + self.config = { + 'single_block_as_tab': [False, 'Render a single ``` code block as a tab'], + } + + super(FencedCodeTabsExtension, self).__init__(*args, **kwargs) + + @staticmethod + def to_bool(param): + the_bool = param + + if isinstance(param, str): + the_bool = False if param.lower() is 'false' else True + + return the_bool + + def extendMarkdown(self, md, md_globals): + + # Just in case convert this parameter to a bool if it is sent in as a string + self.setConfig('single_block_as_tab', FencedCodeTabsExtension.to_bool( + self.getConfig('single_block_as_tab') + )) + + md.registerExtension(self) + + # Add FencedCodeTabsPreprocessor to the Markdown instance. + md.preprocessors.add('fenced_code_block', + FencedCodeTabsPreprocessor(md, self.getConfigs()), + '>normalize_whitespace') + + +def makeExtension(*args, **kwargs): + return FencedCodeTabsExtension(*args, **kwargs) diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..224a779 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[metadata] +description-file = README.md \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..77d237f --- /dev/null +++ b/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, find_packages + +setup( + name='markdown-fenced-code-tabs', + version='0.1.0', + url='https://github.com/yacir/markdown-fenced-code-tabs', + py_modules=['markdown_fenced_code_tabs'], + install_requires = ['markdown>=2.6'], + description='Generates Bootstrap HTML Tabs for Consecutive Fenced Code Blocks', + author='Yassir Barchi', + author_email='yassirbarchi@gmail.com', + license='MIT', + keywords = ['fenced code blocks', 'code', 'tabs', 'markdown', 'mkdocs'], + platforms='Operating System :: OS Independent', + long_description="""This extension will convert consecutive fences blocks and convert it to HTML Bootstrap Tabs.""", + classifiers=[ + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 3', + 'Topic :: Text Processing' + ] +) \ No newline at end of file