--- rst2pdf-0.16/rst2pdf/createpdf.py.orig	2010-10-06 23:21:41.000000000 +0200
+++ rst2pdf-0.16/rst2pdf/createpdf.py	2011-10-07 18:41:42.000000000 +0200
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 
-#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/createpdf.py $
-#$LastChangedDate: 2010-10-06 18:21:41 -0300 (Wed, 06 Oct 2010) $
-#$LastChangedRevision: 2396 $
+#$HeadURL$
+#$LastChangedDate$
+#$LastChangedRevision$
 
 # See LICENSE.txt for licensing terms
 
@@ -65,7 +65,7 @@ from docutils.readers import standalone
 from docutils.transforms import Transform
 
 import pygments_code_block_directive # code-block directive
-import oddeven_directive 
+import oddeven_directive
 
 from reportlab.platypus import *
 from reportlab.platypus.doctemplate import IndexingFlowable
@@ -125,13 +125,13 @@ from nodehandlers import nodehandlers
                   'lowerroman': 'ROMAN_LOWER',
                   'alpha':  'LETTERS_UPPER',
                   'loweralpha':  'LETTERS_LOWER' }
-                 
+
 
 
 class RstToPdf(object):
 
     def __init__(self, stylesheets=[],
-                 language='en',
+                 language='en_US',
                  header=None,
                  footer=None,
                  inlinelinks=False,
@@ -157,6 +157,7 @@ from nodehandlers import nodehandlers
                  custom_cover='cover.tmpl',
                  floating_images=False,
                  numbered_links=False,
+                 section_header_depth=2
                  ):
         self.debugLinesPdf=False
         self.depth=0
@@ -165,17 +166,19 @@ from nodehandlers import nodehandlers
         self.splittables=splittables
         self.basedir=basedir
         self.language = language
+        self.docutils_language = language
         try:
-            get_language (self.language)
+            self.get_language(self.language)
         except ImportError:
             try:
                 language = self.language.split('_', 1)[0]
-                get_language (language)
-                self.language = language
+                self.get_language(language)
+                self.docutils_language = language
             except ImportError:
-                log.warning("Can't load Docutils module "\
-                    "for language %s or %s", self.language, language)
-                self.language = 'en'
+                log.warning("Can't load Docutils module"
+                    " for language %s or %s", self.language, language)
+                self.language = 'en_US'
+                self.docutils_language = 'en'
         self.doc_title = ""
         self.doc_title_clean = ""
         self.doc_subtitle = ""
@@ -193,13 +196,13 @@ from nodehandlers import nodehandlers
             self.PATH = abspath(dirname(sys.executable))
         else:
             self.PATH = abspath(dirname(__file__))
-            
-            
+
+
         self.font_path=font_path
         self.style_path=style_path
         self.def_dpi=def_dpi
         self.loadStyles(stylesheets)
-            
+
         self.docutils_languages = {}
         self.inlinelinks = inlinelinks
         self.breaklevel = breaklevel
@@ -218,6 +221,7 @@ from nodehandlers import nodehandlers
         self.def_dpi = def_dpi
         self.show_frame = show_frame
         self.numbered_links = numbered_links
+        self.section_header_depth = section_header_depth
         self.img_dir = os.path.join(self.PATH, 'images')
 
         # Sorry about this, but importing sphinx.roles makes some
@@ -242,18 +246,20 @@ from nodehandlers import nodehandlers
             if self.language:
                 self.styles.languages.append(self.language)
                 self.styles['bodytext'].language = self.language
-
+            else:
+                self.styles.languages.append('en_US')
+                self.styles['bodytext'].language = 'en_US'
         # Load the docutils language modules for all required languages
         for lang in self.styles.languages:
             try:
-                self.docutils_languages[lang] = get_language(lang)
+                self.docutils_languages[lang] = self.get_language(lang)
             except ImportError:
                 try:
                     self.docutils_languages[lang] = \
-                         get_language(lang.split('_', 1)[0])
+                        self.get_language(lang.split('_', 1)[0])
                 except ImportError:
