在标记文档中添加额外的维度

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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:不解析XML的简单XML。例外   KIE Workbench的java自定义UI   java将元素从bucket移动到LinkedList,但有一个元素被完全删除   如何将java stream collect转换为scala   java运行AsynkTask多次不工作   java组织。xml。萨克斯。SAXParseException:cvccomplextype。2.4.c:匹配的通配符是严格的   java是一种计算排序算法所需时间的合适方法   java在O(logn)时间内对排序整数数组中具有相同数字的数字进行计数   xpages从当前数据库javaAgent调用另一个数据库的javaAgent   java如何在instagram中上传特定位置的所有照片   JavaApachePOI可以有效地删除多个列   java创建的对象数   java我可以在关闭连接时关闭Oracle JDBC自动提交吗?