From 158b8ee673be7aea09e15c3830092bcab62dbfbe Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 13 Dec 2007 03:47:22 +0000 Subject: Updated docs. --- CHANGE_LOG.txt | 2 + README.html | 91 ++++++++++++++++ README.txt | 98 +++++++++++++++++ home_page.txt | 338 --------------------------------------------------------- sidebar.txt | 37 ------- 5 files changed, 191 insertions(+), 375 deletions(-) create mode 100644 README.html create mode 100644 README.txt delete mode 100644 home_page.txt delete mode 100644 sidebar.txt diff --git a/CHANGE_LOG.txt b/CHANGE_LOG.txt index 405a025..0d8b2d2 100644 --- a/CHANGE_LOG.txt +++ b/CHANGE_LOG.txt @@ -1,6 +1,8 @@ PYTHON MARKDOWN CHANGELOG ========================= +Dec 12, 2007: Updated docs. + Nov 29, 2007: Added support for images inside links. Also fixed a few bugs in the footnote extension. diff --git a/README.html b/README.html new file mode 100644 index 0000000..6d94e8e --- /dev/null +++ b/README.html @@ -0,0 +1,91 @@ +

Python-Markdown

+

This is a Python implementation of John Gruber's Markdown. + It is almost completely compliant with the reference implementation, + though there are a few known issues. See Features for information + on what exactly is supported and what is not. Additional features are + supported by the Available Extensions. +

+ +

Installation

+

To install Python Markdown download the zip file and extract the + files. If you want to install markdown as a module into your python + tree, run sudo python setup.py install from a directory where you + unzip the files. +

+ +

Command Line Usage

+

To use markdown.py from the command line, run it as +

+
python markdown.py <input_file>
+

or +

+
python markdown.py <input_file> > <output_file>
+

For more details, use the -h or --help options from the command line + or read the Command Line Docs available online. +

+ +

Using as a Python Module

+

To use markdown as a module: +

+
import markdown
+html = markdown.markdown(your_text_string)
+

For more details see the Module Docs. +

+ +

Support

+

You may ask for help and discuss various other issues on the mailing list and report bugs on the bug tracker. +

+ +

Credits

+ +

Other contributions: +

+ + +

License

+

The code is dual-licensed under GPL and BSD License. Other + licensing arrangements can be discussed. +

\ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..b859924 --- /dev/null +++ b/README.txt @@ -0,0 +1,98 @@ +[Python-Markdown][] +=================== + +This is a Python implementation of John Gruber's [Markdown][]. +It is almost completely compliant with the reference implementation, +though there are a few known issues. See [Features][] for information +on what exactly is supported and what is not. Additional features are +supported by the [Available Extensions][]. + +[Python-Markdown]: http://freewisdom.org/projects/python-markdown +[Markdown]: http://daringfireball.net/projects/markdown/ +[Features]: http://www.freewisdom.org/projects/python-markdown/Features +[Available Extensions]: http://www.freewisdom.org/projects/python-markdown/Available_Extensions + + +Installation +------------ + +To install Python Markdown [download][] the zip file and extract the +files. If you want to install markdown as a module into your python +tree, run `sudo python setup.py install` from a directory where you +unzip the files. + +[download]: http://sourceforge.net/project/showfiles.php?group_id=153041 + + +Command Line Usage +------------------ + +To use markdown.py from the command line, run it as + + python markdown.py + +or + + python markdown.py > + +For more details, use the `-h` or `--help` options from the command line +or read the [Command Line Docs][] available online. + +[Command Line Docs]: http://www.freewisdom.org/projects/python-markdown/Command_Line + + + +Using as a Python Module +------------------------ + +To use markdown as a module: + + import markdown + html = markdown.markdown(your_text_string) + +For more details see the [Module Docs][]. + +[Module Docs]: http://www.freewisdom.org/projects/python-markdown/Using_as_a_Module + +Support +------- + +You may ask for help and discuss various other issues on the [mailing list][] and report bugs on the [bug tracker][]. + +[mailing list]: http://lists.sourceforge.net/lists/listinfo/python-markdown-discuss +[bug tracker]: http://sourceforge.net/tracker/?func=add&group_id=153041&atid=790198 + + +Credits +------- + +* Most of the code currently in the module was written by [Yuri Takhteyev][] + while procrastinating from his Ph.D. +* The original version of this script was written by [Manfred Stienstra][], + who is responsible for about a quarter of the code. +* Many recent bugs are being fixed by [Waylan Limberg][]. + +Other contributions: + +* Daniel Krech provided the setup.py script. +* G. Clark Haynes submitted a patch for indented lists. +* Tiago Cogumbreiro submitted an email autolink fix. +* Sergej Chodarev submitted a patch for treatment of `
` tags. +* Chris Clark submitted a patch to handle `` syntax and a reg ex + for "smart" emphasis (ignoring underscores within a word). +* Steward Midwinter wrote command-line parser and cleaned up comments. +* Many other people helped by reporting bugs. + +[Yuri Takhteyev]: http://www.freewisdom.org +[Manfred Stienstra]: http://www.dwerg.net/ +[Waylan Limberg]: http://achinghead.com/ + + +License +------- + +The code is dual-licensed under [GPL][] and [BSD License][]. Other +licensing arrangements can be discussed. + +[GPL]: http://www.gnu.org/copyleft/gpl.html) +[BSD License]: http://www.opensource.org/licenses/bsd-license.php diff --git a/home_page.txt b/home_page.txt deleted file mode 100644 index 89a9cc4..0000000 --- a/home_page.txt +++ /dev/null @@ -1,338 +0,0 @@ - -
-
- - -

Summary

- -This is a Python implementation of John Gruber's -[Markdown](http://daringfireball.net/projects/markdown/). -The current version of python-markdown implements all Markdown syntax -features and fully passes [Markdown Test Suite -1.0](http://six.pairlist.net/pipermail/markdown-discuss/2004-December/000909.html). It also supports footnotes (see [this -thread](http://six.pairlist.net/pipermail/markdown-discuss/2005-August/001480.html)) -and attributes (see [this -thread](http://six.pairlist.net/pipermail/markdown-discuss/2005-August/001486.html)). Python-Markdown defaults to ignoring middle-word emphasis through -underscore, but this it can be switched off. (See [this -thread](http://six.pairlist.net/pipermail/markdown-discuss/2005-October/001610.html) -for discussion.) - -If you find something missing, [submit a bug report](http://sourceforge.net/tracker/?func=add&group_id=153041&atid=790198) or send me an email (qaramazov-at-gmail.com). Better yet, send me a patch. - - -

Installation

- -[Download](http://sourceforge.net/project/showfiles.php?group_id=153041) -the zip file and extract the files. If you want to install markdown -as as a module into your python tree, run "sudo python setup.py -install" from a directory where you unzip the files. (You typically -need to be root to install modules this way - hence use of "sudo". If -you don't have root access, it probably doesn't make sense for you to -"install" markdown this way - just put the markdown.py file somewhere -and make sure that directory is in your path later.) - - -

Command Line Usage

- -To use markdown.py by itself, run it as - - python markdown.py - -or - - python markdown.py > - -If you are using Python 2.3 or higher, you can also use advanced -command line options to specify encoding or to run extensions. - - - $ python markdown.py - usage: markdown.py INPUTFILE [options] - - options: - -h, --help show this help message and exit - -f OUTPUT_FILE, --file=OUTPUT_FILE - write output to OUTPUT_FILE - -e ENCODING, --encoding=ENCODING - encoding for input and output files - -q, --quiet suppress all messages - -v, --verbose print info messages - -s, --safe same mode (strip user's HTML tag) - --noisy print debug messages - -x EXTENSION, --extension=EXTENSION - load extension EXTENSION - -For an extension to be ran this way it must be provided in a module -named ``mdx_{extensionname}.py`` which should be in your python path, -e.g. ``mdx_footnotes.py``. It can then be invoked as by name (the -part after "mdx_"): - - python markdown.py -x footnotes text_with_footnotes.txt output.html - -If the extension supports config options (see below), you can also -pass them in as well: - - python markdown.py -x "footnotes(PLACE_MARKER=~~~~~~~~)" - - -

Using the Module

- -To use markdown as a module: - - import markdown - html = markdown.markdown(your_text_string) - -Alternatively, if you want to pass more options: - - import markdown - md = Markdown(text, - extensions=['footnotes'], - extension_configs= {'footnotes' : - ('PLACE_MARKER','~~~~~~~~')} - encoding='utf8', - safe_mode = True) - - return md.toString() - -or, if you want to process multiple strings: - - md = Markdown(text=None) - md.toString(text) - -Note that if you are using Markdown on a web system which will -transform text provided by untrusted users, you may want to use -"safe_mode=True" option (see above) which ensures that user's HTML tags are -removed. (They can still create links using Markdown syntax.) - - -

Writing Extensions

- -The functionality of the script can be extended without changing the -code, by inserting additional pre-processors, post-processors or -inline patterns into Markdown's pipeline. - -**Pre-processors** operate on lines of source text and are run in the -beginning. It is sufficient to write a class with a run() method that -takes a list of text lines as a parameter and returns the same or a -new list. An instance of the preprocessor can then be inserted into -the markdown pipeline. Preprocessor classes must extend -``markdown.Preprocessor``. - - class SamplePreprocessor (markdown.Preprocessor) : - def run(self, lines) : - for i in range(len(lines)) : - if lines[i].startswith(SOMETHING) : - lines[i] = do_something(lines[i]) - - return lines - - md_instance.preprocessors.insert(SOME_INDEX, SamplePreprocessor()) - -**Post-processors** operate on a NanoDom tree and run at the very end. -They need to implement a "run" method that takes a pointer to a NanoDom -document. Postprocessor classes must extend ``markdown.Postprocessor``. - - class SamplePostprocessor (markdown.Postprocessor): - def run(self, doc) : - doc.documentElement.appendChild(doc.createElement("new")) - - - md_instance.postprocessors.insert(SOME_INDEX, SamplePostprocessor()) - -Finally, **inline patterns** can be added. Each inline pattern -includes a regular expression pattern and a method for turning a match -object into a DOM fragment - - class MyCustomPattern (markdown.Pattern) : - def handleMatch(self, m, doc) : - el = doc.createElement('custom') - el.setAttribute('stuff', m.group(3)) - return el - - new_pattern = MyCustomPattern(r'your regular expression here') - md_instance.inlinePatterns.insert(SOME_INDEX, new_pattern) - -Preprocessors, patterns and postprocessors need to then be wrapped -together into an extension, which should be implemented as a class -that extends markdown.Extension and should over-ride the -``extendMarkdown()`` method. ``extendMarkdown()`` is called during -markdown construction, giving the extension a pointer to the markdown -object (the ``md`` parameters) and markdown's global variables -(``md_globals``), which in theory gives the extension an option of -changing anything it cares to change. However, what it really should -be doing is inserting preprocessors, postprocessors and patterns into -the markdown pipeline: - - - def extendMarkdown(self, md, md_globals) : - - self.md = md - - # Insert a preprocessor before ReferencePreprocessor - index = md.preprocessors.index(md_globals['REFERENCE_PREPROCESSOR']) - preprocessor = FootnotePreprocessor(self) - preprocessor.md = md - md.preprocessors.insert(index, preprocessor) - - -If the extension uses any parameters that the use may want to change, -they should be stored in self.config in the following format: - - self.config = {parameter_1_name : [value1, description1], - parameter_2_name : [value2, description2] } - -When stored this way the config parameters can be over-riden from the -command line or at the time Markdown is instantiated: - - markdown.py -x myextension(SOME_PARAM=2) inputfile.txt > output.txt - -Note that parameters should always be assumed to be set to string -values, and should be converted at the run time, e.g. - - i += int(self.getConfig("SOME_PARAM")) - -Each extension should ideally be placed in its own module starting -with ``mdx_`` prefix (e.g. ``mdx_footnotes.py``). The module must -provide a module-level function called ``makeExtensions`` that takes -as an optional parameter a list of configuration over-rides and -returns an instance of the extension. E.g.: - - def makeExtension(configs=None) : - return FootnoteExtension(configs=configs) - -See the implementation of footnote support distributed with the -markdown script (mdx_footnotes.py) for an example of using all three -in combination to provide reasonably complex additional functionality. -(I use a pre-processor to collect footnote definitions, an inline -pattern to handle uses of footnotes inside the text and a -post-processor to attach the HTML of the actual footnotes at the end -of the document) The RSS extension (mdx_rss.py, also included), which -generates an RSS file from markdown source is a simpler extension but -provides an example of extending markdown to generate arbitrary XML -rather than HTML. - - -Other extensions: - -* [Table-of-contents extension](extensions/mdx_toc.py) by Chris Clark - (inserts a table of contents), upgraded by - Yuri. - -* [Title extension](extensions/mdx_title.py) by Chris Clark (inserts a - title element) - -* [WikiLinks](http://achinghead.com/archives/67/adding-wikilinks-to-markdown-in-python/) - by Waylan Limberg (not yet upgraded) - - - -

Using Markdown with Django

- -Install markdown and make sure it is in your path. -Include 'django.contrib.markup' in INSTALLED_APPS in your settings.py. -You will then need to load the markup module in a template: - - {% load markup %} - -After that, you should be able to use markdown filter in that template -as follows by putting "|markdown" after a variable, e.g.: - - {{ post.body|markdown }} - -If you want to use markdown with extensions or want an option of -disabling HTML (e.g., in comments) edit -django/contrib/markup/templatetags/markup.py file in your django tree -replacing the definition of markdown() function with the following: - - def markdown(value, arg=''): - - try: - import markdown - except ImportError: - if settings.DEBUG: - raise (template.TemplateSyntaxError, - "Error in {% markdown %} filter: " - + "The markdown library isn't installed.") - else : - from django.utils.html import escape, linebreaks - return linebreaks(escape(value)) - else: - extensions=arg.split(",") - if len(extensions) > 0 and extensions[0] == "safe" : - extensions = extensions[1:] - safe_mode = True - else : - safe_mode = False - return markdown.markdown(value, extensions, safe_mode=safe_mode) - -(This code snippet has been adapted from one proposed by [Waylan -Limberg](http://achinghead.com/).) - -You should then be able to load extensions by listing them in quotes -separated by comas: - - {{ post.body|markdown:"imagelinks,footnotes" }} - -If you want to disable HTML, include "safe" as the first argument: - - {{ post.body|markdown:"safe" }} - - -

Credits

- -* The first version of this script was written by [Manfred - Stienstra](http://www.dwerg.net/), who is responsible for about - a quarter of the code. -* Daniel Krech provided the setup.py script. -* G. Clark Haynes submitted a patch for indented lists. -* Tiago Cogumbreiro submitted an email autolink fix. -* Sergej Chodarev submitted a patch for treatment of `
` tags. -* Chris Clark submitted a patch to handle `` syntax and a reg ex for "smart" emphasis (ignoring underscores within a word). -* Steward Midwinter wrote command-line parser and cleaned up comments. -* Many other people helped by reporting bugs. - - -

License

- -The code is dual-licensed under -[GPL](http://www.gnu.org/copyleft/gpl.html) and [BSD -License](http://www.opensource.org/licenses/bsd-license.php). Other -licensing arrangements can be discussed. - - -

Contact Info

- -Email qaramazov [at] gmail.com if you have any questions or spot any -bugs. (Feel free to write in English, Russian, Portuguese or -Spanish.) - -Or subscribe to [python-markdown-discuss](http://lists.sourceforge.net/lists/listinfo/python-markdown-discuss). - - - -

Recent Changes

- -Oct 11, 2006: Releasing v. 1.6 with a whole bunch of changes (since -May 15), including: - -- Fixed a bug that caused some text to be lost after comments. -- Added exception for PHP tags when handling html blocks. -- Incorporated Sergej Chodarev's patch to fix a problem with ampersand - normalization and html blocks. -- Switched to using optparse. Added proper support for unicode. -- Fixed the