-                    log.warning("Can't load Docutils module \
-                        for language %s", lang)
+                    log.warning("Can't load Docutils module"
+                        " for language %s", lang)
 
         # Load the hyphenators for all required languages
         if wordaxe is not None:
@@ -265,8 +271,8 @@ from nodehandlers import nodehandlers
                     except Exception:
                         # hyphenators may not always be available or crash,
                         # e.g. wordaxe issue 2809074 (http://is.gd/16lqs)
-                        log.warning("Can't load wordaxe DCW hyphenator "
-                        "for German language, trying Py hyphenator instead")
+                        log.warning("Can't load wordaxe DCW hyphenator"
+                        " for German language, trying Py hyphenator instead")
                     else:
                         continue
                 try:
@@ -286,17 +292,25 @@ from nodehandlers import nodehandlers
 
         self.pending_targets=[]
         self.targets=[]
-        
+
     def loadStyles(self, styleSheets=None ):
-        
+
         if styleSheets is None:
             styleSheets=[]
-        
+
         self.styles = sty.StyleSheet(styleSheets,
                                      self.font_path,
                                      self.style_path,
                                      def_dpi=self.def_dpi)
 
+    def get_language(self, lang):
+        try:
+            return get_language(lang, reporter=log)
+        except TypeError, err: # Docutils < 0.8
+            if 'get_language' in str(err) and 'reporter' in str(err):
+                return get_language(lang)
+            raise # re-raise any other TypeError
+
     def style_language(self, style):
         """Return language corresponding to this style."""
         try:
@@ -318,8 +332,8 @@ from nodehandlers import nodehandlers
     def text_for_label(self, label, style):
         """Translate text for label."""
         try:
-            text = self.docutils_languages[self.style_language(style)]\
-                    .labels[label]
+            text = self.docutils_languages[
+                        self.style_language(style)].labels[label]
         except KeyError:
             text = label.capitalize()
         return text
@@ -327,8 +341,8 @@ from nodehandlers import nodehandlers
     def text_for_bib_field(self, field, style):
         """Translate text for bibliographic fields."""
         try:
-            text = self.docutils_languages[self.style_language(style)]\
-                    .bibliographic_fields[field]
+            text = self.docutils_languages[
+                        self.style_language(style)].bibliographic_fields[field]
         except KeyError:
             text = field
         return text + ":"
@@ -336,8 +350,8 @@ from nodehandlers import nodehandlers
     def author_separator(self, style):
         """Return separator string for authors."""
         try:
-            sep = self.docutils_languages[self.style_language(style)]\
-                    .author_separators[0]
+            sep = self.docutils_languages[
+                    self.style_language(style)].author_separators[0]
         except KeyError:
             sep = ';'
         return sep + " "
@@ -366,13 +380,12 @@ from nodehandlers import nodehandlers
             if s.underline:
                 r1.append('<u>')
                 r2.insert(0,'</u>')
-            
+
             return [''.join(r1), ''.join(r2)]
         except KeyError:
             log.warning('Unknown class %s', style)
             return None
 
