Extensions for Python Markdown

Overview
Comments
  • Draft: Revise HTML for Tabbed extension

    Draft: Revise HTML for Tabbed extension

    TL;DR: this is a draft to improve on the current implementation of the Tabbed extension. It is by no means ready for implementation. It should serve as a base for further discussion to learn whether we can gravitate towards a better solution than we currently have. There are still problems with this approach.

    The problem

    The Tabbed extension is pretty awesome and many users love it. It provides a lot of value, especially to Material for MkDocs. However, it suffers from some problems that are not solvable without additional JavaScript. The main problem is that on narrower screen sizes, tabs are broken onto separate lines, like here for example "Hide both":

    Bildschirmfoto 2021-08-06 um 22 15 23

    This cannot be mitigated, as the tabs markup is defined as follows:

    <container>
    
      <!-- 1st tab -->
      <input 1 />
      <label 1 />
      <content 1 />
    
      <!-- 2nd tab -->
      <input 2 />
      <label 2 />
      <content 2 />
    
      ...
    </container>
    

    In order to make the labels overflow and scrollable, they would need to be located inside a container. With my knowledge of HTML and CSS, I'm very certain that there's no way to solve this problem without changing the underlying HTML. Furthermore, this would break the current tabs activation approach which relies entirely on co-location of input and label elements.

    A solution attempt

    I've re-architected the tabs HTML and found a solution that allows us to overflow the tabs label container. It looks like this:

    Bildschirmfoto 2021-08-06 um 22 22 05

    https://user-images.githubusercontent.com/932156/128594641-00fb9e53-facc-43f2-8a2f-79c418baad27.mp4

    The HTML can be found here, so just drop it into a *.html file and play with it:

    Show revised HTML
    <html>
      <head>
        <style>
    
          /* --- Boilerplate --- */
    
          body {
            font-family: sans-serif;
            margin: 40px;
          }
    
          body > label {
            display: inline-block;
            padding: 0px 0px 20px;
            cursor: pointer;
          }
    
          article {
            box-shadow: 0 0 10px black;
            overflow: hidden;
          }
    
          :checked ~ article {
            width: 400px;
          }
    
          /* --- Tab label --- */
    
          /* Tab input */
          .tabbed-set input {
            position: absolute;
            width: 0;
            height: 0;
            opacity: 0;
          }
    
          /* Tab label container */
          .tabbed-labels {
            display: flex;
            overflow: auto;
            box-shadow: 0 -1px 0 #CCC inset;
            scroll-snap-type: x proximity;
          }
    
          /* Tab label */
          .tabbed-labels > * {
            display: inline-block;
            padding: 10px;
            white-space: nowrap;
            scroll-snap-align: start;
            cursor: pointer;
          }
    
          /* Hide scrollbar for Chrome, Safari and Opera */
          .tabbed-labels::-webkit-scrollbar {
            display: none;
          }
    
          /* Hide scrollbar for IE, Edge and Firefox */
          .tabbed-labels {
            -ms-overflow-style: none;  /* IE and Edge */
            scrollbar-width: none;  /* Firefox */
          }
    
          /* Tab label is active */
          .tabbed-set input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1),
          .tabbed-set input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2),
          .tabbed-set input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3) {
            color: deeppink;
            box-shadow: 0 -4px 0 deeppink inset;
          }
    
          /* --- Tab content --- */
    
          /* Inactive tab */
          .tabbed-content div {
            display: none;
          }
    
          /* Active tab */
          .tabbed-set input:nth-child(1):checked ~ .tabbed-content > :nth-child(1),
          .tabbed-set input:nth-child(2):checked ~ .tabbed-content > :nth-child(2),
          .tabbed-set input:nth-child(3):checked ~ .tabbed-content > :nth-child(3) {
            display: block;
            padding: 10px;
          }
        </style>
      </head>
      <body>
    
        <!-- Just for the demo -->
        <input type="checkbox" id="limit" checked>
        <label for="limit">Limit width of container</label>
    
        <!-- The interesting stuff -->
        <article>
          <div class="tabbed-set" data-tabs="10:3">
            <input id="__tabbed_10_1" name="__tabbed_10" type="radio" checked>
            <input id="__tabbed_10_2" name="__tabbed_10" type="radio">
            <input id="__tabbed_10_3" name="__tabbed_10" type="radio">
            <div class="tabbed-labels">
              <label for="__tabbed_10_1">A very long title</label>
              <label for="__tabbed_10_2">Another very long title</label>
              <label for="__tabbed_10_3">Well, why can't you just use shorter titles?</label>
            </div>
            <div class="tabbed-content">
              <div><p>Some stuff</p></div> 
              <div><p>More stuff</p></div> 
              <div><p>Even more stuff</p></div> 
            </div>
          </div>
        </article>
        <script>
          const tabs = document.querySelectorAll(".tabbed-set > input")
          for (const tab of tabs) {
            tab.addEventListener("change", () => {
              const label = document.querySelector(`label[for=${tab.id}]`)
              label.scrollIntoView({ behavior: "smooth" })
            })
          }
        </script>
      </body>
    </html>
    

    Here's how it works:

    1. Labels and contents are grouped inside separate containers, allowing for better control of what is shown
    2. input + label elements are targetted with :nth-child(...) selectors. While this seems unnecessarily bloated it is, AFAIK, the only viable approach. Furthermore, when transferred over the wire, it should compress very well, because the markup is largely the same, so gzip and friends should work very efficiently. We can provide, let's say, 10 selectors. That should be sufficient for 99.9% of all use cases. The CSS can be extended if more is necessary.

    Constraints

    1. The print view of Material for MkDocs currently just expands all tabs and renders them below each other. A possible solution for this could be to add the tabs' title as an attribute to the content element and use a pseudo-element to render a label before the content container. I haven't tested this thoroughly, but it might be a start:

      HTML:

      <div class="tabbed-content">
        <div data-title="A very long title"><p>Some stuff</p></div> 
        ...
      </div>
      

      CSS:

      @media print {
        .tabbed-content > ::before {
          content: attr(data-title);
          ...
        }
      }
      

      Downside: some duplicate HTML (i.e. the tabs title), but personally, I could live with that.

    2. We definitely shouldn't start relying on JavaScript for this functionality. The current CSS-only solution is pretty awesome, because it works on slow connections and when the site is partly ready due to missing JavaScript. For a comparison, try Docusaurus's tabs implementation after disabling JavaScript - it doesn't work at all.

    3. We might need to keep the old implementation for older clients for some time.


    Any feedback is greatly appreciated. If you don't wish to go down this path for whatever reason, feel free to close this issue. I've had this on my mind for a long time and wanted to give it a shot and publish it to get some feedback and ideas. I don't expect this to land quickly, since there is some stuff to work out.

    Also, if GitHub issues is not the right place to discuss, feel free to move this to a discussion.

    T: feature S: needs-decision 
    opened by squidfunk 57
  • Add better support for styling task lists

    Add better support for styling task lists

    The generated source makes it impossible to style checkboxes with custom images or webfonts with pseudo elements, as they are not supported by the CSS specification on input elements.

    Placing an empty label next to a checkbox makes this possible, see here: http://stackoverflow.com/questions/3772273/pure-css-checkbox-image-replacement

    An empty label takes no space, as it is an inline element by default. Would be great if this would make it into master, because I would like to incorporate Material Design styled checkboxes into my MkDocs theme: https://github.com/squidfunk/mkdocs-material

    opened by squidfunk 30
  • [PathConverter] Allow setting the scheme in base_url

    [PathConverter] Allow setting the scheme in base_url

    My document uses relative paths (e.g. doc/file.html). I would like to create absolute paths with explicitly setting the scheme by specifying base_path = "file:///foo/bar".

    https://github.com/facelessuser/pymdown-extensions/blob/e7320bf2a92b170b87af194ac1b0f26ed2809f31/pymdownx/pathconverter.py#L103

    The following line returns file:/foo/bar/doc/file.html. Instead it should be /foo/bar/doc/file.html. You should also util.parse_url(base_path) and set scheme from base_path when it is not already set by m.group().

    P: maybe T: feature 
    opened by darkdragon-001 19
  • Update package metadata

    Update package metadata

    Background

    Hello there! The Python packaging ecosystem has standardized on the interface for build backends (PEP 517/PEP 660) and the format for metadata declaration (PEP 621/PEP 631). As a result, the use of setup.py files is now heavily discouraged.

    So, I'm spending my free time updating important projects so that they are modernized and set an example for others 😄

    Summary of changes

    This implements PEP 621, obviating the need for setup.py, setup.cfg, and MANIFEST.in. Support has not landed in setuptools, so builds will now use hatchling. It is quite stable and actively maintained, the only reason the version is 0.x is because 1.0.0 will drop support for Python 2. It's also on the major distribution channels such as conda-forge, Debian, Fedora, etc.

    I've done this for such projects as pipx, all Datadog Agent integrations, etc.

    Notes

    • This fixes the .gitignore file to ignore the entire intended directories, see https://git-scm.com/docs/gitignore#_pattern_format
    • The hatch_build.py can be removed if you want things to be more static
    S: needs-review C: infrastructure 
    opened by ofek 18
  • `Arithmatex`: Allow disabling of

    `Arithmatex`: Allow disabling of "smart dollars"

    Create an operation mode which protects Math Blocks as in LaTeX. Namely it should target advanced users who are aware of the edge cases. It should work well when MathJaX is configured to handle only given elements and not scan the body for delimiters.

    Inline Math

    • \( ... \) / \(...\).
    • $ ... $ / $...$.

    Display Math

    • \[ ... \] / \[...\].
    • $$ ... $$ / $$...$$.

    Take care of cases there is line separating them. Something like:

    $$
    ...
    $$
    

    Environments

    • \begin{envName} ... \end{envName} / \begin{envName}...\end{envName}
    • Separated by line:
    \begin{envName}
    ...
    \end{envName}
    

    There is also the cases environment is embedded inside Display Math:

    $$\begin{envName}
    ...
    \end{envName}$$
    

    Or

    $$ \begin{envName}
    ...
    \end{envName} $$
    

    Dollar Sign

    The Dollar Sign should be escaped: \$ as in LaTeX.

    If needed, I can create an md file as a test case.

    T: feature 
    opened by RoyiAvital 18
  • Generalize SuperFences' special language blocks

    Generalize SuperFences' special language blocks

    It would be nice to have support for mermaid: http://knsv.github.io/mermaid/.

    Currently I have:

    <div class="mermaid">
    graph LR
        A[Square Rect] -- Link text --> B((Circle))
        A --> C(Round Rect)
        B --> D{Rhombus}
        C --> D
    </div>
    
    --8<-- "mermaid.md"
    

    and:

    cat docs/snippets/mermaid.md 
    <script src="https://cdn.rawgit.com/knsv/mermaid/7.0.0/dist/mermaid.min.js"></script>
    <link href="https://cdn.rawgit.com/knsv/mermaid/7.0.0/dist/mermaid.css" rel="stylesheet" type="text/css"/>
    <script type="text/javascript">
    <script>mermaid.initialize({startOnLoad:true});</script>
    </script>
    

    So it would be minimal impact to transform:

    ```mermaid
    
    ```
    

    into:

    <div class="mermaid">
    
    </div>
    
    opened by alexjbush 18
  • Render githubemoji to unicode

    Render githubemoji to unicode

    I'd like a way to convert a :github_emoji: into the unicode character, instead of HTML <img> element. This doesn't seem very complicated given current code (I guess I can pull request if appropriate).

    P: maybe 
    opened by remram44 18
  • Improve accessibility on the Tasklist extension

    Improve accessibility on the Tasklist extension

    I was running a Lighthouse check on our website and realize this accessibility issue, I am using the tasklist extension.

    The checkboxes do not have a label.

    HTML (rendered + code): image

    Lighthouse report: image

    S: triage 
    opened by fabianpiau 17
  • Add complete JS example for UML

    Add complete JS example for UML

    Idea being I can put it in one file like before:

    (function () {
        'use strict';
    
        /**
         * Targets special code or div blocks and converts them to UML.
         * @param {object} converter is the object that transforms the text to UML.
         * @param {string} className is the name of the class to target.
         * @param {object} settings is the settings for converter.
         * @return {void}
         */
        var uml = (function (converter, className, settings) {
    
          var getFromCode = function getFromCode(parent) {
            // Handles <pre><code>
            var text = "";
            for (var j = 0; j < parent.childNodes.length; j++) {
              var subEl = parent.childNodes[j];
              if (subEl.tagName.toLowerCase() === "code") {
                for (var k = 0; k < subEl.childNodes.length; k++) {
                  var child = subEl.childNodes[k];
                  var whitespace = /^\s*$/;
                  if (child.nodeName === "#text" && !whitespace.test(child.nodeValue)) {
                    text = child.nodeValue;
                    break;
                  }
                }
              }
            }
            return text;
          };
    
          var getFromDiv = function getFromDiv(parent) {
            // Handles <div>
            return parent.textContent || parent.innerText;
          };
    
          // Change body to whatever element your main Markdown content lives.
          var body = document.querySelectorAll("body");
          var blocks = document.querySelectorAll("pre." + className + ",div." + className
    
          // Is there a settings object?
          );var config = settings === void 0 ? {} : settings;
    
          // Find the UML source element and get the text
          for (var i = 0; i < blocks.length; i++) {
            var parentEl = blocks[i];
            var el = document.createElement("div");
            el.className = className;
            el.style.visibility = "hidden";
            el.style.position = "absolute";
    
            var text = parentEl.tagName.toLowerCase() === "pre" ? getFromCode(parentEl) : getFromDiv(parentEl);
    
            // Insert our new div at the end of our content to get general
            // typeset and page sizes as our parent might be `display:none`
            // keeping us from getting the right sizes for our SVG.
            // Our new div will be hidden via "visibility" and take no space
            // via `position: absolute`. When we are all done, use the
            // original node as a reference to insert our SVG back
            // into the proper place, and then make our SVG visible again.
            // Lastly, clean up the old node.
            body[0].appendChild(el);
            var diagram = converter.parse(text);
            diagram.drawSVG(el, config);
            el.style.visibility = "visible";
            el.style.position = "static";
            parentEl.parentNode.insertBefore(el, parentEl);
            parentEl.parentNode.removeChild(parentEl);
          }
        });
    
        (function () {
          var onReady = function onReady(fn) {
            if (document.addEventListener) {
              document.addEventListener("DOMContentLoaded", fn);
            } else {
              document.attachEvent("onreadystatechange", function () {
                if (document.readyState === "interactive") {
                  fn();
                }
              });
            }
          };
    
          onReady(function () {
            if (typeof flowchart !== "undefined") {
              uml(flowchart, "uml-flowchart");
            }
    
            if (typeof Diagram !== "undefined") {
              uml(Diagram, "uml-sequence-diagram", { theme: "simple" });
            }
        });
    })();
    
    }());
    

    but now your loader imports uml from a 2nd file and I think that requires a JS build tool?

    T: support C: docs 
    opened by ofek 17
  • Allow slugify function for Tabbed to generate readable anchors

    Allow slugify function for Tabbed to generate readable anchors

    Description

    Currently, ids generated by Tabbed are of the form __tabbed_{tabset}_{tab}, e.g. __tabbed_1_2. Material for MkDocs allows to add anchor links to tabs, which means you can now explicitly link to tabs. However, this generates rather ugly and non-permalink URLs: https://squidfunk.github.io/mkdocs-material/getting-started/#__tabbed_1_2

    Benefits

    Users asked whether the ids can be customized, and immediately the Attribute Lists extension popped up in my head. However, we probably don't need support for Attribute Lists, as the usage of a user-definable slug function would probably be enough. The slug function could be passed the contents of the tab label, and generate a readable anchor.

    Solution Idea

    For example, with this Markdown:

    === "This is a label"
    
        Content
    

    The following id could be generated, which can be used as an anchor:

    ...
    <input id="this-is-a-label" name="__tabbed_1" type="radio">
    ...
    

    The Table of Contents extension also implements this, which is related, as it also generates anchor links. Configuration could possibly look like this:

    markdown_extensions:
      pymdownx.tabbed:
        slugify: !!python/name:pymdownx.slugs.uslugify
    

    And as a shortcut defaulting to the standard Markdown slugify function:

    markdown_extensions:
      pymdownx.tabbed:
        slugify: true
    
    T: feature 
    opened by squidfunk 16
  • feat: block language class

    feat: block language class

    Expose the language name used in code block as css class.

    Our use-case is doing some client-side processing of mermaid js code blocks, where it would be useful to have access to this information in the rendered output.

    C: docs C: highlight C: inlinehilite C: superfences S: needs-review C: tests C: source 
    opened by johanneswuerbach 15
  • Bump @primer/octicons from 17.10.0 to 17.10.1

    Bump @primer/octicons from 17.10.0 to 17.10.1

    Bumps @primer/octicons from 17.10.0 to 17.10.1.

    Release notes

    Sourced from @​primer/octicons's releases.

    v17.10.1

    Patch Changes

    Changelog

    Sourced from @​primer/octicons's changelog.

    17.10.1

    Patch Changes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    S: needs-review C: infrastructure dependencies javascript 
    opened by dependabot[bot] 0
  • Bump rollup from 3.7.5 to 3.9.1

    Bump rollup from 3.7.5 to 3.9.1

    Bumps rollup from 3.7.5 to 3.9.1.

    Release notes

    Sourced from rollup's releases.

    v3.9.1

    3.9.1

    2023-01-02

    Bug Fixes

    • Sort keys in generated dynamic namespace objects (#4780)
    • Do not consider Array.group to be side effect free as the specs have changed (#4779)

    Pull Requests

    v3.9.0

    3.9.0

    2022-12-28

    Features

    • Support ES2022 arbitrary module namespace identifiers (#4770)
    • Add optional version property to plugin type (#4771)

    Pull Requests

    v3.8.1

    3.8.1

    2022-12-23

    Bug Fixes

    • Reduce memory footprint when explicitly passing cache: false (#4762)
    • Fix a crash when preserving modules and reexporting namespaces (#4766)

    Pull Requests

    ... (truncated)

    Changelog

    Sourced from rollup's changelog.

    3.9.1

    2023-01-02

    Bug Fixes

    • Sort keys in generated dynamic namespace objects (#4780)
    • Do not consider Array.group to be side effect free as the specs have changed (#4779)

    Pull Requests

    3.9.0

    2022-12-28

    Features

    • Support ES2022 arbitrary module namespace identifiers (#4770)
    • Add optional version property to plugin type (#4771)

    Pull Requests

    3.8.1

    2022-12-23

    Bug Fixes

    • Reduce memory footprint when explicitly passing cache: false (#4762)
    • Fix a crash when preserving modules and reexporting namespaces (#4766)

    Pull Requests

    3.8.0

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    S: needs-review C: infrastructure dependencies javascript 
    opened by dependabot[bot] 0
  • Add MagicLink support for abbreviated commit IDs

    Add MagicLink support for abbreviated commit IDs

    Description

    Thanks for maintaining these extensions! I have a question about autolinking commit IDs with the MagicLink extension.

    I'm aware that MagicLink already supports autolinking the full 40 character commit IDs (SHAs). It recognizes these commit IDs with regexes:

    https://github.com/facelessuser/pymdown-extensions/blob/25508d4ea52b46c028b37a3cef09555d4f61a876/pymdownx/magiclink.py#L118-L122

    MagicLink converts these full commit IDs into an abbreviated format. The length of these abbreviated commit IDs is the first 7 characters on GitHub and BitBucket, and the first 8 characters on GitLab, as shown in each hash_size item in the PROVIDER_INFO dictionary constant.

    https://github.com/facelessuser/pymdown-extensions/blob/25508d4ea52b46c028b37a3cef09555d4f61a876/pymdownx/magiclink.py#L215

    https://github.com/facelessuser/pymdown-extensions/blob/25508d4ea52b46c028b37a3cef09555d4f61a876/pymdownx/magiclink.py#L436-L439

    So, MagicLink creates links from 40 character commit IDs. Could MagicLink also create links from abbreviated commit IDs?

    Benefits

    Users would be able to link to individual commits by specifying abbreviated commit IDs, which would be helpful when creating changelogs.

    The autolinking behavior of MagicLink would more closely match the behavior of platforms like GitHub. For example, GitHub will autolink the commit ID below, even though it's only the first 7 characters 25508d4:

    25508d4

    And note that the full commit ID is not needed to construct the link. Navigating to https://github.com/facelessuser/pymdown-extensions/commit/25508d4 points to the same commit.

    Solution Idea

    Autolink abbreviated commit IDs, based on the provider:, user:, and repo: settings passed in.

    Using the example above, and the following options:

    • provider: 'github' (the default)
    • user: facelessuser
    • repo: pymdown-extensions
    • repo_url_shorthand: True

    MagicLink would transform 25508d4 into https://github.com/facelessuser/pymdown-extensions/commit/25508d4.

    It seems to me that the main challenge would be parsing the abbreviated commit ID.

    It's more challenging than the full 40 character ID, because there are few words that are 40 characters, but many more words that are 7 characters, so there's a risk of false positives. Because of the risk of false positives, I would recommend disabling autolinking of abbreviated commit IDs by default, and offering a Boolean configuration option to enable it. Maybe something like link_abbreviated_commit_ids.

    P: maybe T: feature 
    opened by br3ndonland 2
  • Bump eslint from 8.30.0 to 8.31.0

    Bump eslint from 8.30.0 to 8.31.0

    Bumps eslint from 8.30.0 to 8.31.0.

    Release notes

    Sourced from eslint's releases.

    v8.31.0

    Features

    • 52c7c73 feat: check assignment patterns in no-underscore-dangle (#16693) (Milos Djermanovic)
    • b401cde feat: add options to check destructuring in no-underscore-dangle (#16006) (Morten Kaltoft)
    • 30d0daf feat: group properties with values in parentheses in key-spacing (#16677) (Francesco Trotta)

    Bug Fixes

    • 35439f1 fix: correct syntax error in prefer-arrow-callback autofix (#16722) (Francesco Trotta)
    • 87b2470 fix: new instance of FlatESLint should load latest config file version (#16608) (Milos Djermanovic)

    Documentation

    • 4339dc4 docs: Update README (GitHub Actions Bot)
    • 4e4049c docs: optimize code block structure (#16669) (Sam Chen)
    • 54a7ade docs: do not escape code blocks of formatters examples (#16719) (Sam Chen)
    • e5ecfef docs: Add function call example for no-undefined (#16712) (Elliot Huffman)
    • a3262f0 docs: Add mastodon link (#16638) (Amaresh S M)
    • a14ccf9 docs: clarify files property (#16709) (Sam Chen)
    • 3b29eb1 docs: fix npm link (#16710) (Abdullah Osama)
    • a638673 docs: fix search bar focus on Esc (#16700) (Shanmughapriyan S)
    • f62b722 docs: country flag missing in windows (#16698) (Shanmughapriyan S)
    • 4d27ec6 docs: display zh-hans in the docs language switcher (#16686) (Percy Ma)
    • 8bda20e docs: remove manually maintained anchors (#16685) (Percy Ma)
    • b68440f docs: User Guide Getting Started expansion (#16596) (Ben Perlmutter)

    Chores

    • 65d4e24 chore: Upgrade @​eslint/eslintrc@​1.4.1 (#16729) (Brandon Mills)
    • 8d93081 chore: fix CI failure (#16721) (Sam Chen)
    • 8f17247 chore: Set up automatic updating of README (#16717) (Nicholas C. Zakas)
    • 4cd87cb ci: bump actions/stale from 6 to 7 (#16713) (dependabot[bot])
    • fd20c75 chore: sort package.json scripts in alphabetical order (#16705) (Darius Dzien)
    • 10a5c78 chore: update ignore patterns in eslint.config.js (#16678) (Milos Djermanovic)
    Changelog

    Sourced from eslint's changelog.

    v8.31.0 - December 31, 2022

    • 65d4e24 chore: Upgrade @​eslint/eslintrc@​1.4.1 (#16729) (Brandon Mills)
    • 35439f1 fix: correct syntax error in prefer-arrow-callback autofix (#16722) (Francesco Trotta)
    • 87b2470 fix: new instance of FlatESLint should load latest config file version (#16608) (Milos Djermanovic)
    • 8d93081 chore: fix CI failure (#16721) (Sam Chen)
    • 4339dc4 docs: Update README (GitHub Actions Bot)
    • 8f17247 chore: Set up automatic updating of README (#16717) (Nicholas C. Zakas)
    • 4e4049c docs: optimize code block structure (#16669) (Sam Chen)
    • 54a7ade docs: do not escape code blocks of formatters examples (#16719) (Sam Chen)
    • 52c7c73 feat: check assignment patterns in no-underscore-dangle (#16693) (Milos Djermanovic)
    • e5ecfef docs: Add function call example for no-undefined (#16712) (Elliot Huffman)
    • a3262f0 docs: Add mastodon link (#16638) (Amaresh S M)
    • 4cd87cb ci: bump actions/stale from 6 to 7 (#16713) (dependabot[bot])
    • a14ccf9 docs: clarify files property (#16709) (Sam Chen)
    • 3b29eb1 docs: fix npm link (#16710) (Abdullah Osama)
    • fd20c75 chore: sort package.json scripts in alphabetical order (#16705) (Darius Dzien)
    • a638673 docs: fix search bar focus on Esc (#16700) (Shanmughapriyan S)
    • f62b722 docs: country flag missing in windows (#16698) (Shanmughapriyan S)
    • 4d27ec6 docs: display zh-hans in the docs language switcher (#16686) (Percy Ma)
    • 8bda20e docs: remove manually maintained anchors (#16685) (Percy Ma)
    • b401cde feat: add options to check destructuring in no-underscore-dangle (#16006) (Morten Kaltoft)
    • b68440f docs: User Guide Getting Started expansion (#16596) (Ben Perlmutter)
    • 30d0daf feat: group properties with values in parentheses in key-spacing (#16677) (Francesco Trotta)
    • 10a5c78 chore: update ignore patterns in eslint.config.js (#16678) (Milos Djermanovic)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    S: needs-review C: infrastructure dependencies javascript 
    opened by dependabot[bot] 0
  • Bump stylelint from 14.16.0 to 14.16.1

    Bump stylelint from 14.16.0 to 14.16.1

    Bumps stylelint from 14.16.0 to 14.16.1.

    Release notes

    Sourced from stylelint's releases.

    14.16.1

    • Fixed: customSyntax resolution with configBasedir (#6536) (@​ybiquitous).
    • Fixed: declaration-block-no-duplicate-properties autofix for !important (#6528) (@​sidx1024).
    • Fixed: function-no-unknown false positives for scroll, -webkit-gradient, color-stop, from, and to (#6539) (@​Mouvedia).
    • Fixed: value-keyword-case false positives for mixed case ignoreFunctions option (#6517) (@​kimulaco).
    • Fixed: unexpected output in Node.js API lint result when any rule contains disableFix: true (#6543) (@​adrianjost).
    Changelog

    Sourced from stylelint's changelog.

    14.16.1

    • Fixed: customSyntax resolution with configBasedir (#6536) (@​ybiquitous).
    • Fixed: declaration-block-no-duplicate-properties autofix for !important (#6528) (@​sidx1024).
    • Fixed: function-no-unknown false positives for scroll, -webkit-gradient, color-stop, from, and to (#6539) (@​Mouvedia).
    • Fixed: value-keyword-case false positives for mixed case ignoreFunctions option (#6517) (@​kimulaco).
    • Fixed: unexpected output in Node.js API lint result when any rule contains disableFix: true (#6543) (@​adrianjost).
    Commits
    • f1146c1 14.16.1
    • 493f562 Prepare release (#6518)
    • 121acce Refactor declaration-block-no-duplicate-properties (#6545)
    • b165c0b Fix unexpected output in Node.js API lint result when any rule contains `di...
    • c0db3fd Fix customSyntax resolution with configBasedir (#6536)
    • cae5880 Add @​linaria/postcss-linaria to list of compatible custom syntaxes (#6535)
    • 4d32d36 Fix function-no-unknown false positives for scroll, -webkit-gradient, `...
    • dacd794 Fix declaration-block-no-duplicate-properties autofix for !important (#6528)
    • e30ec86 Fix value-keyword-case false positives for mixed case ignoreFunctions opt...
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    S: needs-review C: infrastructure dependencies javascript 
    opened by dependabot[bot] 0
Releases(9.10a2)
  • 9.10a2(Dec 17, 2022)

    9.10a2

    • NEW: General blocks no longer use YAML fences for per block options, but instead use a special token to denote the line is part of the config.
    • NEW: Add temporary alpha/beta option yaml_indent to control whether per-block YAML configs use indentation or a leading special character: / for /// syntax and : for ::: syntax (colon_syntax must be true to use ::: syntax).
    • NEW: Ensure that / character can be escaped when registering the blocks extension.
    • FIX: Fix some block nesting issues.
    Source code(tar.gz)
    Source code(zip)
  • 9.10a1(Dec 2, 2022)

  • 9.9(Nov 23, 2022)

    9.9

    • ENHANCE: BetterEm: Further improvements to strong/emphasis handling:
      • Ensure that one or more consecutive * or _ surrounded by whitespace are not considered as a token.
    • ENHANCE: Caret: Apply recent BetterEm improvements to Caret:
      • Fix case where ^^ nested between ^ would be handled in an unexpected way.
      • Ensure that one or more consecutive ^ surrounded by whitespace are not considered as a token.
    • ENHANCE: Tilde: Apply recent BetterEm improvements to Tilde:
      • Fix case where ~~ nested between ~ would be handled in an unexpected way.
      • Ensure that one or more consecutive ~ surrounded by whitespace are not considered a token.
    • ENHANCE: Mark: Apply recent BetterEm improvements to Mark:
      • Ensure that one or more consecutive = surrounded by whitespace are not considered a token.
    Source code(tar.gz)
    Source code(zip)
  • 9.8(Nov 8, 2022)

    9.8

    • NEW: Formally declare support for Python 3.11.
    • FIX: BetterEm: Fix case where ** nested between * would be handled in an unexpected way.
    Source code(tar.gz)
    Source code(zip)
  • 9.7(Oct 22, 2022)

    9.7

    • NEW: Tabbed: Add new syntax to allow forcing a specific tab to be selected by default.
    • NEW: Snippets: Add a new option to pass arbitrary HTTP headers.
    • NEW: Snippets: Allow specifying sections in a snippet and including just the specified section.
    Source code(tar.gz)
    Source code(zip)
  • 9.6(Sep 30, 2022)

    9.6

    • NEW: Highlight: Allow greater granularity of specifying where language guessing takes place via guess_lang option (e.g. block vs inline).
    • NEW: Tabbed: Add options for generating tab IDs from tab titles.
    • NEW: Snippets: Add support for specifying specific lines for Snippets.
    • NEW: Snippets: Commenting out files in block format no longer requires a space directly after ;.
    • NEW: Snippets: A new sane way to escape snippets is now available.
    Source code(tar.gz)
    Source code(zip)
  • 9.5(Jun 6, 2022)

    9.5

    • NEW: InlineHilite: Custom inline code block formatters can now be forced to raise an exception by raising a InlineHiliteException.
    • NEW: Snippets: Add new options to handle importing snippets from URL.
    • NEW: Snippets: Snippets will only swallow missing file errors (unless check_paths is enabled), all other errors will be propagated up.
    • NEW: Snippets: When a file or URL is missing, raise SnippetMissingError instead of IOError.
    • FIX: Snippets: Small issues related to recursive inclusion of snippets.
    Source code(tar.gz)
    Source code(zip)
  • 9.4(Apr 25, 2022)

    9.4

    • NEW: Highlight: Changes in order to support Pygments 2.12+. If using Pygments and a version less than 2.12 is installed, Highlight will raise an exception.
    Source code(tar.gz)
    Source code(zip)
  • 9.3(Mar 19, 2022)

    9.3

    • NEW: B64: Allow SVG to be encoded and inlined.
    • NEW: PathConverter: Add option to use file:// prefix on absolute paths.
    • FIX: Highlight: Ensure that extend_pygments_lang is not case sensitive regarding language names.
    Source code(tar.gz)
    Source code(zip)
  • 9.2(Feb 11, 2022)

    9.2

    • NEW: Drop Python 3.6 support and formally add Python 3.10 support.
    • NEW: Highlight: Add pygments_lang_option to enable attaching language classes to Pygments code blocks.
    • NEW: SuperFences: Custom fence validators and formatters can now be forced to raise an exception by raising a SuperFencesException.
    • NEW: Keys: Add power and fingerprint keys.
    • FIX: SuperFences: Fix case where custom fence in a blockquote was not gracefully handled.
    • FIX: Arithmatex: fix issue where if you limit the inline or block syntax to specific input types, access to certain matched groups could cause an error.
    Source code(tar.gz)
    Source code(zip)
  • 9.1(Nov 14, 2021)

    9.1

    • NEW: Highlight: If linenums is enabled globally via the highlight extension, and a code block specifies a line number of zero (e.g. SuperFences), disable line numbers for that code block.
    • FIX: Snippets: Add missing documentation for auto_append feature that was added in 8.2.
    • FIX: Highlight: When attr_list is enabled, attributes were not properly added to Pygments code blocks in the table format. (#1505)
    Source code(tar.gz)
    Source code(zip)
  • 9.0(Sep 29, 2021)

    9.0

    Please see Migration Notes for details on upgrading to 9.0.

    • NEW: Arithmatex: Wrap MathJax "script" format (non-preview) with a container element just like all other Arithmatex output formats.
    • NEW: Arithmatex: MathJax (non-generic) form's container element now has the arithmatex class added just like everywhere else.
    • NEW: Arithmatex: Add options to override HTML element container type of inline and block math.
    • NEW: Arithmatex: Add new formatter functions intended to replace old math fenced/inline block formatters. New formatter functions are configurable. All others are marked as deprecated and will be removed at some future date.
    • NEW: Emoji: Upgraded Twitter emoji database to support latest emoji. It is a known issue that Twitter has :man_in_santa_hat: and :mx_claus: backwards -- same for :mrs_claus: and :woman_in_santa_hat:. That is on Twitter's side, not ours.
    • NEW: Highlight: Add support for the Pygments option linespans.
    • NEW: Highlight: Add support for Pygments option lineanchors.
    • NEW: Highlight: Add support for Pygments option anchorlinenos.
    • NEW: Highlight: Remove legacy_no_wrap_code option.
    • NEW: Add support for generating title headers pulled from the Pygments lexer for code blocks. Feature can be enabled via the new auto_title option. If a specific name is not preferred, these names can be overridden via a user defined mapping called auto_title_map.
    • NEW: SuperFences: Allow setting a title, or overriding an auto title via the new title option in a fenced code header.
    • NEW: SuperFences: Allow adding ID and arbitrary data- attributes on Pygments code blocks. The latter requires the attr_list extension to be enabled.
    • NEW: SuperFences: Removed old deprecated option highlight_code which no longer did anything.
    • NEW: SuperFences: Remove legacy code meant to help with transitioning to new custom fence function format.
    • NEW: Tabbed: New alternate style that allows for a scrollable tabs if they overflow. Feature is experimental, see docs for more information.
    • NEW: Slugs: Add new configurable slugify function that aims to replace all other slugify methods. Deprecate uslugify, uslugify_encoded, uslugify_case, uslugify_case_encoded, gfm, and gfm_encoded. slugify takes parameters returning a function that performs the desired slug handling. slugify adds new options case="fold" for case folding and normalize='<normalize format here>' (uses NFC by default).
    • FIX: BetterEm: Fix some complex cases related to "smart" logic. (#1413)
    • FIX: EscapeAll: Fix issue where an escaped HTML entity may end up with incorrect slug and incorrect table of content entry.
    • FIX: Highlight: Fix issue that occurs when showing only nth line numbers and using pymdownx-inline. Lines not showing a line number would not render with the proper leading space.
    Source code(tar.gz)
    Source code(zip)
  • 8.2(May 8, 2021)

    8.2

    • NEW: Snippets: now accepts a list of base paths which will be resolved in the order they are specified. Compatibility is present with legacy behavior, and a single string path will still be accepted.
    • NEW: Snippets: allow for specifying certain snippets to auto-append to every file. Useful for appending abbreviations, reference links, etc.
    • NEW: Snippets: a snippet base path can be a full path to a file. When a base path is a full path to a file, only that file will be included from the specified folder. This allows for targeting a one off file outside of the normal snippet paths(s).
    • NEW: MagicLink: add GitHub Discussions support to MagicLink. Can now use ?<num> to link discussions. Full discussion links will also be shortened if shortening is enabled. (#1187)
    • NEW: MagicLink: add new normalize_issue_symbols option to make issues, pull request, and discussion links all render with # instead of #, !, and ? respectively. Input syntax is still the same. Great if you want a GitHub style look where all issue types are just rendered with #.
    • FIX: MagicLink: documentation will not render links with special icons added via CSS so as not to confuse users that may think that is part of MagicLink. While possible with CSS, MagicLink provides no CSS automatically.
    • FIX: Tabbed & Details: Fix corner case with lists. (#1225)
    • FIX: Fix issue with unescaping logic in code blocks.
    Source code(tar.gz)
    Source code(zip)
  • 8.1.1(Jan 26, 2021)

    8.1.1

    • FIX: Ensure content immediately before Details content or Tabbed content gets preserved.
    • FIX: StripHTML: Fix some corner cases related to stripping comments.
    Source code(tar.gz)
    Source code(zip)
  • 8.1(Dec 24, 2020)

    8.1

    • NEW: Drop support for Python 3.5.
    • NEW: Officially support Python 3.9.
    • NEW: Tabbed titles can now have simple Markdown in them which can be parsed and rendered (like emoji, bold, etc.).
    • FIX: Avoid parsing script tags in PathConverter and B64 extensions.
    Source code(tar.gz)
    Source code(zip)
  • 8.0.1(Sep 28, 2020)

  • 8.0(Aug 11, 2020)

    8.0

    Please see Release Notes for details on upgrading to 8.0.

    • NEW: Added SaneHeaders extension.
    • NEW: SuperFences & InlineHilite: gracefully handle failing custom formatters and/or validators. Users should add their own debug code to their formatter/validator if they suspect it isn't working.
    • NEW: SuperFences: if a custom fence validator fails, try the next custom fence until all are exhausted.
    • NEW: SuperFences: no longer allow custom options in the form key= (no value). Only keys with values or keys with no value and no = are accepted. Keys with no value will now assume the value to be the key name.
    • NEW: SuperFences: if attr_list extension is enabled, fenced code that use brace attribute list style headers (```{lang #id .class attr=value}) will attach arbitrary attributes that are included in the header to the code element.
    • NEW: SuperFences: when Pygments is disabled, options (such as linenums) included in fenced code headers no longer do anything. If attr_list is enabled, and the brace header is used, such options will be treated as HTML attributes. JavaScript highlighter options should be defined in the brace header form with attr_list enabled in order to generate appropriate, compatible HTML with the chosen JavaScript highlighter.
    • NEW: SuperFences: backwards incompatible changes where made to custom fence API. See Release Notes for instructions on how to migrate to the new API. Some temporary support for most of the old format is in place, but is deprecated.
    • NEW: SuperFences: has removed legacy code tab feature. Associated legacy_tab_classes option has been removed. Please use the Tabbed extension to create general purpose tabs for code blocks or other content.
    • NEW: Highlight: add new option language_prefix which controls the prefix applied to language classes when Pygments is not being used.
    • NEW: Highlight: A new option called code_attr_on_pre was added to the Highlight extension and controls whether language classes, and any ids, attributes, and classes that are defined in fenced code attribute list style headers, are attached to the code element or pre element. This has effect when using Pygments.
    • NEW: Highlight: option linenums now defaults to None and accepts None, True, or False. None is disabled by default, but can be enabled per code block. True enables line numbers globally. False disables globally and cannot be enabled manually per code block.
    • NEW: ExtraRawHTML: remove extension.
    • FIX: Fix issues with complex emphasis combinations in BetterEm.
    • FIX: Details: fix corner cases related to extension and lists.
    • FIX: Tabbed: fix corner cases related to extension and lists.
    • FIX: EscapeAll: Handle HTML entities special.
    • FIX: SuperFences: Fix parameter unpacking bug.
    Source code(tar.gz)
    Source code(zip)
  • 7.1(Apr 18, 2020)

    7.1

    • NEW: SuperFences will now allow number ranges in hl_lines option. (#878)
    • NEW: Emoji extension now requires custom emoji indexes to take an options and md argument. The old non-argument format is deprecated and still accepted, but support for indexes with no arguments will be removed at a future time.
    • NEW: Highlight now allows the specifying of a custom line number class when not using Pygments.
    • FIX: Better Arithmatex patterns. Fix issue #888 which caused a hang due to a regular expression typo. Also ensure #!tex $$..$$ and #!tex begin{}...end{} patterns properly don't match if the tail markers are escaped.
    Source code(tar.gz)
    Source code(zip)
  • 7.0.0(Apr 7, 2020)

    7.0

    Please see Release Notes for details on upgrading to 7.0.

    • NEW: MagicLink will now shorten user name and repository links when link shortening is enabled.
    • NEW: Added MagicLink options social_url_shortener and shortener_user_exclude were added.
    • NEW: UML examples are now demonstrated with Mermaid in documentation.
    • NEW: SuperFences, if using the attribute list format (``` {.lang .additional_class, linenums="1"}) allows adding additional classes. IDs can be added as well, though Pygments generated code blocks do not have a mechanism to actually insert IDs. The first provided class will always be treated as the language class.
    • NEW: Custom SuperFences' formatters should now also include the keyword parametersclasses and id_value to allow injecting classes and IDs via the now supported attribute list format. If a code block defines no additional IDs and classes, the old form will be used. Formatters should include **kwargs at the end to future proof them from future changes.
    • NEW: Deprecate the SuperFences highight_code option. As SuperFences syntax has language classes built right in, disabling the highlight_code option makes little sense. While highlight_code is still accepted, it currently does nothing and will be removed at some future time.
    • NEW: If a custom fence (SuperFences) or inline (InlineHilite) is given the name of *, it will override the default fence logic.
    • NEW: SuperFences and InlineHilite no longer sync settings from CodeHilite.
    • NEW: Add new Tabbed extension for general purpose tabbed content in Markdown.
    • NEW: Deprecate old SuperFences tabbed content feature. This will be removed in 8.0.
    • NEW: SuperFences' tabbed content classes have changed from supferfences-tabs and superfences-content to tabbed-set and tabbed-content respectively. Old style classes can be enabled with the legacy_tab_classes option in SuperFences. This new option will be retired with SuperFences tabbed content feature in 8.0.
    • NEW: Upgrade to Twemoji 12.1.5.
    • NEW: New key codes and key code changes in Keys extension:
      • Added super, left-super, and right-super key codes as an alternative to meta. Aliases lsuper and rsuper were also added.
      • Added the alt-graph key code with altgr alias.
      • Added the following new aliases: lwindows and rwindows for consistency.
      • Added new codes left-meta and right-meta for consistency with other modifiers. Aliases lmeta and rmeta were also added.
      • Added left-option, right-option, left-command, right-command, left-meta, and right-meta codes for consistency across similar modifier keys. Additional aliases were added as well: loption, roption, lopt, ropt, left-opt, right-opt, lcommand, rcommand, lcmd, rcmd, left-cmd, right-cmd, lmeta, and rmeta.
      • alt no longer uses menu, lmenu, and rmenu as key aliases. context-menu now uses the alias menu. context-menu will display with Menu now.
    • FIX: Numerous deprecation warnings associated with the recent release of Python Markdown 3.2.
    • FIX: Ensure ExtraRawHTML raises a deprecation warning.
    Source code(tar.gz)
    Source code(zip)
  • 7.0.0rc2(Mar 30, 2020)

    7.0rc2

    Please see Release Notes for details on upgrading to 7.0.

    • NEW: MagicLink will now shorten user name and repository links when link shortening is enabled.
    • NEW: Added MagicLink options social_url_shortener and shortener_user_exclude were added.
    • NEW: UML examples are now demonstrated with Mermaid in documentation.
    • NEW: SuperFences, if using the attribute list format (``` {.lang .additional_class, linenums="1"}) allows adding additional classes. IDs can be added as well, though Pygments generated code blocks do not have a mechanism to actually insert IDs. The first provided class will always be treated as the language class.
    • NEW: Custom SuperFences' formatters should now also include the keyword parametersclasses and id_value to allow injecting classes and IDs via the now supported attribute list format. If a code block defines no additional IDs and classes, the old form will be used. Formatters should include **kwargs at the end to future proof them from future changes.
    • NEW: Deprecate the SuperFences highight_code option. As SuperFences syntax has language classes built right in, disabling the highlight_code option makes little sense. While highlight_code is still accepted, it currently does nothing and will be removed at some future time.
    • NEW: If a custom fence (SuperFences) or inline (InlineHilite) is given the name of *, it will override the default fence logic.
    • NEW: SuperFences and InlineHilite no longer sync settings from CodeHilite.
    • NEW: Add new Tabbed extension for general purpose tabbed content in Markdown.
    • NEW: Deprecate old SuperFences tabbed content feature. This will be removed in 8.0.
    • NEW: SuperFences' tabbed content classes have changed from supferfences-tabs and superfences-content to tabbed-set and tabbed-content respectively. Old style classes can be enabled with the legacy_tab_classes option in SuperFences. This new option will be retired with SuperFences tabbed content feature in 8.0.
    • NEW: Upgrade to Twemoji 12.1.5.
    • NEW: New key codes and key code changes in Keys extension:
      • Added super, left-super, and right-super key codes as an alternative to meta. Aliases lsuper and rsuper were also added.
      • Added the alt-graph key code with altgr alias.
      • Added the following new aliases: lwindows and rwindows for consistency.
      • Added new codes left-meta and right-meta for consistency with other modifiers. Aliases lmeta and rmeta were also added.
      • Added left-option, right-option, left-command, right-command, left-meta, and right-meta codes for consistency across similar modifier keys. Additional aliases were added as well: loption, roption, lopt, ropt, left-opt, right-opt, lcommand, rcommand, lcmd, rcmd, left-cmd, right-cmd, lmeta, and rmeta.
      • alt no longer uses menu, lmenu, and rmenu as key aliases. context-menu now uses the alias menu. context-menu will display with Menu now.
    • FIX: Numerous deprecation warnings associated with the recent release of Python Markdown 3.2.
    • FIX: Ensure ExtraRawHTML raises a deprecation warning.
    Source code(tar.gz)
    Source code(zip)
  • 7.0.0rc1(Mar 19, 2020)

    7.0rc1

    • NEW: SuperFences, if using the attribute list format (``` {.lang .additional_class, linenums="1"}) allows adding additional classes. IDs can be added as well, though Pygments generated code blocks do not have a mechanism to actually insert IDs. The first provided class will always be treated as the language class.
    • NEW: Custom SuperFences' formatters should now also include the keyword parametersclasses and id_value to allow injecting classes and IDs via the now supported attribute list format. If a code block defines no additional IDs and classes, the old form will be used. Formatters should include **kwargs at the end to future proof them from future changes.
    • NEW: Deprecate the SuperFences highight_code option. As SuperFences syntax has language classes built right in, disabling the highlight_code option makes little sense. While highlight_code is still accepted, it currently does nothing and will be removed at some future time.
    • NEW: If a custom fence (SuperFences) or inline (InlineHilite) is given the name of *, it will override the default fence logic.
    • NEW: SuperFences and InlineHilite no longer sync settings from CodeHilite.
    • NEW: Add new Tabbed extension for general purpose tabbed content in Markdown.
    • NEW: Deprecate old SuperFences tabbed content feature. This will be removed in 8.0.
    • NEW: SuperFences' tabbed content classes have changed from supferfences-tabs and superfences-content to tabbed-set and tabbed-content respectively. Old style classes can be enabled with the legacy_tab_classes option in SuperFences. This new option will be retired with SuperFences tabbed content feature in 8.0.
    • NEW: Upgrade to Twemoji 12.1.5.
    • NEW: New key codes and key code changes in Keys extension:
      • Added super, left-super, and right-super key codes as an alternative to meta. Aliases lsuper and rsuper were also added.
      • Added the alt-graph key code with altgr alias.
      • Added the following new aliases: lwindows and rwindows for consistency.
      • Added new codes left-meta and right-meta for consistency with other modifiers. Aliases lmeta and rmeta were also added.
      • Added left-option, right-option, left-command, right-command, left-meta, and right-meta codes for consistency across similar modifier keys. Additional aliases were added as well: loption, roption, lopt, ropt, left-opt, right-opt, lcommand, rcommand, lcmd, rcmd, left-cmd, right-cmd, lmeta, and rmeta.
      • alt no longer uses menu, lmenu, and rmenu as key aliases. context-menu now uses the alias menu. context-menu will display with Menu now.
    • FIX: Numerous deprecation warnings associated with the recent release of Python Markdown 3.2.
    • FIX: Ensure ExtraRawHTML raises a deprecation warning.
    Source code(tar.gz)
    Source code(zip)
  • 7.0.0b2(Feb 20, 2020)

    7.0b2

    Please see Release Notes for details on upgrading to 7.0.

    • NEW: SuperFences, if using the attribute list format (``` {.lang .additional_class, linenums="1"}) allows adding additional classes. IDs can be added as well, though Pygments generated code blocks do not have a mechanism to actually insert IDs. The first provided class will always be treated as the language class.
    • NEW: Custom SuperFences' formatters should now also include the keyword parametersclasses and id_value to allow injecting classes and IDs via the now supported attribute list format. If a code block defines no additional IDs and classes, the old form will be used. Formatters should include **kwargs at the end to future proof them from future changes.
    • NEW: Deprecate the SuperFences highight_code option. As SuperFences syntax has language classes built right in, disabling the highlight_code option makes little sense. While highlight_code is still accepted, it currently does nothing and will be removed at some future time.
    • NEW: If a custom fence (SuperFences) or inline (InlineHilite) is given the name of *, it will override the default fence logic.- NEW: SuperFences and InlineHilite no longer sync settings from CodeHilite.
    Source code(tar.gz)
    Source code(zip)
  • 7.0.0b1(Feb 13, 2020)

    7.0.0b1

    • NEW: Add new Tabbed extension for general purpose tabbed content in Markdown.
    • NEW: Deprecate old SuperFences tabbed content feature. This will be removed in 8.0.0.
    • NEW: SuperFences' tabbed content classes have changed from supferfences-tabs and superfences-content to tabbed-set and tabbed-content respectively. Old style classes can be enabled with the legacy_tab_classes option in SuperFences. This new option will be retired with SuperFences tabbed content feature in 8.0.0.
    • FIX: Numerous deprecation warnings associated with the recent release of Python Markdown 3.2.
    Source code(tar.gz)
    Source code(zip)
  • 6.3.0(Feb 7, 2020)

    6.3.0

    • NEW: pymdownx.extrarawhtml is now deprecated in favor of Python Markdown's md_in_html extension found in the 3.2 release.
    • NEW: When using Pygments 2.4+, code under pre elements will also be wrapped in code blocks: #!html <pre><code></code></pre>. legacy_no_wrap_code option has been provided as a temporary way to get the old behavior during the transition period, the option will be removed in the future.
    • NEW: Remove deprecated version and version_info.
    • FIX: Allow single word hostnames in MagicLink auto-link.
    Source code(tar.gz)
    Source code(zip)
  • 6.2.1(Dec 22, 2019)

  • 6.2.0(Nov 16, 2019)

    6.2.0

    • NEW: Upgrade Twemoji to use 12.1.3.
    • NEW: Downgrade and lock EmojiOne version 2.2.7. 2.2.7 is the last truly free version of EmojiOne. This is the safest version that users should use. EmojiOne will not be updated anymore as they are now JoyPixels and have a license that is not that permissible. We've reverted support for any version greater than 2.2.7 to ensure we don't accidentally cause a user to improperly use JoyPixels' assets.
    • NEW: Drop specialized to_awesome generator for EmojiOne.
    • FIX: MagicLink: match the auto-link pattern in the current Markdown package.
    • FIX: Fix fenced math escape issue when using MathJax script output format.
    Source code(tar.gz)
    Source code(zip)
  • 6.1.0(Sep 1, 2019)

    6.1.0

    • NEW: Upgrade Twemoji to 12.1.2 using the latest JoyPixels' (formally EmojiOne) short name index in @JoyPixels/emoji-toolkit 5.0.4.
    • NEW: Upgrade EmojiOne to 4.5.0 to the last release in the 4+ series. EmojiOne was rebranded as JoyPixels, but while the index is licensed under MIT, the image assets are no longer as permissible as they once were. The Emoji extension will only reference the last release under the older more permissible license (4.5.0). The option to use the CDN with EmojiOne 2.7 is still available as well which used an even more permissible license.
    • NEW: Upgrade Gemoji to 3.0.1.
    • NEW: version and version_info are now accessible via the more standard form __version__ and _version_info__. The old format, while available, is now deprecated.
    • FIX: Fix GitHub emoji CDN links to use their latest.
    • FIX: Fix issue where entities in the form &#35; would trigger MagicLink's shorthand for issues.
    • FIX: Don't install tests when installing package.
    • FIX: Fix for BetterEm case **Strong*em,strong***.
    • FIX: Fixes for non-word character boundary cases in BetterEm, Caret, Mark, and Tilde extensions.
    Source code(tar.gz)
    Source code(zip)
  • 6.0.0(Oct 9, 2018)

    6.0.0

    Please see Release Notes in documentation for details on upgrading to 6.0.0.

    • NEW: Allow custom inline highlight code blocks. (#380)
    • NEW: SuperFences now has one custom format convention which now also accepts the markdown class object to allow access to meta.
    • NEW: SuperFences no longer adds flow and sequence as default custom fences. Users will need to configure them themselves.
    • NEW: Add new SuperFences formatters in Arithmatex that are compatible with SuperFences' custom fence feature and InlineHilite's custom inline feature. (#380)
    • NEW: Requires Python Markdown 3.0.1 and utilizes the new priority registry when adding extensions and uses the new inline processor API instead of the old methodology.
    • NEW: Better aliases for Twemoji specific emoji.
    • NEW: Upgrade support for EmojiOne to 4.0.0 and Twemoji to 11.2.0.
    • FIX: Fixes to SuperFences behavior of "preserve tabs" vs "normal" operations.
    • FIX: Fixes to PathConverter's output. (#392)
    • FIX: Remove unnecessary path code in B64.
    • FIX: Fix issues with double escaping entities in code blocks after Python Markdown 3.0 update.
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0(Aug 18, 2018)

    5.0.0

    • NEW: Add validator to custom fences so custom options can be used. (#350)
    • NEW: Add global linenums_special option to Highlight extension. Can be overridden per fence in SuperFences. (#360)
    • NEW: Add linenums_style option to set line number output to Pygments table or inline format. Also provide a custom pymdownx-inline format for more sane inline output in regards to copy and paste. See Highlight documentation for more info. (#360)
    • NEW: Remove deprecated Github and PlainHTML extension. Remove deprecated Arithmatex option insert_as_script and deprecated MagicLink option base_repo_url.
    • FIX: Add workaround in Highlight extension for line number alignment issues in Pygments with certain step values. (#360)
    Source code(tar.gz)
    Source code(zip)
  • 4.12.0(Jul 21, 2018)

    4.12.0

    • NEW: Add option to fail if specified snippet isn't found. (#335)
    • FIX: Windows issue with preserve_tabs option in SuperFences. (#328)
    Source code(tar.gz)
    Source code(zip)
Provides syntax for Python-Markdown which allows for the inclusion of the contents of other Markdown documents.

Markdown-Include This is an extension to Python-Markdown which provides an "include" function, similar to that found in LaTeX (and also the C pre-proc

Chris MacMackin 85 Dec 30, 2022
Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files

Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files. Mdformat is a Unix-style command-line tool as well as a Python library.

Executable Books 180 Jan 6, 2023
A markdown lexer and parser which gives the programmer atomic control over markdown parsing to html.

A markdown lexer and parser which gives the programmer atomic control over markdown parsing to html.

stonepresto 4 Aug 13, 2022
A fast yet powerful Python Markdown parser with renderers and plugins.

Mistune v2 A fast yet powerful Python Markdown parser with renderers and plugins. NOTE: This is the re-designed v2 of mistune. Check v1 branch for ear

Hsiaoming Yang 2.2k Jan 4, 2023
A Python implementation of John Gruber’s Markdown with Extension support.

Python-Markdown This is a Python implementation of John Gruber's Markdown. It is almost completely compliant with the reference implementation, though

Python-Markdown 3.1k Dec 30, 2022
A Python implementation of John Gruber’s Markdown with Extension support.

Python-Markdown This is a Python implementation of John Gruber's Markdown. It is almost completely compliant with the reference implementation, though

Python-Markdown 3.1k Dec 31, 2022
Static site generator that supports Markdown and reST syntax. Powered by Python.

Pelican Pelican is a static site generator, written in Python. Write content in reStructuredText or Markdown using your editor of choice Includes a si

Pelican dev team 11.3k Jan 5, 2023
markdown2: A fast and complete implementation of Markdown in Python

Markdown is a light text markup format and a processor to convert that to HTML. The originator describes it as follows: Markdown is a text-to-HTML con

Trent Mick 2.4k Dec 30, 2022
A fast, extensible and spec-compliant Markdown parser in pure Python.

mistletoe mistletoe is a Markdown parser in pure Python, designed to be fast, spec-compliant and fully customizable. Apart from being the fastest Comm

Mi Yu 546 Jan 1, 2023
Lightweight Markdown dialect for Python desktop apps

Litemark is a lightweight Markdown dialect originally created to be the markup language for the Codegame Platform project. When you run litemark from the command line interface without any arguments, the Litemark Viewer opens and displays the rendered demo.

null 10 Apr 23, 2022
A lightweight and fast-to-use Markdown document generator based on Python

A lightweight and fast-to-use Markdown document generator based on Python

快乐的老鼠宝宝 1 Jan 10, 2022
A markdown template manager for writing API docs in python.

DocsGen-py A markdown template manager for writing API docs in python. Contents Usage API Reference Usage You can install the latest commit of this re

Ethan Evans 1 May 10, 2022
Convert HTML to Markdown-formatted text.

html2text html2text is a Python script that converts a page of HTML into clean, easy-to-read plain ASCII text. Better yet, that ASCII also happens to

Alireza Savand 1.3k Dec 31, 2022
Comprehensive Markdown plugin built for Django

Django MarkdownX Django MarkdownX is a comprehensive Markdown plugin built for Django, the renowned high-level Python web framework, with flexibility,

neutronX 740 Jan 8, 2023
Awesome Django Markdown Editor, supported for Bootstrap & Semantic-UI

martor Martor is a Markdown Editor plugin for Django, supported for Bootstrap & Semantic-UI. Features Live Preview Integrated with Ace Editor Supporte

null 659 Jan 4, 2023
Livemark is a static page generator that extends Markdown with interactive charts, tables, and more.

Livermark This software is in the early stages and is not well-tested Livemark is a static site generator that extends Markdown with interactive chart

Frictionless Data 86 Dec 25, 2022
A super simple script which uses the GitHub API to convert your markdown files to GitHub styled HTML site.

A super simple script which uses the GitHub API to convert your markdown files to GitHub styled HTML site.

Çalgan Aygün 213 Dec 22, 2022
Remarkable Markdown Debian Package Fix

Remarkable debian package fix For some reason the Debian package for remarkable markdown editor has not been made to install properly on Ubuntu 20.04

Eric Seifert 37 Jan 2, 2023
Read a list in markdown and do something with it!

Markdown List Reader A simple tool for reading lists in markdown. Usage Begin by running the mdr.py file and input either a markdown string with the -

Esteban Garcia 3 Sep 13, 2021