Source code for gfm.semi_sane_lists

# coding: utf-8
# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

"""
:mod:`gfm.semi_sane_lists` -- GitHub-like list parsing
======================================================

The :mod:`gfm.semi_sane_lists` module provides an extension that causes lists
to be treated the same way GitHub does.

Like the ``sane_lists`` extension, GitHub considers a list to end if it's
separated by multiple newlines from another list of a different type. Unlike
the ``sane_lists`` extension, GitHub will mix list types if they're not
separated by multiple newlines.

GitHub also recognizes lists that start in the middle of a paragraph. This is
currently not supported by this extension, since the Python parser has a
deeply-ingrained belief that blocks are always separated by multiple newlines.

Typical usage
-------------

.. testcode::

   import markdown
   from gfm import SemiSaneListExtension

   print(markdown.markdown(\"""
   - eggs
   - milk

   1. mix
   2. stew
   \""", extensions=[SemiSaneListExtension()]))

.. testoutput::

   <ul>
   <li>eggs</li>
   <li>milk</li>
   </ul>
   <ol>
   <li>mix</li>
   <li>stew</li>
   </ol>

"""

import markdown


class SemiSaneOListProcessor(markdown.blockprocessors.OListProcessor):
    SIBLING_TAGS = ['ol']


class SemiSaneUListProcessor(markdown.blockprocessors.UListProcessor):
    SIBLING_TAGS = ['ul']


[docs]class SemiSaneListExtension(markdown.Extension): """ An extension that causes lists to be treated the same way GitHub does. """ def extendMarkdown(self, md, md_globals): md.parser.blockprocessors['olist'] = SemiSaneOListProcessor(md.parser) md.parser.blockprocessors['ulist'] = SemiSaneUListProcessor(md.parser)