-        
 
     def styleToFont(self, style):
         '''Takes a style name, returns a font tag for it, like
@@ -387,7 +400,7 @@ from nodehandlers import nodehandlers
             if bc:
                 r.append('backColor="#%s"' % bc.hexval()[2:])
             if s.trueFontSize:
-                r.append('size="%d"'%s.fontSize) 
+                r.append('size="%d"'%s.fontSize)
             r.append('>')
             return ''.join(r)
         except KeyError:
@@ -420,14 +433,14 @@ from nodehandlers import nodehandlers
         else:
             start = 1
 
-        if node.parent.get('bullet') or \
-            isinstance(node.parent, docutils.nodes.bullet_list):
-            b = node.parent.get('bullet','*')
+        if node.parent.get('bullet') or isinstance(
+                node.parent, docutils.nodes.bullet_list):
+            b = node.parent.get('bullet', '*')
             if b == "None":
                 b = ""
             t = 'bullet'
 
-        elif node.parent.get('enumtype')=='arabic':
+        elif node.parent.get('enumtype') == 'arabic':
             b = str(node.parent.children.index(node) + start) + '.'
 
         elif node.parent.get('enumtype') == 'lowerroman':
@@ -521,9 +534,9 @@ from nodehandlers import nodehandlers
             content=[XXPreformatted(text, style)],
             mode=self.fit_mode, style=style)
 
-    def createPdf(self, text=None, 
-                  source_path=None, 
-                  output=None, 
+    def createPdf(self, text=None,
+                  source_path=None,
+                  output=None,
                   doctree=None,
                   compressed=False,
                   # This adds entries to the PDF TOC
@@ -541,7 +554,7 @@ from nodehandlers import nodehandlers
                            'footer': self.footer,
                            'endnotes': [],
                            'extraflowables': []}
-                           
+
         self.pending_targets=[]
         self.targets=[]
 
@@ -550,7 +563,7 @@ from nodehandlers import nodehandlers
         if doctree is None:
             if text is not None:
                 if self.language:
-                    settings_overrides={'language_code': self.language}
+                    settings_overrides={'language_code': self.docutils_language}
                 else:
                     settings_overrides={}
                 self.doctree = docutils.core.publish_doctree(text,
@@ -570,7 +583,7 @@ from nodehandlers import nodehandlers
             self.doctree.walk(snf)
             srf = SectRefExpander(self.doctree, snf.sectnums)
             self.doctree.walk(srf)
-            
+
         elements = self.gen_elements(self.doctree)
 
         # Find cover template, save it in cover_file
@@ -621,8 +634,8 @@ from nodehandlers import nodehandlers
             # Handle images with alignment more like in HTML
             new_elem=[]
             for i,e in enumerate(elements[::-1]):
-                if isinstance (e, MyImage) and e.image.hAlign != 'CENTER'\
-                and new_elem:
+                if (isinstance (e, MyImage) and e.image.hAlign != 'CENTER'
+                        and new_elem):
                     # This is an image where flowables should wrap
                     # around it
                     popped=new_elem.pop()
@@ -670,7 +683,7 @@ from nodehandlers import nodehandlers
                 # first pass in the case of ###Total###, then we
                 # make a new forced two-pass build. This is broken.
                 # conceptually.
-                
+
                 if getattr(self, 'mustMultiBuild', False):
                     # Force a multibuild pass
                     if not isinstance(elements[-1],UnhappyOnce):
@@ -686,8 +699,8 @@ from nodehandlers import nodehandlers
                             # Add it to the pile
                             #if not isinstance (e, MySpacer):
                             fnPile.append(e)
-                        elif getattr(e, '_atTop', False) or \
-                            isinstance (e, (UnhappyOnce, MyPageBreak)):
+                        elif getattr(e, '_atTop', False) or isinstance(
+                                e, (UnhappyOnce, MyPageBreak)):
                             if fnPile:
                                 newStory.append(Sinker(fnPile))
                             newStory.append(e)
@@ -702,7 +715,7 @@ from nodehandlers import nodehandlers
                     continue
 
 
-                
+
                 break
             except ValueError, v:
                 # FIXME: cross-document links come through here, which means
@@ -737,7 +750,7 @@ from reportlab.platypus import doctempla
             # Notify TOC entry for headings/abstracts/dedications.
             level, text = flowable.level, flowable.text
             parent_id = flowable.parent_id
-            node = flowable.node  
+            node = flowable.node
             pagenum = setPageCounter()
             self.notify('TOCEntry', (level, text, pagenum, parent_id, node))
 
@@ -790,7 +803,8 @@ from reportlab.platypus import doctempla
                             self.afterFlowable(S[0])
                             doctemplate._addGeneratedContent(flowables,frame)
                         else:
-                            ident = "Splitting error(n==%d) on page %d in\n%s" % (n,self.page,self._fIdent(f,60,frame))
+                            ident = "Splitting error(n==%d) on page %d in\n%s" % (
+                                n, self.page, self._fIdent(f, 60, frame))
                             #leave to keep apart from the raise
                             raise LayoutError(ident)
                         del S[0]
@@ -798,17 +812,17 @@ from reportlab.platypus import doctempla
                         flowables.insert(i,f)   # put split flowables back on the list
                 else:
                     if hasattr(f,'_postponed') and f._postponed > 4:
-                        ident = "Flowable %s%s too large on page %d in frame %r%s of template %r" % \
-                                (self._fIdent(f,60,frame),doctemplate._fSizeString(f),self.page, self.frame.id,
-                                        self.frame._aSpaceString(), self.pageTemplate.id)
+                        ident = "Flowable %s%s too large on page %d in frame %r%s of template %r" % (
+                            self._fIdent(f, 60, frame), doctemplate._fSizeString(f),self.page,
+                            self.frame.id, self.frame._aSpaceString(), self.pageTemplate.id)
                         #leave to keep apart from the raise
                         raise LayoutError(ident)
                     # this ought to be cleared when they are finally drawn!
                     f._postponed = 1
-                    mbe = getattr(self,'_multiBuildEdits',None)
+                    mbe = getattr(self, '_multiBuildEdits', None)
                     if mbe:
-                        mbe((delattr,f,'_postponed'))
-                    flowables.insert(0,f)           # put the flowable back
+                        mbe((delattr, f, '_postponed'))
+                    flowables.insert(0, f)           # put the flowable back
                     self.handle_frameEnd()
 
 
@@ -830,7 +844,7 @@ from reportlab.platypus import doctempla
 
     def drawOn(self, canvas, x, y, _sW):
         pass
-        
+
 flowables.PageCounter = PageCounter
 
 def setPageCounter(counter=None, style=None):
@@ -853,13 +867,13 @@ flowables.PageCounter = PageCounter
     else:
         ptext=unicode(_counter)
     return ptext
-    
+
 class MyContainer(_Container, Flowable):
     pass
 
 class UnhappyOnce(IndexingFlowable):
     '''An indexing flowable that is only unsatisfied once.
