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

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实现双锁并发队列   java如何更改SpringWS 2.4.4版或更高版本中maxOccurs的默认限制?   java Selenium RC如何处理动态行?   java何时引入Javac StringBuilder/StringBuffer优化?   java mediaplayer在R.raw Android上失败   java JPA2:不区分大小写,就像在任何地方匹配一样   如何从JDK15中提取java预览类文件?   java与mySQL删除查询不一致   从Shutdownow()返回的java列表<Runnable>无法转换为提交的Runnable   java如何从回调接口获取对象值?   java如何获得视图的高度,在xml中可见性和高度定义为wrap_内容?   postgresql Mybatis在启动时遇到“由以下原因引起:java.net.UnknownHostException:localhost”,为什么?   带有实例调用的方法调用的java intellij格式化程序换行   由于特定的第三方库,java Proguard产生运行时错误   动画JAVA JPanel同时滑出和滑入