在标记文档中添加额外的维度
structured-markdown的Python项目详细描述
我喜欢降价,但我一直想用它写的不仅仅是“平面”文档。 结构化标记是标记语法的扩展,允许在标记文档中嵌套和设置样式。 那么,它是如何工作的呢?
概述
smd目前是一个python模块,它将smd解析为格式化的html和css。 目前,模块使用mistune来解析.smd文档的标记部分。 一般的想法是,静态站点可以使用这些易于编写的smd文件来代替html模板等。 如果你想知道是什么使smd如此特别,请跳到SMD vs MD部分。
安装
好吧,我终于和p i p合作了,所以
pip install structured-markdown
现在就可以了! (我正在使用Python >= 3.7,顺便说一句)
如果您想从源代码构建,只需:
git clone https://github.com/Structured-Markdown/structured_markdown.git cd structured_markdown pip install .
(至少,这对我有效。)
您可能还需要安装mistune,一个标记解析器。
pip install mistune
如果使用python 3,请记住使用pip3。 我总是忘记使用pip3,所以我想你可能需要一个小提示。
用法
要在项目中使用SMD,请按如下方式导入:
importstructured_markdownassmd
SMD的主要目的是解析.smd文档。这在structured_markdown:
中非常简单withopen("example.smd","r")asfin:inp=fin.read()html,css=smd.parse(inp)
如果您只想返回HTML或CSS,请执行以下操作:
html=smd.parse(inp,html=True)css=smd.parse(inp,css=True)
我计划在SMD中添加模板功能,但还没有完成。
SMD与MD的比较
所有的正方形都是矩形,但不是所有的矩形都是正方形。 SMD也可以这样说——所有的标记文件都是有效的SMD文件,但不一定是相反的。 别这样,有什么区别?
SMD文档是由层组成的。 每个层都有一个名称,可以包含标记内容和/或其他层。
layer welcome: # Welcome to Structured-Markdown! this is markdown embedded within a layer.
这是一个名为welcome的层中的标记块。 这是等价的html。
<divclass='root'><divclass='welcome'><h1>Welcome to Structured-Markdown!</h1><p>this is markdown embedded within a layer.</p></div></div>
实际上,层是一个div,层名是div的类。 在返回解析的smd之前,所有内容都被放入root div。
嵌套非常简单:
layer welcome: # Welcome to Structured-Markdown! this is markdown embedded within a layer. layer nested: hey, this is nested more markdown after the nesting
变成:
<divclass='root'><divclass='welcome'><h1>Welcome to Structured-Markdown!</h1><p>this is markdown embedded within a layer.</p><divclass='welcome'><p>hey, this is nested</p></div><p>more markdown after the nesting</p></div></div>
它真正的亮点是当文本被复杂的格式包装时,比如这个导航栏示例:
layer navbar: layer logotype: # Templating Engine layer navlinks: 1. [blog](/blog) 2. [about](/about) 3. [projects](/projects)
请注意,扩展后的html更长、更详细。
<divclass='root'><divclass='navbar'><divclass='logotype'><h1>Templating Engine</h1></div><divclass='navlinks'><ol><li><ahref="/blog">blog</a></li><li><ahref="/about">about</a></li><li><ahref="/projects">projects</a></li></ol></div></div></div>
那么,造型呢? 我觉得有点懒,不得不重构很多代码来引入样式,所以现在它实际上是一对一的css映射。 以下是造型的样子:
style layer: border = 1px solid font-family = sans-serif
使用style关键字缩进样式块-然后,对于样式块中的每一行,将元素放在左侧,后跟等号,后跟属性。
style layer.navbar: background-color = #fff
所有普通的css选择器都应该工作,注意应该使用layer而不是div。 (如果愿意,您仍然可以使用div,layer使其看起来更具可读性。)
layer.navbar a:hover: color = #888
解析时,smd样式块完全转换为css。希望将来我能实现一个更好的样式系统,但这是我现在要做的。
现在差不多了。 并不是所有的功能都实现了,因为这仍然是一个WIP。