-    If added to a story, it will make multiBuild run 
+    If added to a story, it will make multiBuild run
     at least two passes. Useful for ###Total###'''
     _unhappy=True
     def isSatisfied(self):
@@ -867,7 +881,7 @@ flowables.PageCounter = PageCounter
             self._unhappy= False
             return False
         return True
-        
+
     def draw(self):
         pass
 
@@ -935,7 +949,7 @@ flowables.PageCounter = PageCounter
                 getattr(canv, 'sectNum', ''))
             text = smartyPants(text, smarty)
             return text
-        
+
         for i,e  in enumerate(elems):
             if isinstance(e, Paragraph):
                 text = replace(e.text)
@@ -955,7 +969,7 @@ flowables.PageCounter = PageCounter
                 even=self.replaceTokens([e.even,], canv, doc, smarty)[0]
                 elems[i]=OddEven(odd, even)
         return elems
-        
+
     def draw(self, pageobj, canv, doc, x, y, width, height):
         self.totalpages = max(self.totalpages, doc.page)
         items = self.prepared
@@ -1007,11 +1021,11 @@ flowables.PageCounter = PageCounter
                 return
             try:
                 w, h, kind = MyImage.size_for_node(dict(uri=uri, ), self.client)
-            except ValueError: 
+            except ValueError:
                 # Broken image, return arbitrary stuff
                 uri=missing
                 w, h, kind = 100, 100, 'direct'
-                
+
             pw, ph = self.styles.pw, self.styles.ph
             if self.client.background_fit_mode == 'center':
                 scale = min(1.0, 1.0 * pw / w, 1.0 * ph / h)
@@ -1025,7 +1039,7 @@ flowables.PageCounter = PageCounter
                 # Do scale anyway
                 x, y = 0, 0
                 sw, sh = pw, ph
-                
+
             bg = MyImage(uri, sw, sh, client=self.client)
             self.image_cache[uri] = info = bg, x, y
         bg, x, y = info
