HeaderId
========

Summary
-------

An extension to Python-Markdown that adds an 'id' attribute to HTML header 
elements (h1-h6) in markdown's output.

This extension is included in the standard Markdown library.

Syntax
------

The basic syntax follows [PHP Markdown Extra][]'s implementation:

[PHP Markdown Extra]: http://michelf.com/projects/php-markdown/extra/#header-id

    Header 1            {#header1}
    ========

    ## Header 2 ##      {#header2}

will result in the following HTML:

    <h1 id="header1">Header 1</h1>

    <h2 id="header2">Header 2</h2>

However, there is much more that this extension does.

By default, all headers will automatically have unique "id" attributes 
generated based upon the text of the header (See below to turn this off). 
Note this example in which all three headers would have the same "id":

    #Header
    #Another Header {#header}
    #Header

Results in:

    <h1 id="header">Header</h1>
    <h1 id="header_1">Another Header</h1>
    <h1 id="header_2">Third Header</h1>

Configuring the Output
----------------------

The HeaderId extension has two configuration settings:

* **level**: Base level for headers.

    Default: `1`

* **forceid**: Force all headers to have an id.

    Default: `True`

The `level` setting allows you to automatically adjust the header levels to fit
within the hierarchy of your html templates. For example, the markdown text for
this page should not contain any headers higher than level 3 (`<h3>`). 
Therefore, do the following:

    >>>  text = '''
    ... #Some Header
    ... ## Next Level'''
    >>> html = markdown.markdown(text, ['headerid(level=3)'])
    >>> print html
    <h3 id="some_header">Some Header</h3>
    <h4 id="next_level">Next Level</h4>'

The `forceid` setting turns on or off the automatically generated ids for 
headers that do not have one explicitly defined.

    >>> text = '''
    ... # Some Header
    ... # Header with ID # { #foo }'''
    >>> html = markdown.markdown(text, ['headerid(forceid=False)'])
    >>> print html
    <h1>Some Header</h1>
    <h1 id="foo">Header with ID</h1>

Using with Meta-Data
--------------------

The HeaderId Extension also supports the [[Meta-Data]] Extension. Please see the documentation for that extension for specifics. The supported meta-data keywords are:

* `header_level`
* `header_forceid`

When used, the meta-data will override the settings provided through the  
`extension_configs` interface. 

This document:

    header_level: 2
    header_forceid: Off

    # A Header


Will result in the following output:

    <h2>A Header</h2>
