Какво е Rest? Това е markup език, но доста по прост от html, в повечето случаи се използва за писане на документация, която после се конвертира в html,pdf,LaTeX и др. формати. Основното предимство на този език е че е мнооого прост. Мога да ви науча на повечето от важните неща на няколко реда, ето един .rst файл, да речем test.rst:
- ========
- Заглавие
- ========
- 1. Първа точка
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст::
- def some_code(param):
- for x in param:
- do_someshit()
- a) това е под хараграф
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- b) това е друг под параграф:
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- 2. Втора точка
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
този файл дори има и грешка при подточка а) :D
Както виждате заглавието е обградено от горе и от долу със '=', което го прави голямо заглавие, подзаглавията, макар и че няма такива в този пример, са само подчертани. За заглавия и подзаглавия може да се използват всякакви знаци('#','@','=','$','-' и др.) Важното е заглавието да е покрито от началото си до края със еднаквите знаци от горе и от долу(няма да работи ако са по къси от заглавието, или ако имат различна дължина), а подзаглавията трябва да са подчертани.
Както може би предполагате, точките и подточките са си част от Markup-а на езика и те дефинират подпараграфи и списъци. А самите параграфи са просто блокове от текст със празни пространства от горе и от долу. Блоковете с код са отместени на дясно, и на предния параграф има двойни двоеточия(::) които по късно стават на единична двоеточие(:). Сега вече знаете достатъчно reStructuredText за да пишете добри документи, за повече подробности посетете сайта им.
Сега, за да ги конвертирате в html или друг формат ви трябва някакъв инструмент, един от най добрите инструменти е Sphinx. Това е изключително мощен инструмент, с чиято помощ е генерирана документацията на python. За моя скрипт аз използвах модула docutils. Ето скриптът:
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #convert a bunch of RestructuredText files to html
- #version 0.3.14
- from docutils.core import publish_string
- import sys
- def read_file(f):
- """reads the file, returns a string"""
- i=open(f,'r')
- z=i.read()
- i.close()
- return z
- def converter(rst):
- """turns the rst formated string in to html and returns is as a str"""
- return publish_string(source=rst,writer_name='html')
- def write_to_file(name,content):
- """writes the html string to a file"""
- name=name[:-4]+'.html' #turn .rst into .html
- o=open(name,'w')
- o.write(content)
- o.close()
- if __name__=='__main__':
- for f in sys.argv[1:]:
- i=read_file(f)
- i=converter(i)
- write_to_file(name=f,content=i)
ако искате да го използвате, просто го запишете в някакъв файл и му дайте права за изпълнение, и го стартирайте:
$./фяйл списък с файлове за конвертиране
всеки файл ще бъде конвертиран във съответния html файл със същото име(но различно разширение, от .rst на .html) Ето изходът от горния rest файл:
- <!--xml version="1.0" encoding="utf-8" ?-->
- <!--DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"-->
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/">
- <title>Заглавие</title>
- <style type="text/css">
- /*
- :Author: David Goodger (goodger@python.org)
- :Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
- :Copyright: This stylesheet has been placed in the public domain.
- Default cascading style sheet for the HTML output of Docutils.
- See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
- customize this style sheet.
- */
- /* used to remove borders from tables and images */
- .borderless, table.borderless td, table.borderless th {
- border: 0 }
- table.borderless td, table.borderless th {
- /* Override padding for "table.docutils td" with "! important".
- The right padding separates the table cells. */
- padding: 0 0.5em 0 0 ! important }
- .first {
- /* Override more specific margin styles with "! important". */
- margin-top: 0 ! important }
- .last, .with-subtitle {
- margin-bottom: 0 ! important }
- .hidden {
- display: none }
- a.toc-backref {
- text-decoration: none ;
- color: black }
- blockquote.epigraph {
- margin: 2em 5em ; }
- dl.docutils dd {
- margin-bottom: 0.5em }
- /* Uncomment (and remove this text!) to get bold-faced definition list terms
- dl.docutils dt {
- font-weight: bold }
- */
- div.abstract {
- margin: 2em 5em }
- div.abstract p.topic-title {
- font-weight: bold ;
- text-align: center }
- div.admonition, div.attention, div.caution, div.danger, div.error,
- div.hint, div.important, div.note, div.tip, div.warning {
- margin: 2em ;
- border: medium outset ;
- padding: 1em }
- div.admonition p.admonition-title, div.hint p.admonition-title,
- div.important p.admonition-title, div.note p.admonition-title,
- div.tip p.admonition-title {
- font-weight: bold ;
- font-family: sans-serif }
- div.attention p.admonition-title, div.caution p.admonition-title,
- div.danger p.admonition-title, div.error p.admonition-title,
- div.warning p.admonition-title {
- color: red ;
- font-weight: bold ;
- font-family: sans-serif }
- /* Uncomment (and remove this text!) to get reduced vertical space in
- compound paragraphs.
- div.compound .compound-first, div.compound .compound-middle {
- margin-bottom: 0.5em }
- div.compound .compound-last, div.compound .compound-middle {
- margin-top: 0.5em }
- */
- div.dedication {
- margin: 2em 5em ;
- text-align: center ;
- font-style: italic }
- div.dedication p.topic-title {
- font-weight: bold ;
- font-style: normal }
- div.figure {
- margin-left: 2em ;
- margin-right: 2em }
- div.footer, div.header {
- clear: both;
- font-size: smaller }
- div.line-block {
- display: block ;
- margin-top: 1em ;
- margin-bottom: 1em }
- div.line-block div.line-block {
- margin-top: 0 ;
- margin-bottom: 0 ;
- margin-left: 1.5em }
- div.sidebar {
- margin: 0 0 0.5em 1em ;
- border: medium outset ;
- padding: 1em ;
- background-color: #ffffee ;
- width: 40% ;
- float: right ;
- clear: right }
- div.sidebar p.rubric {
- font-family: sans-serif ;
- font-size: medium }
- div.system-messages {
- margin: 5em }
- div.system-messages h1 {
- color: red }
- div.system-message {
- border: medium outset ;
- padding: 1em }
- div.system-message p.system-message-title {
- color: red ;
- font-weight: bold }
- div.topic {
- margin: 2em }
- h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
- h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
- margin-top: 0.4em }
- h1.title {
- text-align: center }
- h2.subtitle {
- text-align: center }
- hr.docutils {
- width: 75% }
- img.align-left {
- clear: left }
- img.align-right {
- clear: right }
- ol.simple, ul.simple {
- margin-bottom: 1em }
- ol.arabic {
- list-style: decimal }
- ol.loweralpha {
- list-style: lower-alpha }
- ol.upperalpha {
- list-style: upper-alpha }
- ol.lowerroman {
- list-style: lower-roman }
- ol.upperroman {
- list-style: upper-roman }
- p.attribution {
- text-align: right ;
- margin-left: 50% }
- p.caption {
- font-style: italic }
- p.credits {
- font-style: italic ;
- font-size: smaller }
- p.label {
- white-space: nowrap }
- p.rubric {
- font-weight: bold ;
- font-size: larger ;
- color: maroon ;
- text-align: center }
- p.sidebar-title {
- font-family: sans-serif ;
- font-weight: bold ;
- font-size: larger }
- p.sidebar-subtitle {
- font-family: sans-serif ;
- font-weight: bold }
- p.topic-title {
- font-weight: bold }
- pre.address {
- margin-bottom: 0 ;
- margin-top: 0 ;
- font-family: serif ;
- font-size: 100% }
- pre.literal-block, pre.doctest-block {
- margin-left: 2em ;
- margin-right: 2em }
- span.classifier {
- font-family: sans-serif ;
- font-style: oblique }
- span.classifier-delimiter {
- font-family: sans-serif ;
- font-weight: bold }
- span.interpreted {
- font-family: sans-serif }
- span.option {
- white-space: nowrap }
- span.pre {
- white-space: pre }
- span.problematic {
- color: red }
- span.section-subtitle {
- /* font-size relative to parent (h1..h6 element) */
- font-size: 80% }
- table.citation {
- border-left: solid 1px gray;
- margin-left: 1px }
- table.docinfo {
- margin: 2em 4em }
- table.docutils {
- margin-top: 0.5em ;
- margin-bottom: 0.5em }
- table.footnote {
- border-left: solid 1px black;
- margin-left: 1px }
- table.docutils td, table.docutils th,
- table.docinfo td, table.docinfo th {
- padding-left: 0.5em ;
- padding-right: 0.5em ;
- vertical-align: top }
- table.docutils th.field-name, table.docinfo th.docinfo-name {
- font-weight: bold ;
- text-align: left ;
- white-space: nowrap ;
- padding-left: 0 }
- h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
- h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
- font-size: 100% }
- ul.auto-toc {
- list-style-type: none }
- </style>
- <div class="document" id="id1">
- <h1 class="title">Заглавие</h1>
- <ol class="arabic simple">
- <li>Първа точка</li>
- </ol>
- <p>Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст:</p>
- <pre class="literal-block">
- def some_code(param):
- for x in param:
- do_someshit()
- </pre>
- <ol class="loweralpha simple">
- <li>това е под хараграф</li>
- </ol>
- <p>Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,</p>
- <ol class="loweralpha simple" start="2">
- <li>това е друг под параграф:</li>
- </ol>
- <p>Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,</p>
- <ol class="arabic simple" start="2">
- <li>Втора точка</li>
- </ol>
- <p>Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,
- Това е параграф, той е просто текст,Това е параграф, той е просто текст,</p>
- </div>
Надявам се този пост да е бил полезен до някъде :D
1 коментар:
Публикуване на коментар