@@ -1041,8 +1055,8 @@ flowables.PageCounter = PageCounter
 
         global _counter, _counterStyle
 
-        self.tw = self.styles.pw - self.styles.lm -\
-            self.styles.rm - self.styles.gm
+        styles = self.styles
+        self.tw = styles.pw - styles.lm - styles.rm - styles.gm
         # What page template to use?
         tname = canv.__dict__.get('templateName',
                                   self.styles.firstTemplate)
@@ -1052,34 +1066,33 @@ flowables.PageCounter = PageCounter
         doct = getattr(canv, '_doctemplate', None)
         canv._doctemplate = None # to make _listWrapOn work
 
-        if doc.page==1:
-            _counter=0
-            _counterStyle='arabic'
-        _counter+=1
+        if doc.page == 1:
+            _counter = 0
+            _counterStyle = 'arabic'
+        _counter += 1
 
         # Adjust text space accounting for header/footer
-        
+
         self.hh = self._head.prepare(self, canv, doc)
         self.fh = self._foot.prepare(self, canv, doc)
-            
+
         canv._doctemplate = doct
 
-        self.hx = self.styles.lm
-        self.hy = self.styles.ph - self.styles.tm -self.hh
+        self.hx = styles.lm
+        self.hy = styles.ph - styles.tm - self.hh
+
+        self.fx = styles.lm
+        self.fy = styles.bm
+        self.th = styles.ph - styles.tm - styles.bm - self.hh \
+                    - self.fh - styles.ts - styles.bs
 
-        self.fx = self.styles.lm
-        self.fy = self.styles.bm
-        self.th = self.styles.ph - self.styles.tm - \
-            self.styles.bm - self.hh - self.fh - \
-            self.styles.ts - self.styles.bs
-            
         # Adjust gutter margins
         if doc.page % 2: # Left page
-            x1 = self.styles.lm
+            x1 = styles.lm
         else: # Right page
-            x1 = self.styles.lm + self.styles.gm
-        y1 = self.styles.bm + self.fh + self.styles.bs
-        
+            x1 = styles.lm + styles.gm
+        y1 = styles.bm + self.fh + styles.bs
+
         # If there is a background parameter for this page Template, draw it
         if 'background' in self.template:
             self.draw_background('background', canv)
@@ -1087,13 +1100,13 @@ flowables.PageCounter = PageCounter
         self.frames = []
         for frame in self.template['frames']:
             self.frames.append(SmartFrame(self,
-                self.styles.adjustUnits(frame[0], self.tw) + x1,
-                self.styles.adjustUnits(frame[1], self.th) + y1,
-                self.styles.adjustUnits(frame[2], self.tw),
-                self.styles.adjustUnits(frame[3], self.th),
+                styles.adjustUnits(frame[0], self.tw) + x1,
+                styles.adjustUnits(frame[1], self.th) + y1,
+                styles.adjustUnits(frame[2], self.tw),
+                styles.adjustUnits(frame[3], self.th),
                     showBoundary=self.show_frame))
-        canv.firstSect=True
-        canv._pagenum=doc.page
+        canv.firstSect = True
+        canv._pagenum = doc.page
         for frame in self.frames:
             frame._pagenum=doc.page
 
@@ -1101,15 +1114,15 @@ flowables.PageCounter = PageCounter
         """Draw header/footer."""
         # Adjust for gutter margin
         canv.addPageLabel(canv._pageNumber-1,numberingstyles[_counterStyle],_counter)
-        
-        log.info('Page %s [%s]'%(_counter,doc.page))
+
+        log.error('Page %s [%s]'%(_counter,doc.page))
         if doc.page % 2: # Left page
             hx = self.hx
             fx = self.fx
         else: # Right Page
             hx = self.hx + self.styles.gm
             fx = self.fx + self.styles.gm
-            
+
         self._head.draw(self, canv, doc, hx, self.hy, self.tw, self.hh)
         self._foot.draw(self, canv, doc, fx, self.fy, self.tw, self.fh)
 
