From 66ba06fa2ded87dc9042e0cd51da26f99ece8717 Mon Sep 17 00:00:00 2001 From: Rohan Jain Date: Sun, 3 Apr 2011 20:38:59 +0530 Subject: 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 --- markdown/blockprocessors.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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. -- cgit v1.2.3