阿九文本(a9text)介绍和演示
^^^^^^^^^^^^^^^^^^^^^^^^^^
- 作者: 史荣久(trydofor.com)
- 授权: 共同创作
- 创建: 2007-09-06
- 修改: 2007-09-06
\- 这个是info的转义,被解析成列表
==================================================
0. 目录
^^^^^^^^
[[<=$INDEX]]
1. 自述
^^^^^^^
1.1. 缘起
^^^^^^^^^
想了很久,也不知道怎么给a9text一个确切的定义,因为它本身就缘起于
比较另类的需求----个人的需求,就是为了写手册和文档,简单的,
方便阅读,修改和使用的,而且能适应cvs进行版本比较.
这样office不适合;wiki很简洁,但需要服务器支持;docbook就更不用说了...
有一些优秀的东西进入了我的视野,比如asciidoc,但是还不够个性化.
因为手册和文档,经常有命令,代码,最好能够标亮,而且如果有密码等,还需要加密.
在上面的特定环境下,便跌跌撞撞的有了a9text的想法.
目前,a9text支持了所有上面提到的内容,而且方便到只要有记事本,浏览器,
就可以轻松的读写你自己的手册 :D
1.2. 描述
^^^^^^^^^
a9text是一组文本格式的定义,实现和工具,使text文档的阅读,书写和转换更加便利.
如果我不能够用非常简练的一句话来描述a9text,那么也就不能很好的让大家理解.
当然,a9text不是产品,只是希望和我有同样需求的人能更自由些.
1.3. 特点
^^^^^^^^^
* 纯文本的,不依赖于平台和语言.
* 编码是UTF-8的,否则可能出现乱码.
* 保持text基本特征(如换行),即文本就是好的文档.
* 绿色的,不需要安装程序和垃圾文件.
1.4. 功能
^^^^^^^^^
* 文字修饰,加粗,倾斜,下划,删除等.[[=>#SECT:2.]]
* 链入,用来合并文本,导入图片,动画等[[=>#SECT:2.2.]]
* 链出/锚点,用来在文章内导航和指向外部链接[[=>#SECT:2.3.]]
* 字典和提示,用来定义和解说[[=>#SECT:4.]]
* 列表(无序)和步骤(有序).[[=>#SECT:6.]]
* 段落和章节管理(目录生成).[[=>#SECT:3.]]
* 区域扩展,目前支持表格,源代码,AES加密等.[[=>#SECT:8.]]
1.5. 补充
^^^^^^^^^
本文档只是一些演示和简单应用,更详细和精确的说明,请参考[[a9text3.2定义=>./a9text-spec_3.2.txt]]
其中,包括字符,空白,缩排,行,转义等都有明确说明.
2. 模式演示
^^^^^^^^^^^
2.1. 修饰模式
^^^^^^^^^^^^^
\[![加粗]][![加粗]]
\[/[倾斜]][/[倾斜]]
\[_[下划]][_[下划]]
\[-[删除]][-[删除]]
\['[上标]]['[上标]]
\[,[下标]][,[下标]]
\[%150[放大150]][%150[放大150]]
\[#FF0000[前景红色]][#FF0000[前景红色]]
\[&00FF00[背景绿色]][&00FF00[背景绿色]]
\[!/_%150#FF0000&00FF00[背景绿色前景红色加粗倾斜下划放大150]]\
[!/_%150#FF0000&00FF00[背景绿色前景红色加粗倾斜下划放大150]]
2.2. 链入模式
^^^^^^^^^^^^^
在下行插入todos.txt的内容
[[<=../../../impl_javascript/todos.txt]]
在下行插入图片(gif/png/jpg/bmp)
[[<=../../../a9text.png]]
[[<=../../../a9text.png]] <== 这个是文字环绕的图片,
当文字折行的时候,你可以看到效果,如果不折行,
就会和图片在同一行啦 :)
在下行插入flash(swf)
[400*200[learn2earn<=../../../res/private/learn2earn.swf]]
链入的图片或flash如果有名字,将可以被作为锚点引用.
一般说法,就是"如xxxx图所示".
引入变量"作者":[[<=$作者]]
2.3. 链出模式
^^^^^^^^^^^^^
简化形式
http: http://a9text.sf.net
ftp: ftp://admin@127.0.0.3/
mail: admin@trydofor.com
常规套路
\[[=>地址]][[=>地址]]
\[[显示名=>地址]][[显示名=>地址]]
以图片链接到swf [[<=../../../a9text.png=>../../../res/private/learn2earn.swf]]
显示名和链接地址不同 [[a9text-spec_3.2=>./a9text-spec_3.2.txt]]
[[home=>http://a9text.sf.net]]
锚点
定义锚点anchor [[anchor=>]]
使用章节名到"5.章节"的链接 [[=>#SECT:5.]]
使用"第5节"到"5.章节"的链接 [[第5节=>#SECT:5.]]
使用字典名到"多行字典"的链接 [[=>#DICT:多行字典]]
使用"字典"到"多行字典"的链接 [[字典=>#DICT:多行字典]]
使用区域名到"代码1"区域的链接 [[=>#AREA:代码1]]
使用"端口映射"到"代码1"区域的链接 [[端口映射=>#AREA:代码1]]
使用锚点名到"自定义锚点"的链接 [[=>#HASH:自定义锚点]]
使用"我的锚点"到"自定义锚点"的链接 [[我的锚点=>#HASH:自定义锚点]]
使用链入名到"learn2earn"的链接 [[=>#JOIN:learn2earn]]
使用"学与得"到"learn2earn"的链接 [[学与得=>#JOIN:learn2earn]]
a9text元素的锚点链接,有一些规则.
#SECT:章节序号
#DICT:字典关键字
#AREA:区域名字
#HASH:锚点名
#JOIN:链入图片或flash的名称
2.4. HTML模式
^^^^^^^^^^^^
[*htm[
]]
2.5. 混合模式
^^^^^^^^^^^^^
[!/-%150#FF0000&00FF00[背景绿色前景红色加粗['[上标]]倾斜删除线]]普通文字,带]]的
]]]]]]]]]]]]]][!/_%150#FF0000&00FF00[背景绿色前景红色加粗['[上标]]倾斜下划
]]普通文字,带]]的
2.6. 综合
^^^^^^^^^
文本模式[!#FF0000[前景红色加粗[[显示名=>
地址]]]][[<=
./readme.txt]][!/_%150#FF0000&00FF00[
背景绿色前景红色加粗倾斜下划]]
3. 段落演示
^^^^^^^^^^^
3.1. 物理行
^^^^^^^^^^^
这是一个物理行,没有' '和奇数个'\'在行尾
3.2. 空行和分割线
^^^^^^^^^^^^^^^^^
--------------------
====================
####################
3.3. 软换行
^^^^^^^^^^^
以空格表示的软换行(1' ')
以空格表示的软换行(2' ')
以反斜线表示的软换行(1'\')\
以反斜线表示的软换行(3'\')\\\
以上会合成一个物理行.
这个不是软换行(2\)\\
这个是物理行.
3.4. 综合
^^^^^^^^^
会自动合并软换行的综合段落:\
[![加粗显示名=>
地址]][[<=
./readme.txt]][!/_%150#FF0000&00FF00[
背景绿色前景红色加粗倾斜下划]]
[[自定义锚点=>]]
4. 字典演示
^^^^^^^^^^^
作者:: 臭豆腐[trydofor]
多行字典:: 对应的字典值
可以通过\[[<=$关键字]]引入到当前位置.
关键字中不能包":]".
换行字典::
换行了的内容
[![还可以放加粗模式]]
这才是第二行.
带冒号的字典 ::: 能看到冒号吧.
4.1. 提示
^^^^^^^^^
提示是特殊的字典,不能被引用,不自动缩排.
[NOTE]:: 单行提示.
[WARN]::
提示不支持自动缩排,
保留文本原来的缩进,这是考虑到作者的自由排版.
[NOTE :: 这不是字典.
NOTE] :: 这也不是字典.
5. 区域演示
^^^^^^^^^^^
区域是需要扩展支持的,通用格式如下,
其中name用来作为锚点引用,但不显示.结束线可以被转义.
=========== text name : info ==============
args: arg1; arg2=val2;
arg3=val3
\================================================
上面是转义的横线,下面才是真正的结束
=================================================
a9text所支持的区域演示,请参见[[=>#SECT:8.]]
6. 列表演示
^^^^^^^^^^^
6.1. 条目
^^^^^^^^
*) 条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1条目1
*) 条目2-1
条目2-2
*) 条目3
* 条目实心点
+ 实心方块
- 空心圈
6.2. 步骤
^^^^^^^^
1. 步骤1
2) 步骤2
a. 步骤a
b) 步骤b
A. 步骤A
B) 步骤B
6.3. 嵌套
^^^^^^^^
1) 步骤1
2) 步骤2
3) 步骤2-1
*) 二级条目1
*) 二级条目2
*) 二级条目3
a) 三级步骤a
b) 三级步骤b
c) 三级步骤c
*) 条目1
1) 二级步骤1
2) 二级步骤2
3) 二级步骤3
7. 转义
^^^^^^^
\------------------------------
\==============================
\##############################
\0.0. 转义章节
\[![=>转义链出]][![=>带括弧的链出\]]]]
段落的转义\\\
应该显示成1个'\'
*) 真条目列表1
*) 真条目列表2
\*) 转义条目列表
\*) 转义条目列表
*) 真条目列表3
\1) 转义步骤列表
转义字典\:: 转义的:)
\=========== text : 一个转义的文本 ==============
args: arg1; arg2=val2; arg3=val3
\================================================
上面是转义的横线,下面才是真正的结束
\=================================================
=========== text : 一个转义的文本 ==============
\args: arg1; arg2=val2; arg3=val3
\================================================
上面是转义的横线,下面才是真正的结束
=================================================
8. 支持的区域
^^^^^^^^^^^^^
8.1. 简单文本
^^^^^^^^^^^^^
.................
简化文本[![加粗无效]]
.................
8.2. 简单表格
^^^^^^^^^^^^^
================ table: simple-table ================
表头1 表头2 表头3
行1列1 行1列2 行1列3
行2列1 行2列2 行2列3
=====================================================
============ table:bad-blank ==============
head1 head2 head3 head4
col1 col2 col3 col4
col1 col3 col4
col2 col3 col4
col1 col2 col3 col4
======================================
========== table:standard-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 |
==========================================
8.3. 控制台
^^^^^^^^^^^
=============== tty 代码1:端口映射 =================
/*
加粗文字为标准输入
红色文字为错误输出
蓝色文字为标准输出
绿色文字为注释内容
*/
iptables -L // 查看当前防火墙规则
> Chain INPUT (policy ACCEPT)
> target prot opt source destination
> REJECT all -- 10.0.172.0/24 anywhere reject-with icmp-port-unreachable
>
> Chain FORWARD (policy ACCEPT)
> target prot opt source destination
>
> Chain OUTPUT (policy ACCEPT)
> target prot opt source destination
#清空防火墙,如果存在的话
/sbin/iptables -F -t nat
/sbin/iptables -F INPUT
# 执行一次就可以了
echo "1" > /proc/sys/net/ipv4/ip_forward
#端口映射
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
/sbin/iptables -t nat -A PREROUTING -p tcp -m tcp --dport 55000 -j DNAT --to-destination 10.0.172.210:50000
/sbin/iptables -t nat -A PREROUTING -p tcp -m tcp --dport 55001 -j DNAT --to-destination 10.0.172.209:50000
================================================
8.4. c 代码
^^^^^^^^^^^
============== c : 7zAlloc.c =====================
/* 7zAlloc.c */
#include
#include "7zAlloc.h"
/* #define _SZ_ALLOC_DEBUG */
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
#ifdef _SZ_ALLOC_DEBUG
#ifdef _WIN32
#include
#endif
#include
int g_allocCount = 0;
int g_allocCountTemp = 0;
#endif
void *SzAlloc(size_t size)
{
if (size == 0)
return 0;
#ifdef _SZ_ALLOC_DEBUG
fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount);
g_allocCount++;
#endif
return malloc(size);
}
==================================================
8.5. c++ 代码
^^^^^^^^^^^^^
============== cpp : ArchiveExports.cpp =====================
// ArchiveExports.cpp
#include "StdAfx.h"
#include "../../Common/ComTry.h"
#include "../../Common/Types.h"
#include "../../Windows/PropVariant.h"
#include "../Common/RegisterArc.h"
#include "IArchive.h"
#include "../ICoder.h"
#include "../IPassword.h"
static const unsigned int kNumArcsMax = 32;
static unsigned int g_NumArcs = 0;
static const CArcInfo *g_Arcs[kNumArcsMax];
void RegisterArc(const CArcInfo *arcInfo)
{
if (g_NumArcs < kNumArcsMax)
g_Arcs[g_NumArcs++] = arcInfo;
}
DEFINE_GUID(CLSID_CArchiveHandler,
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00);
#define CLS_ARC_ID_ITEM(cls) ((cls).Data4[5])
static inline HRESULT SetPropString(const char *s, unsigned int size, PROPVARIANT *value)
{
if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0)
value->vt = VT_BSTR;
return S_OK;
}
==================================================
8.6. bash 代码
^^^^^^^^^^^^^^
============== bash : test.sh =====================
#newgame
function New_game () {
kill -9 $displaypid >/dev/null 2>&1
if [[ "$1" == "over" ]]
then
exec $(dirname $0)/$(basename $0)
else
echo "$level $score $life $length $runtime" > $vartmp
exec $(dirname $0)/$(basename $0) display
fi
}
==================================================
8.7. java 代码
^^^^^^^^^^^^^^
============== java : test =====================
package com.trydofor.a9text.test;
/************************************************************
* @author : Shi Rongjiu (www.trydofor.com)
* @version : 2008-2-18 / $Revision: 1.30 $
* @see : requires/documents
* ====================== change-logs =======================
* $Log: not supported by cvs2svn $
* Revision 1.29 2008/03/23 13:25:05 trydofor
* des->aes
*
* Revision 1.28 2008/03/21 03:36:31 trydofor
* dict
*
* Revision 1.27 2008/03/21 03:03:09 trydofor
* demo
*
* Revision 1.26 2008/03/20 14:14:40 trydofor
* doc
*
* Revision 1.25 2008/03/20 05:34:37 trydofor
* guide
*
* Revision 1.24 2008/03/19 12:48:50 trydofor
* done
*
* Revision 1.23 2008/03/19 12:11:55 trydofor
* check
*
* Revision 1.22 2008/03/18 12:37:17 trydofor
* des
*
* Revision 1.21 2008/03/18 12:29:41 trydofor
* des
*
* Revision 1.20 2008/03/17 12:19:29 trydofor
* goo
*
* Revision 1.19 2008/03/12 06:30:50 trydofor
* xx
*
* Revision 1.18 2008/03/11 12:58:07 trydofor
* gogo
*
* Revision 1.17 2008/02/29 02:45:07 trydofor
* a9text
*
* Revision 1.16 2008/02/18 06:27:12 trydofor
* live in java
*
************************************************************/
public abstract class Live {
public abstract void health();
public abstract void happy();
public abstract void hope();
public abstract void work();
public abstract void earn();
public abstract void love();
public abstract void thank();
public abstract void think(Throwable t);
public abstract void learn();
private volatile boolean live;
public final void live()
{
while(live)
{
try
{
health();
happy();
hope();
work();
earn();
love();
thank();
}
catch(Throwable t)
{
think(t);
}
finally
{
learn();
}
}
}
}
==================================================
8.8. sql 代码
^^^^^^^^^^^^^
============== sql : test =====================
SELECT COUNT(*), 1+0.01 FROM USER -- comment1
GO
INSERT INTO USER(`HOST`, USER, PASSWORD) /*comment2*/
VALUES('', '', NULL) // comment3
GO
==================================================
8.9. aes 加密域
^^^^^^^^^^^^^^^
================== aes : passwd is "没有密码" ================
YcOAwqzDmxgBITAhITAhLcOfw47DkyExMiHDmOaNpei+nxpvXcKSJXDChULCgi0/
UsKqw6McLGXCjxc9wrUkEE3mmZjkuYct57qL5pSa5p6X5qGb5b6055iG5ayD5LuP
woflrZrnjaDlkrTltbDlhqBb5LyiLcObwpbDr8OO5paB5qK655mv6Zmk6K+Lw6jk
uKDlhLzlkZHovInmjpLmmaUt5Yil5L+w5YmEKMORaR/DkWbDvkHDl8Kkw7HCssOt
LeWlruadjeaJveS7huiAkuWmheeVlemcqOW4jeespue6geeaseS7j+WPv+iuieae
hS3mjrfovqR5wrd0aMO7w7oZ6YGu5Lm65LiF5bKu5Lm96ICl5b+OLeWnu+earuis
heWkluWtoOeSkOink8KHB8KmwpVrw5LCquW+m+eHui0TFAITLiPDpOS7j+aYl+S6
suWSsS/ljKvmmJvlu7fmnqEt5ZKg5omH5p6g5ZKf5qOT6Z2h5rCi55iw5LiG6IC8
5pqX6ISi55Sa5LqdFMK/LcK5wpzDkMKMwo3DpCExNjAhITEwISQxwoMw54m854Gj
fMO2LcOLSmbDmMKZwpI2w5oOw5jCvMOnA3l0Ei0x57us5pW55p+v55qfw6jkuqXk
vbTot4zku4/luqbljavlkLXorqDoqJPCpC3DlMK9w43CjUghOSHCgSExMyHnvoHn
oJvmmbAlPV7Cl8O6LeeYr8K95ZOb5Yub5YyL6IKp5YaB546B5Lib56OFN8Kkw5LD
nh/Doy0XYiE5IeS/geaNthDDp0bCjOWeveaduOeKouW9i8OO5aSz5o6QLeijmiEw
IQPljLrml7rmn47lsYrmmJnlpYvnmYLml4zmoZ/DrcK1wq7Chy3Dr1vDpmbCt+e6
t+iLjueapwTkubzpnobopbXlrYnoo7jnq7/lu6Et5ZOP5Zym5Zyg5peT5Lihw7gW
w4HDq1dMw7ESwoXDncOrLXIqwqzli5fogYshMTEhEcOqw64Xw7DDqMKfwqbCp8KH
LTPCizdaSD/CrsOy5pWG5a6k5L+A6aanG+WIiuewnEQt5YC+5pewVuS6r+WKu8KT
5YiI6Zug562qwqE0eMKnw4I9w4EtITMzIcO+BsKyw5XCtUAFw78hMTAhRsOAw6vC
rcOGw48t6ZKq5YeAVeeUvuacquWSgeW4suaUjuafqgPlrYHlhK3lmobniZlH5YmM
LeeWouesgGxSITExIX4Hw7tXM3vCk1o/ek8tGMOSwr/DscOEwqxBWcK4QemTmeWH
k3DplJbngb7CjC3nl6LmnLrln7rml6LnqZHlhrjlrJjoi7rlk67mjJLlk7zlpK7p
gavpkJfmjJUYLTMVw7AlI8O8ITE2MCHCuMOUc8ORwrtqcMKYXC0Fw5dRwrFSwodc
5a+d5YSi5ZKf5o2556WNw4PnlKHmnLDlr60t5LuR5ZKw6KaV6K+kwoPDtGUYw4rD
tXYlBsO2AyExMyEtwrbDhx3CkCEzOSEadsKWV8Kt5Yue6KCzf+aUtOW4oCExNjAh
LeWQmeatrumojkDmnbbluKNHUsO0cAbCnkNCIH0twrNmD8KqOMODM8KawpLCqiEz
OSFJEjTplJfngq8t5ZOY56q56ImM56+C55GfwpTnmZ/lvqfnl4jmibhVwowGw4zC
psKQLcKmHMOITBZ1w4lgITM0IcOCwp3DtsOXwpJXw7otwrjClOWOjeWcsOaLuuWx
oCvnmIPli4vmlIPmj53oo4DmobIX5rit5LqxLeeiiDTDjcOYQOWKn+Wvj+ets8OJ
w5Y8wrDCjGAlIy0hMCFFwql6GcORD07CkA==
==============================================================
8.10. xml 域
^^^^^^^^^^^^
================== xml : ant-build ================
==============================================================