@@ -1119,12 +1132,12 @@ flowables.PageCounter = PageCounter
 
 
 def parse_commandline():
-    
+
     parser = OptionParser()
-    
+
     parser.add_option('--config', dest='configfile', metavar='FILE',
         help='Config file to use. Default=~/.rst2pdf/config')
-    
+
     parser.add_option('-o', '--output', dest='output', metavar='FILE',
         help='Write the PDF to FILE')
 
@@ -1133,16 +1146,16 @@ flowables.PageCounter = PageCounter
     parser.add_option('-s', '--stylesheets', dest='style',
         type='string', action='append',
         metavar='STYLESHEETS', default=[def_ssheets],
-        help='A comma-separated list of custom stylesheets.'\
-        ' Default="%s"' % def_ssheets)
+        help='A comma-separated list of custom stylesheets. Default="%s"'
+            % def_ssheets)
 
     def_sheetpath = os.pathsep.join([expanduser(p) for p in
         config.getValue("general", "stylesheet_path", "").split(os.pathsep)])
     parser.add_option('--stylesheet-path', dest='stylepath',
         metavar='FOLDER%sFOLDER%s...%sFOLDER'%((os.pathsep, )*3),
         default=def_sheetpath,
-        help='A list of folders to search for stylesheets,"\
-        " separated using "%s". Default="%s"' %(os.pathsep, def_sheetpath))
+        help='A list of folders to search for stylesheets,'
+            ' separated using "%s". Default="%s"' %(os.pathsep, def_sheetpath))
 
     def_compressed = config.getValue("general", "compressed", False)
     parser.add_option('-c', '--compressed', dest='compressed',
@@ -1161,59 +1174,64 @@ flowables.PageCounter = PageCounter
     parser.add_option('--font-path', dest='fpath',
         metavar='FOLDER%sFOLDER%s...%sFOLDER'%((os.pathsep, )*3),
         default=def_fontpath,
-        help='A list of folders to search for fonts,'\
-             ' separated using "%s". Default="%s"'%(os.pathsep, def_fontpath))
+        help='A list of folders to search for fonts, separated using "%s".'
+            ' Default="%s"' % (os.pathsep, def_fontpath))
 
     def_baseurl = urlunparse(['file',os.getcwd()+os.sep,'','','',''])
     parser.add_option('--baseurl', dest='baseurl', metavar='URL',
         default=def_baseurl,
         help='The base URL for relative URLs. Default="%s"'%def_baseurl)
 
