#标记语言 #HTML #标记 #语言 #文本 #命令行界面 #换行

bin+lib doccy

Doccy 是一种简单的基于花括号的标记语言

7 个版本

使用旧的 Rust 2015

0.3.2 2019年12月19日
0.3.1 2019年12月19日
0.3.0 2018年9月22日
0.2.3 2019年12月19日
0.1.1 2018年9月21日

#1625 in 文本处理

Download history 34/week @ 2024-03-31 61/week @ 2024-06-23

61 每月下载量

MIT 许可证

33KB
894

Doccy

Doccy 是一种简单的基于花括号的标记语言,是喜欢 HTML 的功能和灵活性但不喜欢编写 HTML 的人的替代品。

特性

查看最新的文档以获取有关Doccy 语法和提供的 API 的更多信息。

  • 隐式段落和换行
  • 简单的基于花括号的元素语法
  • 支持所有 HTML 主体元素
  • 命令行界面

示例

Rust

extern crate doccy;

use doccy::doccy_to_html;

fn main() {
    match doccy_to_html("your document {em: here}") {
        // <p>your document <em>here</em></p>
        Ok(html) => println!("{}", html),
        Err(error) => {}
    };
}

命令行

# <p>your document <em>here</em></p>
echo "your document {em: here}" | doccy to-html

lib.rs:

Doccy 是一种简单的基于花括号的标记语言,是喜欢 HTML 的功能和灵活性但不喜欢编写 HTML 的人的替代品。

语法

元素

两个花括号之间的任何内容都被视为一个元素。

常规元素

编写元素很简单

{h1: Top-level heading}

渲染为

<h1>Top-level heading</h1>

自闭合元素

某些元素不支持子元素,在这种情况下可以完全省略冒号。例如,换行(<br>)可以写成

{br}

渲染为

<br>

如果您为不支持在 HTML 中自闭合的元素使用此语法,则将渲染关闭标签

{div}

渲染为

<div></div>

预格式化元素

有时需要忽略 Doccy 语法,您可以使用预格式化元素来做到这一点

{pre:#
You can use all of the {brackets} in here and they {em: won't be parsed!}
#}

渲染为

<pre>You can use all of the {brackets} in here and they {em: won't be parsed!}</pre>

这不仅限于 HTML 的 pre 元素,您还可以在任意元素上使用它。

属性

元素名称和冒号之间的任何内容都被期望是属性。

命名属性

具有值的命名属性看起来像

{h1 @class main header: Header}

渲染为

<h1 class="main header">Header</h1>

无值

{input @required}

渲染为

<input required>

包含特殊字符的值必须转义

{h1 @test Bad characters\: \@\#\%\.\{\}: ...}

渲染为

<h1 test="Bad characters: @#%.{}">...</h1>

除非它们是 URL 的一部分

{a @href https://www.example.com: Example}

渲染为

<a href="https://www.example.com">Example</h1>

数据属性

data- 属性的缩写

{pre %lang html: ...}
{pre %html: ...}

渲染为

<pre data-lang="html">...</pre>
<pre data-html>...</pre>

与命名属性一样,特殊字符必须转义。

类属性

class="..." 属性的缩写

{h1.main.header: Header}

渲染为

<h1 class="main header">Header</h1>

Id 属性

id="..." 属性的简写

{h1#main: Header}

渲染为

<h1 id="main">Header</h1>

段落

如果包含在特定上下文中的文本通过两个或更多行中断开,并且只包含内联元素,则这些文本将被视为一个或多个段落。

在文档主体中

This is a paragraph.

{h1: This is a header.}

And this is another.

渲染为

<p>This is a paragraph.</p>
<h1>This is a header.</h1>
<p>And this is another.</p>

在内容元素中

以下元素也会自动包裹段落:articleasideblockquotedivfieldsetfooterformheaderhgroupmainsection

{blockquote: This is a paragraph.

And this is another.}

渲染为

<blockquote>
    <p>This is a paragraph.</p>
    <p>And this is another.</p>
</blockquote>

示例

解析和渲染文档

use doccy::doccy_to_html;

match doccy_to_html("your document {em: here}") {
    // <p>your document <em>here</em></p>
    Ok(html) => println!("{}", html),
    Err(error) => {}
};

直接使用语法和渲染器

use doccy::grammar;
use doccy::render::Renderer;

let mut renderer = Renderer::new();

if let Ok(ast) = grammar::attributes("@href https\\://example\\.com") {
    renderer.attributes(&ast);
}

println!("{}", renderer.output); // href="https://example.com"

依赖项

~770KB