aboutsummaryrefslogtreecommitdiffstats
path: root/markdown/blockprocessors.py
diff options
context:
space:
mode:
authorRohan Jain <crodjer@gmail.com>2011-04-03 20:38:59 +0530
committerRohan Jain <crodjer@gmail.com>2011-04-03 20:38:59 +0530
commit66ba06fa2ded87dc9042e0cd51da26f99ece8717 (patch)
treea42ff68585b4a19cb7355f68a6e04f5687d778c1 /markdown/blockprocessors.py
parent80aa9a2d52f2fcbffd6e15d208b8ead5886900b1 (diff)
downloadmarkdown-66ba06fa2ded87dc9042e0cd51da26f99ece8717.tar.gz
markdown-66ba06fa2ded87dc9042e0cd51da26f99ece8717.tar.bz2
markdown-66ba06fa2ded87dc9042e0cd51da26f99ece8717.zip
custom index support for ol tag
A ol tag with custom start index can be defined by using a different integer as the first item numbering. Search for `3. Bird` on: http://daringfireball.net/projects/markdown/syntax
Diffstat (limited to 'markdown/blockprocessors.py')
-rw-r--r--markdown/blockprocessors.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/markdown/blockprocessors.py b/markdown/blockprocessors.py
index 77fbc71..f61aecd 100644
--- a/markdown/blockprocessors.py
+++ b/markdown/blockprocessors.py
@@ -300,6 +300,11 @@ class OListProcessor(BlockProcessor):
CHILD_RE = re.compile(r'^[ ]{0,3}((\d+\.)|[*+-])[ ]+(.*)')
# Detect indented (nested) items of either type
INDENT_RE = re.compile(r'^[ ]{4,7}((\d+\.)|[*+-])[ ]+.*')
+ # The integer with which the lists starts (None means start with 0)
+ # Eg: If list is intialized as)
+ # 3. Item
+ # The ol tag will get starts="3" attribute
+ STARTSWITH = None
def test(self, parent, block):
return bool(self.RE.match(block))
@@ -339,6 +344,10 @@ class OListProcessor(BlockProcessor):
else:
# This is a new list so create parent with appropriate tag.
lst = util.etree.SubElement(parent, self.TAG)
+ # Check if a custom start integer is set
+ if self.STARTSWITH:
+ lst.attrib['start'] = self.STARTSWITH
+
self.parser.state.set('list')
# Loop through items in block, recursively parsing each with the
# appropriate parent.
@@ -358,7 +367,14 @@ class OListProcessor(BlockProcessor):
for line in block.split('\n'):
m = self.CHILD_RE.match(line)
if m:
- # This is a new item. Append
+ # Check first item for the start index
+ if not items and self.TAG=='ol':
+ # Detect the integer value of first list item
+ INTEGER_RE = re.compile('(\d+)')
+ start_integer = INTEGER_RE.match(m.group(1)).group()
+ if start_integer!='1':
+ self.STARTSWITH = start_integer
+ # Append to the list
items.append(m.group(3))
elif self.INDENT_RE.match(line):
# This is an indented (possibly nested) item.