-    def_lang = config.getValue("general", "language", 'en')
+    def_lang = config.getValue("general", "language", 'en_US')
     parser.add_option('-l', '--language', metavar='LANG',
         default=def_lang, dest='language',
-        help='Language to be used for hyphenation and '\
-        'docutils localizations. Default="%s"' % def_lang)
+        help='Language to be used for hyphenation'
+            ' and docutils localizations. Default="%s"' % def_lang)
 
     def_header = config.getValue("general", "header")
     parser.add_option('--header', metavar='HEADER',
         default=def_header, dest='header',
-        help='Page header if not specified in the document.'\
-        ' Default="%s"' % def_header)
+        help='Page header if not specified in the document.'
+            ' Default="%s"' % def_header)
 
     def_footer = config.getValue("general", "footer")
     parser.add_option('--footer', metavar='FOOTER',
         default=def_footer, dest='footer',
-        help='Page footer if not specified in the document.'\
-        ' Default="%s"' % def_footer)
+        help='Page footer if not specified in the document.'
+            ' Default="%s"' % def_footer)
+
+    def_section_header_depth = config.getValue("general","section_header_depth",2)
+    parser.add_option('--section-header-depth', metavar='N',
+        default=def_section_header_depth, dest='section_header_depth',
+        help = '''Sections up to this depth will be used in the header and footer's replacement of ###Section###. Default=%s''' % def_section_header_depth)
 
     def_smartquotes = config.getValue("general", "smartquotes", "0")
     parser.add_option("--smart-quotes", metavar="VALUE",
         default=def_smartquotes, dest="smarty",
-        help='Try to convert ASCII quotes, ellipsis and dashes '\
-        'to the typographically correct equivalent. For details,'\
-        ' read the man page or the manual. Default="%s"'%def_smartquotes)
+        help='Try to convert ASCII quotes, ellipses and dashes'
+            ' to the typographically correct equivalent. For details,'
+            ' read the man page or the manual. Default="%s"' % def_smartquotes)
 
     def_fit = config.getValue("general", "fit_mode", "shrink")
     parser.add_option('--fit-literal-mode', metavar='MODE',
         default=def_fit, dest='fit_mode',
-        help='What todo when a literal is too wide. One of error,'\
-        ' overflow,shrink,truncate. Default="%s"'%def_fit)
+        help='What to do when a literal is too wide. One of error,'
+            ' overflow,shrink,truncate. Default="%s"' % def_fit)
 
     def_fit_background = config.getValue("general", "background_fit_mode",
-    "center")
+       "center")
     parser.add_option('--fit-background-mode', metavar='MODE',
         default=def_fit_background, dest='background_fit_mode',
-        help='How to fit the background image to the page.'\
-        ' One of scale or center. Default="%s"'%def_fit_background)
+        help='How to fit the background image to the page.'
+            ' One of scale or center. Default="%s"' % def_fit_background)
 
     parser.add_option('--inline-links', action="store_true",
     dest='inlinelinks', default=False,
-        help='shows target between parenthesis instead of active link')
+        help='Shows target between parentheses instead of active link.')
 
     parser.add_option('--repeat-table-rows', action="store_true",
         dest='repeattablerows', default=False,
-        help='Repeats header row for each splitted table')
+        help='Repeats header row for each split table.')
 
     parser.add_option('-q', '--quiet', action="store_true",
         dest='quiet', default=False,
@@ -1235,22 +1253,22 @@ flowables.PageCounter = PageCounter
         "footnote_backlinks", True)
     parser.add_option('--no-footnote-backlinks', action='store_false',
         dest='footnote_backlinks', default=def_footnote_backlinks,
-        help='Disable footnote backlinks.'\
-        ' Default=%s' % str(not def_footnote_backlinks))
+        help='Disable footnote backlinks.'
+            ' Default=%s' % str(not def_footnote_backlinks))
 
     def_inline_footnotes = config.getValue("general",
         "inline_footnotes", False)
     parser.add_option('--inline-footnotes', action='store_true',
         dest='inline_footnotes', default=def_inline_footnotes,
-        help='Show footnotes inline.'\
-        ' Default=%s' % str(not def_inline_footnotes))
+        help='Show footnotes inline.'
+            ' Default=%s' % str(not def_inline_footnotes))
 
     def_real_footnotes = config.getValue("general",
         "real_footnotes", False)
     parser.add_option('--real-footnotes', action='store_true',
         dest='real_footnotes', default=def_real_footnotes,
-        help='Show footnotes at the bottom of the page where they are defined.'\
-        ' Default=%s' % str(def_real_footnotes))
+        help='Show footnotes at the bottom of the page where they are defined.'
+            ' Default=%s' % str(def_real_footnotes))
 
     def_dpi = config.getValue("general", "default_dpi", 300)
     parser.add_option('--default-dpi', dest='def_dpi', metavar='NUMBER',
@@ -1263,20 +1281,20 @@ flowables.PageCounter = PageCounter
 
     parser.add_option('--disable-splittables', dest='splittables',
         action='store_false', default=True,
-        help='Don\'t use splittable flowables in some elements. '
-        'Only try this if you can\'t process a document any other way.')
+        help="Don't use splittable flowables in some elements."
+            " Only try this if you can't process a document any other way.")
 
     def_break = config.getValue("general", "break_level", 0)
     parser.add_option('-b', '--break-level', dest='breaklevel',
         metavar='LEVEL', default=def_break,
-        help='Maximum section level that starts in a new page.'\
-        ' Default: %d' % def_break)
+        help='Maximum section level that starts in a new page.'
+            ' Default: %d' % def_break)
 
     def_fpeven = config.getValue("general", "first_page_even", False)
     parser.add_option('--first-page-even', dest='first_page_even',
         action='store_true', default=def_fpeven,
-        help='Whether first page is odd (as in the screen on "facing pages"), '\
-             'or even (as in a book)')
+        help='Whether first page is odd (as in the screen on "facing pages"),'
+            ' or even (as in a book).')
 
     def_blankfirst = config.getValue("general", "blank_first_page", False)
     parser.add_option('--blank-first-page', dest='blank_first_page',
@@ -1286,14 +1304,16 @@ flowables.PageCounter = PageCounter
     def_breakside = config.getValue("general", "break_side", 'any')
     parser.add_option('--break-side', dest='breakside', metavar='VALUE',
         default=def_breakside,
-        help='How section breaks work. Can be "even", and sections start in an even page,'\
-        '"odd", and sections start in odd pages, or "any" and sections start in the next page,'\
-        'be it even or odd. See also the -b option.')
+        help='How section breaks work. Can be "even", and sections start'
+            ' in an even page, "odd", and sections start in odd pages,'
+            ' or "any" and sections start in the next page, be it even or odd.'
+            ' See also the -b option.')
 
