`
trydofor
  • 浏览: 150485 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

阿九文本(a9text v3.1)

阅读更多
标题:: 阿九文本(a9text v3.1)
作者:: 史荣久
授权:: 共同创作
声明:: 无担保无保证:)
创建:: 2007-07-07
修改:: 2007-07-11
================================================================================

目录
    1.      功能介绍
   
    2.      基本约定
    2.1.    字符(char)
    2.1.1.  字符:空白(char_blank)
    2.1.2.  字符:换行(char_line)
    2.1.3.  字符:转义(char_escape)
    2.2.    模式(mode)
    2.2.1.  模式:修饰(mode_trig)
    2.2.2.  模式:链入(mode_join)
    2.2.3.  模式:链出(mode_link)
    2.2.4.  模式:文本(mode_text)
    2.3.    区域(area)
    2.4.    段落(para/paragraph)
    2.4.1.  段落:空行(para_blank)
    2.4.2.  段落:横线(para_line)
    2.5.    字典(dict)
    2.6.    列表(list)
    2.7.    章节(sect/section)
    2.8.    根(root)
   
    3.      区域扩展
    3.1.    区域:文本
    3.2.    区域:加密(area_secret)
    3.3.    区域:表格
    3.4.    区域:*HTML
   
    4.      约定图谱
    4.1.    约定包含图
    4.2.    约定结构图
   
    5.      文本处理
    5.1.    段落
    5.2.    空白
    5.3.    缩进

--------------------------------------------------------------------------------

1. 功能介绍
    a9text是一组文本格式的约定.
    用来提高文本文档的可读性和转换性.

2. 基本约定
  
   为表达方便,这里为ABNF范式(RFC2234)扩展了个正则表达式(regexp)模式,
   完全类似字符串(strings)模式,即,允许在双"/"间直接使用正则表达式.
  
   例如:
   rule1 = /^a*$/
   rule2 = /^/ *"a" /$/
  
   通用规则:
   head_blank = /^[\u0009\u0020\u3000]+/  ;行首空白(/^/ *char_blank)
   digit   = /[0-9]+/
   hexdig  = /[0-9a-fA-F]+/
  
2.1. 字符(char)
    char = /./  ; any char
   
    "字符",是指任意unicode字符集,除以下特殊用途外,所有字符无差别对待.
   
2.1.1. 字符:空白(char_blank)
    char_blank = %x09 / %x20 / %x3000
   
    "字符:空白",是指"水平制表符(u0009)","半角空格(u0020)","全角空格(u3000)".
    a9text的空白处理是基于"半角空格(u0020)"的.
    其中,"全角空格"等效于2个"半角空格","水平制表符"等效于4个"半角空格".
    行首空白的等效"半角空格"数量称为以一个"缩进量(indent)"
   
2.1.2. 字符:换行(char_line)
    char_line = %x0A / %x0D / %x0D.0A
   
    "字符:换行",是指 "\r","\r\n","\n",也称"换行符".
   
    "物理行(physical_line)",是指文本显示上的行.
    "逻辑行(logical_line)",是指语法或语义上的行(也称为"段落").
   
    "软换行(soft_line)",是指在"物理行(physical_line)"行尾,使用" "或"\"
    把多个"物理行(physical_line)"合并成为一个"物理行(physical_line)",
    并忽略相邻行间的"空白".
   
    a9text的处理是基于"逻辑行(logical_line)"的.
   
2.1.3. 字符:转义(char_escape)
    char_escape = "\"
   
    a9text在大多数情况下不需要也不考虑转义,
    但为了描述a9text约定本身,有时需要使用转义.

2.2. 模式(mode)
    mode = 1*char
   
    "模式",是a9text语法上的分组,由至少一个字符组成,是组成a9text的原子单位.

2.2.1. 模式:修饰(mode_trig)
    mode_trig = "[" 1*mode_token "[" 1*char "]]"
    mode_token = "!" / "/" / "_" / "-" / "'" / "," /
                 ("%" 1*digit) / ("#" 6hexdig) / ("&" 6hexdig)
   
    "模式:修饰",实现文本的修饰功能.
    "模式:修饰"内的"物理行(physical_line)",视为"软换行(soft_line)".
    "模式:修饰"内可以包含其他"模式",包括自身.
   
    例如:
    加粗 [![文字]]
    倾斜 [/[文字]]
    下划 [_[文字]]
    删除 [-[文字]]
    上标 ['[文字]]
    下标 [,[文字]]
    前色 [#FFFFF[文字]]
    背色 [&FFFFF[文字]]
    大小 [%50[文字]]
    加粗倾斜红色50%的字 [!/#FF0000%50[文字]]
   
2.2.2. 模式:链入(mode_join)
    mode_join = "[[<=" 0*1"$" 1*char "]]"
   
    "模式:链入",可以在指定位置上导入其他文本或变量.
    "模式:链入"内的"物理行(physical_line)",视为"软换行(soft_line)".
    "模式:链入"内不可以包含其他"模式".
   
    例如:
    [[<=include.txt]] 载入的文本.
    [[<=$自定义变量]] 显示自定义变量
   
2.2.3. 模式:链出(mode_link)
    mode_link = "[[" /[^(=>)]*/ "=>" 1*char "]]"
   
    "模式:链出",可以页面跳转和显示多媒体内容.
    "模式:链出"内的"物理行(physical_line)",视为"软换行(soft_line)".
    "模式:链出"内不可以包含其他"模式".

    例如:
    [[显示名=>]]     作为锚点
    [[=>链接地址]]   以链接地址显示
    [[=>sample.png]]
    [[=>sample.swf]]
    [[=>www.trydofor.com]]
    [[=>admin@trydofor.com]]
    [[显示名=>链接地址]]

2.2.4. 模式:文本(mode_text)
    一组不满足以上"模式" 特征的连续字符,都视为"文本(mode_text)".
    "模式:文本"内不可以包含其他"模式".

2.3. 区域(area)
    area = area_head area_body area_foot
    area_head = head_blank 9*"=" area_type ":" area_info 9*"=" char_line
    area_type = /\*?[^=:\r\n]+/
    area_info = /[^\r\n]+/
    area_body = 1*char
    area_foot = head_blank 9*"=" char_line
   
    "区域",是一块特殊的文字,需要特别处理.
    例如:
    "========= *html:info =========" '*'开头表示功能性模块
    "========= text:info  ========="
    "========= java:info  ========="
    "========= html:info  ========="
    "========= des:info   ========="
   
    其中"area_type"如果以"*"开头,这表示是功能区域(不显示),否则为文本区域.
    区域不可以自包含.
    区域内的文字如何解析需要进一步定义和扩展.

2.4. 段落(para/paragraph)
    para = head_blank *(mode_text / mode_trig / mode_join /
           mode_link / char_line)
   
    "段落",是指一个"逻辑行(logical_line)",是最小的处理单元.
    由行首"空白(char_blank)",各种"模式(mode)"构成和"换行(char_line)"组成.
    "段落"内不可以内嵌其他"段落".
   
2.4.1. 段落:空行(para_blank)
    para_blank = head_blank char_line
   
    "段落:空行",是一种特殊的"段落(para)",自成一段,结束上段,开启下段,
    但不属于上下任何一段.
   
2.4.2. 段落:横线(para_line)
    para_line = head_blank 1*(9*"-" / 9*"=" / 9*"#" ) char_line
   
    "段落:横线",完全类似于"空行(para_blank)",不同的是,他会画一条水平线.
    "-","=","#" 代表着线的宽度,分别为,1,2,4个宽度

2.5. 字典(dict)
    dict = head_blank dict_key *char_blank "::" para
    dict_key   = /[^(::)\r\n]+/
   
    "字典",由行首"空白(char_blank)","::"和"段落(para)"组成.
    用来定义用户变量和说明,可以在"模式:链入(mode_join)"中引用.
   
    "字典"内只能有一个"段落(para)",不可以包含"字典".
   
    "字典键(dict_key)",是不含首尾"空白"的连续字符串.
    "键"必须和"::"在同一"物理行(physical_line)",
    "值"可以不在同一"物理行(physical_line)".
   
    "字典"的转义,只需使用"\::"来代替"::"即可.
   
2.6. 列表(list)
    list = head_blank (list_item / list_step) *char_blank ")" (para / lsit)
    list_item = "*"
    list_step = /[0-9a-zA-Z]/ *("-" /[0-9a-zA-Z]/)
   
    "列表",由行首"空白",列表类型,")"和"段落(para)"组成.
   
    "列表"内只能有一个"段落(para)",可以包含其他"列表".
   
    一组连续的列表,"缩进量(indent)"相同的列表视为同一组.
    "缩进量(indent)"的多少,体现列表间的包含关系(少的包含多的).
   
    "列表" 细分为 "列表:条目(list_item)" 和 "列表:步骤(list_step)"
   
    "列表:条目(list_item)" 是无序列表.
    "列表:步骤(list_step)" 是有序列表,可以使用"a-1","a-2"这样的组合.
   
2.7. 章节(sect/section)
    sect = /^/ sect_level sect_title char_line sect_text
    sect_level = 1*(digit ".")
    sect_title = /[^\r\n]+/
    sect_text  = 1*(area / list / dict / para)
   
    "章节",内可包含之前所以"约定","章节"内不可包含"章节".
    "章节"不可以有前置"空白".

2.8. 根(root)
    root = 1*(area / list / dict / para / sect)
   
    "根",是a9text的最高约定,领起其他约定,是一个a9text的开始.
    一个a9text中"根(root)"只能有一个,可以包含任何其他"约定".

3. 区域扩展
   "区域(area)" 的内容是需要进一步定义的.a9text预定义了如下简单"区域(area)".

3.1. 区域:文本
    "区域:文本"内的文本,不做任何解析,保留原样显示.
    格式如下:
    "========= text:info ========="
  
3.2. 区域:加密(area_secret)
    "区域:加密"内的文本是加密的密文(des算法).
    格式如下:
    "========= secret:des,info ========="

3.3. 区域:表格
    "区域:表格",实现最粗糙的表格.
    格式如下:
   
    "========= table:表格名 ========="
    ! r1-c1 | r1-c2! r1-c3|
    +--------------------------------
    |r2-c1  |r2-c2 |r2-c3 |
    +--------------------------------
    ||  r3-c1&2    |+ r3&4-c3 |
    +--------------------------------
    |r4-c1 | r4-c2 |+ r4&4-c3 |
    "================================"
   
    '!'表示加粗,'|'表一般显示,r1-c1,r1-c3加粗显示
    空格表对齐:r1-c1中对齐,r1-c2右对齐,r1-c3左对齐,默认左对齐.
    连续'|'为列合并,左起
    '|+'为行合并,上起

3.4. 区域:*HTML
    "区域:*HTML",内的文本,做为html代码使用.
    格式如下:
    "========= *html: info ========="

4. 约定图谱

4.1. 约定包含图
 
   root
    |
    +--------------------------------------------- sect
    |                                               |
    +---------------------------------- dict        +-- area
    |                                    |          |
    +------------------------ list       +-- para   +-- list
    |                          |                    |
    +------------ para         +-- list             +-- dict
    |              |           |                    |
    +-- area       +-- mode    +-- para             +-- para
    |    |              |
    |    +-- char       +-- mode_trig
    |                   |
    |                   +-- mode_join
    |                   |
    |                   +-- mode_link
    |                   |
    |                   +-- mode_text
   
    在a9text的约定中,除了"区域(area)"和"模式(mode)"直接与"字符(char)"包含外,
    其他约定都是以"段落(para)"为最小处理单元.
   
4.2. 约定结构图

    a9text = root
    root = 1*(sect / dict / list / para / area)
    sect = 1*(dict / list / para / area)
    dict = para
    list = 1*(list / para)
   
    一个a9text有且只有一个"根(root)"构成.
    "根(root)"中至少包含(无序)(sect/dict/list/para/area)中的一个.
    "章节(sect)"中至少包含(无序)(dict/list/para/area)中的一个.
    "字典(dict)"中必须包含一个para.
    "列表(list)"中至少包含(无序)(list/para)中的一个.
   
    "段落(para)"中至少包含一个"模式(mode)".
    "模式(mode)"中至少包含一个字符.
    "区域(area)"中至少包含一个字符.

5. 文本处理

5.1. 段落

    "段落(para)"在语法上讲,就是一个"逻辑行(logical_line)".而a9text是基于
    "逻辑行(logical_line)"的,因此"段落(para)"是a9text的最小处理单元.
   
    除了"区域(area)"是自定义解析规则外,段落划分遵循这样的原则,即:
    1) 一个"物理行"就是视为一个"逻辑行",也就是"段落(para)".
    2) "软换行"可以把多个"物理行"连接成一个"物理行".
    3) 除"模式:文本"外的"模式"内部的"物理行",自动视为"软换行".
   
5.2. 空白
   
    为了统一和方便,a9text中的"空白"都会转换成"半角空格"处理,
    "全角空格"等效于2个"半角空格","水平制表符"等效于4个"半角空格".
   
    "软换行",会自动去掉相邻"物理行"间的"空白".

5.3. 缩进
   
    "物理行"行首"空白"的等效"半角空格"数,称作"缩进量",用来表示层次或缩进.
   
    "区域"的缩进,表示位置.
    "段落"的缩进,表示段落的位置.
    "列表"的缩进,即表示位置,也表示层次.
    "字典"的缩进,表示位置.
    "章节"和"跟",没有缩进.
分享到:
评论
1 楼 trydofor 2007-07-11  
经过反复琢磨,敲定了3.1版,可以进一步编码了.
论坛页面对空格的处理不是很理想,因此版式出现了变形.对a9text和a9engine关注的同学,请到http://a9engine.sf.net
同步cvs最新版.
希望大家多提宝贵建议和意见和分享经验.

相关推荐

    爱威A9前级效果器调试软件V1.4版

    《爱威A9前级效果器调试软件V1.4版》详解 在音频设备的世界里,精确的调试是确保声音质量与效果的关键步骤。爱威A9前级效果器作为一款专业音响设备,其V1.4版的调试软件正是为了满足这一需求而设计的。本文将深入...

    a9text-开源

    a9text不仅是一种文本文档规范,它还包含一系列的实现和工具,旨在简化文档的编写、阅读和翻译过程,同时支持将文档转化为其他常见的格式如Docbook、HTML和PDF。 一、a9text文档规范 a9text的核心在于其简洁而强大...

    ACFLY A9飞控用户手册(V2.2)1

    **ACFLY A9飞控用户手册(V2.2)**是广州博睿创新科技有限公司为用户提供的一款关于A9飞行控制器的详细操作指南。本手册旨在帮助用户安全、有效地使用和开发这款飞控系统。 **一、使用建议与安全提示** 1. 在进行...

    pmsm3_1_ti_0.rar_A9G_L7Z_PMSM3.1_TI 电机_电机控制算法

    TI官方的电机程序套件 包括电机控制所有算法

    A9/A9G的STM32驱动程序(程序例子)

    在本文中,我们将深入探讨如何为A9/A9G开发板编写和使用STM32驱动程序,以及GPS_V1.2可能涉及的相关功能。 首先,A9和A9G通常指的是基于ARM Cortex-A9处理器的开发板,如SAMA5D3X或ZYNQ-7000系列。这些芯片不仅具有...

    A9 标准网络版 V9.2.04破解补丁

    A9 标准网络版 V9.2.04破解补丁,注意:A9CWZD在CWZD文件夹中

    cyclone v A9引脚定义

    在探讨"Cyclone V A9引脚定义"这一主题时,我们深入研究了Altera Cyclone V系列FPGA中A9型号的详细引脚配置,这不仅对于硬件工程师设计电路板至关重要,也是理解和优化FPGA性能的基础。以下是对Cyclone V A9引脚定义...

    FS2116A适用3.7V升压5V3.5A9V2A12V1.5A升压芯片

    FS2116A适用3.7V升压5V3.5A9V2A12V1.5A升压芯片

    Cortex-A9-MPCore-Technical-Reference-Manual.rar_A9_ARM A9_arm mp

    《Cortex-A9 MPCore 技术参考手册》是针对 ARM 公司设计的一款高性能处理器内核——Cortex-A9 的详细技术文档。Cortex-A9 是基于 ARMv7 架构的多核处理器,广泛应用于移动设备、嵌入式系统和服务器等领域,具有高...

    安霸顶级A9芯片介绍

    安霸顶级A9芯片是一款专为高端视频处理设计的处理器,具备强大的4K视频处理能力,能够满足高端用户群体在开发高清视频产品方面的需求。A9芯片是安霸半导体公司推出的高性能SoC(System on Chip),它支持多种先进的...

    RZ文本加密 v2.0.zip

     RZ文本加密 v2.0更新内容: 1.更新至ASE256对称加密,加密内容不满足16字节等比长度将用随机字符填充。 2.增加每60秒自动保存功能。 3.增加文本编辑时锁定/解锁 防止误输入。 4.可随时将文本导出至txt文件。 ...

    XK3190-A9+耀华称重仪表说明书含通信协议(注意耀华A9有2个版本:A9,A9+)

    《XK3190-A9+耀华称重仪表说明书含通信协议》是一份详细介绍耀华称重仪表XK3190-A9+使用、安装和维护的专业文档,适用于物联网领域的应用。该说明书提供了最新的技术参数和操作指南,确保用户能够正确地配置和使用这...

    微信小程序基础text空格省略号

    在微信小程序开发中,`text`组件是用于展示文本内容的基本元素。本篇文章将深入探讨如何在`text`组件中处理字与字之间的空格、插入符号,以及当文本过长时如何优雅地使用省略号进行显示。 一、添加空格 在微信小...

    cortex_a9-DOC.rar_arm A9 用户手册_arm a9 开发手册_arm 编程指南_cortex-a9_neo

    ARM CORTEX A9 开发手册打包下载 部分为中文手册,包含《NEON 向量化编译器指南》《编译器用户指南》《编译器参考指南》《汇编程序指南》

    ESP-12S-A9-A9G-GPRS-Node-v1.0-masterg

    标题 "ESP-12S-A9-A9G-GPRS-Node-v1.0-master" 提供的信息表明,这是一个关于基于ESP模块(可能是ESP8266或ESP32的变体ESP-12S)与A9G模块集成的项目,用于实现GPRS功能的节点设备,版本为1.0,并且是基于Arduino ...

    纽曼A9HDAV1.4.07刷机固件

    本文将详细解析“纽曼 A9HD 固件 刷机 华芯飞系统烧录工具(CC1600 V2.26)”这一主题,帮助用户了解如何安全、有效地进行固件升级。 1. 系统版本与固件升级的意义 纽曼A9HD固件的V1.4.07版本代表着系统的一次重要...

    A9G模组原理图库_pullobg_A9G_

    标题"A9G模组原理图库_pullobg_A9G_"所指的,是针对A9G模块的一个电路设计资源,其中包含了该模块的原理图库文件。这个库文件通常用于电子设计自动化(EDA)软件,如Altium Designer、Cadence等,设计师可以利用这些...

    A9CAD(二维CAD软件)v2.2.1英文安装免费版

    A9CAD是一款非常好用的二维CAD制图工具,与我们平常使用的autocad软件相比A9CAD拥有体积小巧、界面简洁、功能强大的特点,支持DWG/DXF等格式的图纸浏览和编辑,并支持对移动,缩放,旋转,爆炸画,修剪,圆角以及...

Global site tag (gtag.js) - Google Analytics