使用yaml的漂亮的html/xhtml/xml

yatom的Python项目详细描述


雅通

使用yaml的漂亮的html/xhtml/xml。

yatom是一个yaml到标记编译器,支持xml和html作为输出格式。

html和它的兄弟并不友好,它们非常复杂且常常不可读的特性(由于其父代:sgml)无法被超越,无论缩进和格式化都要付出多大的努力。即使这样,也需要进一步的后处理,以避免巨大的开销。

在某种程度上,yatom与jedi/pugjs和haml有着相同的概念,但是除非受到yaml的启发,否则yatom绝对是纯粹的yaml,完全不懂语言,没有额外的东西、要求或不兼容。

yaml-in,html-out,简单。

用法

使用yatom的简单html5页面。

importyatomsource='''  doctype: html5  html:    head:      title: My Yatom page!    body:      h2: Yatom is awesome      p: >-        Now, you can code your page with        beautiful markup without worrying        about inefficient HTML output nor        erratic linebreak behavior thanks        to Yatom.  '''print(yatom.HTMLProcessor.from_source(source).render())
<!DOCTYPE html><html><head><title>My Yatom page!</title></head><body><h2>Yatom is awesome</h2><p>Now, you can code your page with beautiful markup without worrying about inefficient HTML output nor erratic linebreak behavior thanks to Yatom.</p></body></html>

yatom语法

yatom使用常规yaml,但这并不意味着文档可以是任意形状的。

yaml文档结构由目标语言定义,但大多数情况下都遵循以下规则:

  • yaml根必须是映射,因为映射定义了文档结构。
  • 如果遇到非映射值,则将其视为文本。

html/xhtml/xml

定义整个html文档的yaml语法非常简单。如果您已经知道html,您可以开始编写yatom模板,只需很少的规则:

  • 映射键是标记名,但有一个例外:
    • doctype的处理方式不同,其接受的值如下所示:
      • HTML4严格
      • HTML4过渡
      • HTML4框架集
      • HTML5
      • XHTML1严格
      • XHTML1过渡
      • XHTML1框架集
      • XHTML11
  • 映射字符串值被视为文本内容。
  • 点前缀键是标记属性,必须出现在任何其他同级键之前,但有些例外:
    • 。内联文本字符串的文本(转义)
    • 。非转义内联文本字符串的文本(允许内联标记)
    • .cdata表示XML CData标记
    • .html注释的注释

除了以前的规则外,属性还支持嵌套,规则如下:

  • 当样式值是映射时,属性被视为css属性,嵌套的映射键用破折号(-)连接。
  • 当类值是映射或列表时,其属性将被视为不同的类(点是前缀)。它的层次结构(映射或数组)与破折号(-)组合在一起。
  • 如果任何其他属性值是映射或列表,则其层次结构将与破折号(-)组合。

另外,只有在doctype需要时,很少有标记提供正常的默认值:

  • HTML4和XHTML:
    • style元素的属性type默认为text/css
    • script元素的属性type默认为application/javascript
  • 仅XHTML:
    • html元素同时具有默认的langxmlns
    • stylescript元素的内容都被CDATA标记自动包装。

应用语义html规则。

示例

HTML5的简单例子。

importyatomsource='''  doctype: html5  html:    head:      title: my page    body:      h2: my page      p: |        multiline        text      p:        .text: mixed        span:          .style:            color: red          .text: tags        .text: and        strong: text  '''print(yatom.HTMLProcessor.from_source(source).render())
<!DOCTYPE html><html><head><title>my page</title></head><body><h2>my page</h2><p>multiline
text
</p><p>mixed<spanstyle="color:red">tags</span>and<strong>text</strong></p></body></html>

更高级的xhtml4示例。

importyatomsource='''  doctype: xhtml11  html:    head:      title: my page      script: window.alert('<hello world>')    body:      .data:        something: 1        other: 2      .class:        - simple:          - nested        - other      .style:        padding:          top: 2em          bottom: 2em          left: 25%          right: 25%      p: some simple text  '''print(yatom.HTMLProcessor.from_source(source).render())
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"lang="en"><head><title>my page</title><scripttype="application/javascript"><![CDATA[window.alert('<hello world>')]]></script></head><bodydata-something="1"data-other="2"class="simple-nested other"style="padding-top:2em;padding-bottom:2em;padding-left:25%;padding-right:25%"><p>some simple text</p></body></html>

路线图

  • []漂亮的印花
  • []可插入模板引擎或逻辑
  • []把python2扔掉

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

推荐PyPI第三方库


热门话题
java如何使用spring注释将一个POJO对象注入另一个POJO?   javasocket读取超时异常。增加读取时间   java在创建数组列表实例的类时遇到问题,不断出现相同的错误   JavaJSF<p:dataTable>与Ajaxmethod的问题   java JPA存储库提高findAll()性能   mvc中未为html视图调用java Spring控制器   java如何获取用户对象| Spring Boot |控制器的HTML表单数据|   在eclipse链接jpa中迁移到java 8时间后,derby数据库中出现错误   java 安卓 sqlite接口可以在安卓外部使用吗   当我使用CTRL-ALT+L时,java Android studio正在重新格式化我的评论   java使用Spring呈现Url在jsp中加载div   dispose()Selenium中的java错误   java“找不到符号[method name]”,尽管方法已声明   java在文件中查找一行并将其删除   JeroMQ从Java客户端向Python服务器发送消息   java如何在鼠标悬停时在Tapestry 5.3.6调色板组件中显示选项文本的工具提示(标题)?   java从Google搜索页面获取所有搜索结果   文件请有人解释我这个JAVA代码的输出不要运行这个代码它会窃取密码