-    parser.add_option('--date-invariant', dest='invariant', 
+    parser.add_option('--date-invariant', dest='invariant',
         action='store_true', default=False,
-        help="Don't store the current date in the PDF. Useful mainly for the test suite, "\
-        "where we don't want the PDFs to change.")
+        help="Don't store the current date in the PDF."
+            " Useful mainly for the test suite,"
+            " where we don't want the PDFs to change.")
 
     parser.add_option('-e', '--extension-module', dest='extensions', action="append", type="string",
         default = ['vectorpdf'],
@@ -1307,7 +1327,7 @@ flowables.PageCounter = PageCounter
 
     def_floating_images = config.getValue("general", "floating_images", False)
     parser.add_option('--use-floating-images', action='store_true', default=def_floating_images,
-        help='Makes images with :aling: attribute work more like in rst2html. Default: %s'%def_floating_images,
+        help='Makes images with :align: attribute work more like in rst2html. Default: %s'%def_floating_images,
         dest='floating_images')
 
     def_numbered_links = config.getValue("general", "numbered_links", False)
@@ -1324,7 +1344,7 @@ flowables.PageCounter = PageCounter
     options, args = parser.parse_args(copy(args))
 
     if options.configfile:
-        options.cfname=options.configfile
+        config.parseConfig(options.configfile)
         parser = parse_commandline()
         options, args = parser.parse_args(copy(args))
 
@@ -1415,9 +1435,8 @@ flowables.PageCounter = PageCounter
         options.inline_footnotes = True
 
     if reportlab.Version < '2.3':
-        log.warning('You are using Reportlab version %s.'\
-            ' The suggested version '\
-            'is 2.3 or higher'%reportlab.Version)
+        log.warning('You are using Reportlab version %s.'
+            ' The suggested version is 2.3 or higher' % reportlab.Version)
 
     if options.invariant:
         patch_PDFDate()
@@ -1450,6 +1469,7 @@ flowables.PageCounter = PageCounter
         custom_cover=options.custom_cover,
         floating_images=options.floating_images,
         numbered_links=options.numbered_links,
+	section_header_depth=int(options.section_header_depth),
         ).createPdf(text=options.infile.read(),
                     source_path=options.infile.name,
                     output=options.outfile,
@@ -1489,7 +1509,7 @@ filenames change'''
                     lambda yyyy,mm,dd,hh,m,s:
                         "D:%04d%02d%02d%02d%02d%02d%+03d'%02d'" % (yyyy,mm,dd,hh,m,s,0,0))
             return pdfdoc.format(pdfdoc.PDFString(dfmt(*self.date)), doc)
-        
+
     pdfdoc.PDFDate = PDFDate
     reportlab.rl_config.invariant = 1
 
