Amazon Best VPN GoSearch

OnWorks 网站图标

mp4h - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 mp4h

这是 mp4h 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


mp4h - HTML 文档的宏处理器

VERSION


本文档描述了 mp4h 版本 1.3.1。

引言


- mp4小时 软件是专门设计用于处理 HTML 文档的宏处理器。
它允许使用 HTML 作者熟悉的语法进行强大的编程构造。

该软件基于 元HTMLhttp://www.metahtml.org/>”,作者:Brian J.
Fox,即使两种语法看起来相似,源代码也完全不同。 的确,一个
的子集 元HTML 被用作更复杂程序的一部分, WML (网站元
语 ”http://www.thewml.org/>") 由 Ralf S. Engelschall 撰写,我
自 1999 年 XNUMX 月开始维护。由于许可原因,很难破解 元HTML 所以
我决定编写自己的宏处理器。

我没有从头开始重写它,而是更喜欢使用另一个宏处理器引擎。 一世
选择了 GNU m4http://www.gnu.org/software/m4/>”,由 Rene Seindal 撰写,因为
它的众多优点:该软件稳定、健壮且文档齐全。 这个
版本的 mp4小时 源自 GNU m4 版本 1.4n,这是一个开发版本。

- mp4小时 软件不是 HTML 编辑器; 它的独特目标是提供一种简单的方法
在 HTML 文档中定义自己的宏。 没有计划添加功能
自动生成有效的 HTML 文档,如果你想清理你的代码或验证
它,只需使用像 tidy 这样的后处理器“http://www.w3.org/People/Raggett/tidy/>”。

指挥 LINE 配置


可选参数括在方括号内。 所有选项同义词都有一个
类似的语法,所以当长选项接受参数时,短选项也接受。

语法调用是

mp4h [选项] [文件名 [文件名] ...]

选项如下所述。 如果没有指定文件名,或者它的名字是“-”,那么
在标准输入上读取字符。

操作 模式
- 帮帮我 显示帮助信息并退出
- 版 产量 mp4小时 版本信息并退出
-E --致命警告 第一次警告后停止执行
-Q - 安静的 - 沉默的 抑制内置函数的一些警告
-S --safety-level="NUMBER" 禁用有风险的功能; 0 表示不过滤,1 表示禁用
"execute" 和 2 也禁用此功能以及所有文件系统相关功能:"file-exists",
“真实路径”、“获取文件属性”、“目录内容”和“包含”。

预处理器 功能
-I --include="目录" 在此目录中搜索包含和包
-D --define="名称“[=值]”" 将变量 N​​AME 设置为 VALUE,或者为空
-U --undefine="命令" 删除内置命令
-s --同步线 生成`#line NO "FILE"' 行

分析器 功能
-c --caseless="NUMBER" 根据“NUMBER”的位设置大小写敏感。 一个空
bit 表示符号区分大小写,bits 定义如下:0 代表标签,1 代表
变量和 2 个实体。 默认值为 3,即只有实体区分大小写。
-e --encoding="名称" 指定文档编码。 有效选项是“8bit”(默认)或
'utf8'。
-X --expansion="NUMBER" 根据“NUMBER”的位设置解析器行为

NUMBER 是以下各项的组合

1 不解析未知标签
2 假设未知标签很简单
4 标签名称中的尾随星号不会使该标签变得简单
8 不匹配的结束标签关闭所有以前不匹配的开始标签
16 将反斜杠解释为 printf
32 删除标签属性中的尾部斜杠
64 不要删除标签名称中的尾随星号
128 不要删除标签名称中的前导星
256 不要在标签属性的斜杠前添加空格
1024 禁止有关错误嵌套标签的警告
2048 抑制有关缺少尾部斜杠的警告

在 1.3.1 版本中,默认值为 3114=2+8+32+1024+2048。

极限 控制
-H --hashsize="PRIME" 设置符号查找哈希表大小(默认 509)
-L -nesting-limit="NUMBER" 更改人工嵌套限制(默认 250)

调试
-d --debug="标志" 设置调试级别(没有标志意味着`aeq')
-t --trace="名称" 跟踪 NAME 何时将被定义
-l --arglength="数字" 限制宏跟踪大小
-o --error-output="文件" 重定向调试和跟踪输出

标志是以下任何一个:

t 跟踪所有宏调用,而不仅仅是调试
a 显示实际参数
e 显示扩展
c 显示前取款、取款后和通话后
x 添加唯一的宏调用 id,与 c 标志一起使用
f 说出当前的输入文件名
l 说当前输入行号
p 显示路径搜索的结果
m 显示模块操作的结果
i 显示输入文件的变化
V 以上所有标志的简写

商品描述


- mp4小时 软件是一个宏处理器,这意味着关键字被其他
文本。 本章描述了所有原语。 作为 mp4小时 专为
HTML 文档,其语法与 HTML 非常相似,带有标签和属性。 一
重要的特性在 HTML 中没有等价物:注释直到行尾。 所有文字
后面的三个冒号被丢弃直到行尾,比如

;;; 这是一条评论

功能
请注意: 本文档中的所有示例均通过 mp4小时 带有扩展标志
设置为零(参见文档末尾对可能的扩展标志的描述),它是
为什么简单标签包含尾部斜杠。 但 mp4小时 可以输出纯 HTML 文件与其他
扩展标志。

定义新标签是最常见的任务 mp4小时. 与 HTML 一样,宏
名称不区分大小写,除非使用“-c”选项来更改此默认行为。
在本文档中,仅使用小写字母。 有两种标签:
简单而复杂。 一个简单的标签具有以下形式:



而复杂的标签看起来像:


身体


从 0.9.1 版开始, mp4小时 也知道 XHTML 语法,因此您的输入文件可能符合 HTML
或 XHTML 语法。 在本手册中,我们采用后者,这就是为什么简单的标签具有
属性中的尾部斜杠。 如果你想用这个输入文件生成 HTML 文件,你
可以选择适当的“--expansion”标志或使用像 tidy 这样的后处理器
http://www.w3.org/People/Raggett/tidy/>”。

当一个简单的标签被定义为 mp4小时, 即使尾部斜杠是
省略,因为 mp4小时 知道这个标签很简单。 但始终是一个好习惯
将尾部斜杠附加到简单标签。

在下面的宏描述中,斜杠表示一个简单的标签,一个 V 字母表示
逐字读取属性(无扩展)(参见宏扩展一章)
更多细节)。

· 定义标签

"姓名” “[attributes=verbatim]”“[endtag=required]”“[whitespace=delete]”

此功能可让您定义自己的标签。 第一个参数是命令名称。
替换文本是函数体。

来源:

酒吧


输出:

酒吧

即使空格对 HTML 语法的影响通常很少,但重要的是要注意

酒吧




酒吧


不等价,后一种形式包含两个不存在于
以前的。

“空白=删除”
替换文本中的某些空格被抑制,特别是任何前导或尾随
空格和未包含在尖括号内的换行符。

“结束标签=必需”
定义复杂标签

来源:

酒吧


输出:

酒吧

来源:

;;;
身体是:%body
这里是

输出:

身体是:在这里

“属性=逐字”
默认情况下,在替换文本之前扩展属性。 如果使用此属性,
属性被插入到替换文本中而不扩展。

来源:

曲子

身体:%Ubody
属性:%Uattributes

">开始了

输出:

身体:我们开始
属性:txt=

· 提供标签

"姓名” “[attributes=verbatim]”“[endtag=required]”“[whitespace=delete]”

此命令与上一条类似,只是如果此命令不执行任何操作
命令已经定义。

· 让我们”

"新=旧”

复制一个函数。 此命令可用于在重新定义宏定义之前保存宏定义。

来源:






输出:

两个人

· undef "S"

"姓名”

删除命令定义。

来源:





输出:



· 挂机

"姓名” "[position=before|after]" "[action=insert|append|replace]"

将文本添加到预定义的宏。 这种机制允许修改现有的宏
无需担心它的类型,无论它是否复杂。

来源:








输出:

前10


·获取钩子“S”

"姓名” “[位置=之前|之后]”

打印宏的当前钩子。

来源:

用 position=before 插入的文本: !
插入位置=之后的文本: !

输出:

用 position=before 插入的文本:
前!
插入位置=之后的文本:
后!

· 属性-引用“S”

“%属性”

与 %attributes 类似,除了 "attr=value" 对用双引号打印
围绕属性值,如果打印某些文本,则添加前导空格。

来源:

;;;
%属性
/>




输出:

id=logo src=logo.gif name=标志 alt=我们的标志




· 属性-提取“S”

"姓名1" “[,name2[,name3...]]" “%属性”

从 %attributes 中提取匹配任何名称的“attr=value”对 name1, name2....

来源:


/>



输出:



· 属性-去掉“S”

"姓名1" “[,name2[,name3...]]" “%属性”

从 %attributes 中删除匹配任何名称的“attr=value”对 name1, name2....

来源:


/> />



输出:



请注意: 前两个函数是特殊的,因为与所有其他宏不同,它们的
扩展不形成一个组。 这是解析结果列表所必需的
属性。

在这两个函数中,属性的名称可以是正则表达式。 主要目标
这些原语是为了帮助编写宏接受任何类型的属性而无需
宣布他们。 一个典型的例子是

来源:



/>
/>
href="/ ">


<href class=web url="http://www.foo.com" 姓名="欢迎" />

输出:

<a class="web"
href="/http://www.foo.com">欢迎

但是我们现在要添加一个图像属性。 所以我们可以写

来源:



/>
/>
href="/ ">

/>
源代码=“/ " alt=" " 边框=0 />

/>



<href class=web url="http://www.foo.com" name="欢迎" image="foo.png"/>

输出:

<a class="web"
href="/http://www.foo.com">
src="/foo.png" loading="lazy" alt="Welcome" border=0 />

我们需要一个机制来告诉 mp4小时 某些属性是指特定的 HTML 标签。 一种
解决方案是在属性前面加上标签名称,例如

来源:



/>
/>
href="/ ">

/>
源代码=“/ " alt=" " />

/>



<href a:class=web img:id=logo img:border=1
网址="http://www.foo.com" name="Welcome" image="foo.png" loading="lazy" />

输出:

<a a:class="web"
href="/http://www.foo.com">
src="/foo.png" loading="lazy" alt="欢迎" />

此示例显示可以在属性名称中使用正则表达式,但它是
仍然不完整,因为我们想从属性中删除前缀。 一种解决方案是
“subst-in-string”,但还有一个更优雅的:

来源:



/>
/>
href="/ ">

/>
源代码=“/ " alt=" " />

/>



<href :a:class=web :img:id=logo :img:border=1
网址="http://www.foo.com" name="Welcome" image="foo.png" loading="lazy" />

输出:

<a class="web"
href="/http://www.foo.com">
src="/foo.png" loading="lazy" alt="欢迎" />

当正则表达式中有子表达式时,会打印它们而不是
整个表达。 另请注意,我在前缀前放置了一个冒号,以免将它们混合
使用 XML 命名空间。

实体
实体是与标签相同的宏,但它们不带任何参数。 然而
标签通常用于标记文本,实体包含已标记的文本。 还
请注意,与标签不同,实体默认区分大小写。

实体具有以下形式:

&实体;

· 定义实体

"姓名”

此功能可让您定义自己的实体。 第一个参数是实体名称。
替换文本是函数体。

来源:

酒吧
&foo;

输出:

酒吧

变量
变量是简单标签的特例,因为它们不接受属性。 在
事实上它们的使用是不同的,因为变量包含文本而宏的作用就像
运营商。 关于变量的一个很好的特性是它们作为数组进行操作。 的确
变量可以被认为是换行符分隔的列表,这将允许强大的
操作函数,我们将在下面看到。

· set-var "S"

"名称[=值]" "[名称[=值]] ...“

此命令设置变量。

· set-var-verbatim "S""V"

"名称[=值]" "[名称[=值]] ...“

如上所述,但逐字读取属性。

· 设置-var-x

“姓名=变量名”

此命令将命令正文的值分配给一个变量。 这是特别
当变量值包含换行符和/或引号时很有用。

请注意,不能使用此命令为变量建立索引。 另请注意,此命令
表现为 set-var-verbatim:在变量显示为
获取变量。

· get-var "S"

"姓名” "[姓名] ...“

显示变量内容。 如果方括号内的数值被附加到
变量名,它代表一个数组的索引。 数组的第一个索引是 0
惯例。

来源:


这是版本
操作系统是
” ”


输出:

这是 0.10.1 版本

操作系统是
“Linux
"

来源:

<set-var foo="0
1
2
3“ />


输出:

200
1
2
3

· get-var-once "S""V"

"姓名” "[姓名] ...“

同上,但属性没有扩展。

来源:

0.10.1
" /> ;;;
这是版本
" /> ;;;
这是版本
" /> ;;;
这是版本

输出:

这是 0.10.1 版本
这是 0.10.1 版本
这是版本

· 保留“S”

"姓名” "[姓名] ...“

所有变量都是全局的,没有变量或宏作用域。 出于这个原因,堆栈是
用于保存变量。 调用此命令时,参数是
变量,其值放在堆栈的顶部,并且变量被重置为
空字符串。

· 还原“S”

"姓名” "[姓名] ...“

这是相反的:参数是变量的名称,它们被设置为找到的值
在堆栈的顶部,并且堆栈被弹出。

请注意: "preserve" 标签首先推送它的最后一个参数,而 "restore" 首先弹出它的
第一个论点。

来源:




内部:src= 姓名= 文字=



之前: src= 姓名= 文字=

之后:src= 姓名= 文字=

输出:

之前: src=foo.png name= text=Hello, World!
里面:src=bar name=quux text=
之后: src=foo.png name= text=Hello, World!

· unset-var "S"

"姓名” "[姓名] ...“

取消定义变量。

· var-exists "S"

"姓名”

当此变量存在时返回“true”。

· 递增“S”

"姓名” “[由=价值]”

递增名称为第一个参数的变量。 默认增量为 XNUMX。

“由=价值”
更改增量。

来源:






输出:

10
11
8

· 递减“S”

"姓名” “[由=价值]”

递减名称为第一个参数的变量。 默认递减为 XNUMX。

“由=价值”
更改递减量。

来源:






输出:

10
9
6

·复制变量“S”

"源代码” "目的地”

将一个变量复制到另一个变量中。

来源:





输出:

10

· defvar "S"

"姓名” "价值”

如果此变量未定义或定义为空字符串,则将其设置为
第二个论点。

来源:





输出:

檔案/文件名称
檔案/文件名称

· 符号信息“S”

"姓名”

显示有关符号的信息。 如果是变量名,则将“STRING”字打印为
以及此变量中包含的行数。

如果是宏名称,则打印以下消息之一:“PRIM COMPLEX”、“PRIM
标签”、“用户复杂”或“用户标签”

来源:

<set-var x="0\n1\n2\n3\n4" />
酒吧
曲子






输出:

STRING
5
主要标签
初级复合体
用户标签
用户群

功能
· 字符串长度“S”

"细绳”

打印字符串的长度。

来源:

<set-var foo="0
1
2
3" />;;;
/>
;;;
/> />;;;


输出:

7
7

· 小写“S”

"细绳”

转换为小写字母。

来源:



输出:

它工作吗?

· 大写“S”

"细绳”

转换为大写字母。

来源:



输出:

它行得通吗?

· 大写“S”

"细绳”

转换为标题,每个单词的开头都有一个大写字母。

来源:



输出:

它有用吗?

· 子串“S”

"细绳” "[开始 [结尾]]”

从字符串中提取子字符串。 第一个参数是原始字符串,第二个和第三个
分别是开始和结束索引。 按照惯例,第一个字符的索引为空。

来源:


4 />
4 6 />

输出:

埃夫吉克
ef

· 字符串-eq "S"

"字符串 1" "字符串 2" “[无壳=真]”

如果前两个参数相等,则返回“true”。

来源:

1:
2:

输出:

1:
2:真

“无壳=真”
比较不区分大小写。

来源:

1:
2:

输出:

1:真
2:真

· 字符串-neq "S"

"字符串 1" "字符串 2" “[无壳=真]”

如果前两个参数不相等,则返回“true”。

来源:

1:
2:

输出:

1:真
2:

“无壳=真”
比较不区分大小写。

来源:

1:
2:

输出:

1:
2:

· 字符串比较“S”

"字符串 1" "字符串 2" “[无壳=真]”

比较两个字符串并返回小于、大于或等于的值之一,具体取决于
这个比较。

来源:

1:
2:

输出:

1:少
2:相等

“无壳=真”
比较不区分大小写。

来源:

1:

输出:

1:相等

· 字符偏移“S”

"细绳” "特点” “[无壳=真]”

打印包含字符出现在字符串中的索引的数组。

“无壳=真”
比较不区分大小写。

来源:

1:
2:

输出:

1:0
8
2:0
4
8

· printf "S"

"格式” "细绳” "[绳子 ...]”

根据给定的格式打印。 当前仅识别 %s 标志字符,
并且支持“$”扩展名来改变参数的顺序。

来源:

1:
2:

输出:

1:富巴兹酒吧 10
2:foo 10 酒吧巴兹

原价 表达式
正则表达式支持由 PCRE(Perl Compatible Regular Expressions)提供
library package,这是一个开源软件,剑桥大学版权所有。
这是一个非常好的软件,最新版本可在
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/>”。

在 1.0.6 版本之前,实现了 POSIX 正则表达式。 为此,该
以下宏识别两个属性,“caseless=true”和“singleline=true|false”。
但是 Perl 允许使用所谓的修饰符更好地控制正则表达式,
这些被评估为新的“reflags”属性。 它可能包含一个或多个修饰符:

i 匹配不区分大小写
m 将字符串视为多行。 设置后,“^”匹配任何行首,“$”
任何行尾。 默认情况下,它们匹配字符串的开头和结尾。
s 将字符串视为单行。 点(“.”)也可以匹配换行符,但它不匹配
默认情况下。
x 允许格式化的正则表达式,这意味着空格、换行符和注释是
在处理之前从正则表达式中删除。

请注意: 属性“singleline=true”是“s”修饰符的同义词,而
“singleline=false”是“m”修饰符的同义词。 这种行为是不同的
mp4小时 1.0.6.

· subst-in-string "S"

"细绳” "正则表达式” "[替代品]” "[caseless=true]" "[singleline=true|false]"
“[reflags=[imsx]]”

用替换文本替换字符串中的正则表达式。

来源:


"[ce]" />
"([ce])" "\\1 " />

输出:

阿夫吉克
abc de fghijk

来源:


".$" "" />
".$" "" singleline=false />

([ac]) | [0-9]
" ":\\1:" reflags=x />

输出:

abcdefghijk
abcdefghijk
abcdefghij
abcdefghij
abcdefghij
abcdefghij
:a::b::c:defghijk
:a::b::c:defghijk
:a::b::c:defghijk

· subst-in-var "S"

"姓名” "正则表达式” "[替代品]” "[caseless=true]" "[singleline=true|false]"
“[reflags=[imsx]]”

在变量内容中执行替换。

·匹配“S”

"细绳” "正则表达式” "[caseless=true]" "[singleline=true|false]" "[reflags=[imsx]]"
“[action=report|extract|delete|startpos|endpos|length]”

“行动=报告”
如果字符串包含正则表达式,则打印“true”。

“行动=提取”
打印字符串中匹配正则表达式的表达式。

“行动=删除”
打印没有与字符串中的正则表达式匹配的表达式的字符串。

“动作=开始位置”
打印字符串中与正则表达式匹配的表达式的第一个字符。 如果没有
匹配,返回“-1”。

“行动=终点”
打印字符串中匹配正则表达式的表达式的最后一个字符。 如果没有
匹配,返回“-1”。

“动作=长度”
打印字符串中与正则表达式匹配的表达式的长度。

来源:

1:
2:
3:
4:
5:
6:

输出:

1:真
2:编码
3:abfghijk
4:2
5:5
6:3

阵列
通过 mp4小时 可以轻松处理字符串数组。 变量可以被视为一个单一的
值或作为换行符分隔的字符串列表。 因此在定义之后

<set-var digits="0
1
2
3“ />

可以查看其内容或以下值之一:

来源:




输出:

0
1
2
3
2

· 数组大小“S”

"姓名”

返回一个数组大小,它是变量中存在的行数。

来源:



输出:

4

· 数组推送“S”

"姓名” "价值”

在数组末尾添加一个值(如果此值包含换行符,则添加更多值)。

来源:




输出:

0
1
2
3
10
11
12

· array-pop "S"

"姓名”

删除数组的顶层值并返回此字符串。

· 数组顶值“S”

"姓名”

打印数组的最后一个条目。

来源:



输出:

12

· 数组添加唯一的“S”

"姓名” "价值” “[无壳=真]”

如果此变量中尚不存在此值,则在数组末尾添加一个值。

来源:




输出:

0
1
2
3
10
11
12

“无壳=真”
比较不区分大小写。

· 数组连接“S”

"姓名1" "[姓名2] ...“

将所有数组连接到第一个数组中。

来源:





输出:

FOO
酒吧

· 数组成员“S”

"姓名” "价值” “[无壳=真]”

如果值包含在数组中,则返回其索引,否则返回 -1。

来源:



输出:

5

“无壳=真”
比较不区分大小写。

· 数组移位“S”

"姓名” "抵消” “[开始=开始]”

移动一个数组。 如果 offset 为负,则低于 0 的索引将丢失。 如果偏移为正,
第一个索引用空字符串填充。

来源:


现在:

和:

输出:

现在:

0
1
2
3
10
11
12

和: 2
3
10
11
12

“开始=开始”
更改班次原点(默认为 0)。

来源:



输出:

2
3
12

·排序“S”

"姓名” "[caseless=true]" "[numeric=true]" "[sortorder=reverse]"

就地对数组的行进行排序。 默认是按字母顺序对行进行排序。

来源:



输出:

12
2
3

“无壳=真”
比较不区分大小写。

“数字=真”
按数字对行进行排序

来源:



输出:

2
3
12

“排序顺序=反向”
反向排序

来源:

;;;


输出:

12
3
2

数字的 运营商
这些运算符执行基本的算术运算。 当所有操作数都是整数时
结果也是一个整数,否则它是一个浮点数。 这些运算符是不言自明的。

· 添加“S”

"1号” "2号” "[编号3] ...“

· 减去“S”

"1号” "2号” "[编号3] ...“

· 乘以“S”

"1号” "2号” "[编号3] ...“

·除“S”

"1号” "2号” "[编号3] ...“

· 分钟”

"1号” "2号” "[编号3] ...“

· 最大“S”

"1号” "2号” "[编号3] ...“

来源:




输出:

21
21.000000

来源:


/>" /> />



输出:

720

· 模“S”

"1号” "2号”

与上面列出的函数不同,模函数不能处理超过 2 个参数,并且
这些参数必须是整数。

来源:



输出:

2

这些函数比较两个数字并在比较为真时返回“真”。 如果
一个参数不是数字,比较是错误的。

· gt“S”

"1号” "2号”

如果第一个参数大于第二个,则返回“true”。

· lt“S”

"1号” "2号”

如果第一个参数小于第二个,则返回“true”。

· 等式“S”

"1号” "2号”

如果参数相等,则返回“true”。

· neq "S"

"1号” "2号”

如果参数不相等,则返回“true”。

相关的 运营商
· 不是“S”

"细绳”

如果字符串为空,则返回“true”,否则返回空字符串。

·和“S”

"细绳” "[细绳] ...“

如果所有参数都不为空,则返回最后一个参数。

· 或“S”

"细绳” "[细绳] ...“

返回第一个非空参数。

自动化流程 功能
·“S”“V”组

"表达” "[表达] ...“ "[分隔符=细绳]”

此函数将多个语句组合为一个。 会看到一些例子
下面是条件操作。

这个宏的一个不太直观但非常有用的用法是在以下情况下保留换行符
指定了“whitespace=delete”。

来源:


文字在
3行无
空格=删除


文字在
3 行
空格=删除


<group "Text on
3 行
空格=删除" />





输出:

文字在
3行无
空格=删除

3 行带有空格 = 删除的文本
文字在
3 行
空格=删除

请注意,换行符在“text2”中被抑制,结果肯定是不需要的。

· 化合物

"表达” "[表达] ...“ "[分隔符=细绳]”

像“group”,但这个标签很复杂。

“分隔符=细绳”
默认情况下,参数被搁置一旁。 此属性定义插入的分隔符
论据之间。

· 脱离“S”

"表达”

与“组”做相反的工作,当它的参数不再被视为单个对象时
由另一个命令处理。

· noexpand "S""V"

"命令” "[命令] ...“

不扩展地打印其参数。 它们永远不会被扩展,除非“扩展”
标签用于取消这个“noexpand”标签。

· 展开“S”

"命令” "[命令] ...“

取消“noexpand”标签。

来源:

bar=LT=/define-tag>" "=LT=" "<" />

quux=LT=/define-tag>" "=LT="
” " />


输出:

酒吧
曲子
酒吧

·如果“S”“V”

"细绳” "然后条款” "[其他条款]”

如果字符串非空,则评估第二个参数,否则第三个参数为
评估。

来源:







输出:


没有

· ifeq "S""V"

"字符串 1" "字符串 2" "然后条款” "[其他条款]”

如果前两个参数是相同的字符串,则评估第三个参数,否则计算第四个参数
参数被评估。

· ifneq "S""V"

"字符串 1" "字符串 2" "然后条款” "[其他条款]”

如果前两个参数不是相同的字符串,则评估第三个参数,否则
评估第四个参数。

· 什么时候

"细绳”

当参数不为空时,它的主体被评估。

· 而“V”

"条件”

当条件为真时,评估身体功能。

来源:


0 />>;;;
;;;


输出:

10 9 8 7 6 5 4 3 2 1

· foreach

"多变的” "大批” “[开始=开始]” “[结束=结尾]” “[步骤=过]”

这个宏类似于“foreach”Perl 的宏:一个变量在数组值上循环
并为每个值评估函数体。

第一个参数是通用变量名称,第二个参数是数组的名称。

来源:

<set-var x="1\n2\n3\n4\n5\n6" />


输出:

1 2 3 4 5 6

“开始=开始”
跳过第一个索引。

来源:

<set-var x="1\n2\n3\n4\n5\n6" />


输出:

4 5 6

“结束=结尾”
在索引达到该值后停止。

来源:

<set-var x="1\n2\n3\n4\n5\n6" />


输出:

1 2 3

“步骤=步”
更改索引增量(默认为 1)。 如果 step 为负,则将数组处理为
相反的顺序。

来源:

<set-var x="1\n2\n3\n4\n5\n6" />



输出:

1 3 5
6 4 2

· var-case "S""V"

"变量 1=值 1 动作1" "[变量 2=值 2 动作2 ...“

此命令通过一条指令执行多个条件。

来源:



<var-case
x=1 X />
x=2 X />
y=1 是/>
y=2 是/>
/>




输出:

x1y0

Y型1

·打破“S”

打破最里面的“while”循环。

来源:


0 />>;;;
;;;
5 />;;;


输出:

10 9 8 7 6

·返回“S”

"[up=number]" "细绳”

该命令立即从最里面的宏退出。 也可以插入一条消息。
但是这个宏改变了标记解析,所以它的使用在某些情况下可能变得非常危险
的情况。

“向上=数字”
此属性确定必须退出的级别。 默认只有一个
级别被跳过。 如果为空值,则退出所有当前宏。 一个负
value 做同样的事情,并停止处理当前文件。

· 警告“S”

"细绳”

在标准错误上打印警告。

· 退出“S”

“[状态=rc]" “[消息=细绳]”

立即退出程序。

“消息=细绳”
向标准错误打印一条消息。

“状态=遥控”
选择程序返回的代码(默认为 -1)。

· 在文件末尾

这是一个特殊的命令:它的内容被存储并在输入结束后被扩展。

文件 功能
· 目录-内容“S”

"目录名" “[匹配=正则表达式]”

返回包含在给定目录中的文件的换行符分隔列表。

来源:



输出:

mp4h.mp4h

· 实路径“S”

“patname=路径名”

解析所有符号链接、额外的“/”字符和对 /.//../ in
路径名,并扩展为结果绝对路径名。 除了最后一个组成部分
调用 real-path 时,路径名必须存在。

在比较文件名或目录名是否相同时,此标记特别有用。

来源:

/>

输出:

/build/mp4h-b0pRnc/mp4h-1.3.1/doc/mp4h.mp4h

· 文件存在“S”

"文档名称”

如果文件存在,则返回“true”。

· get-file-properties "S"

"文档名称”

返回有关此文件的信息数组。 这些信息是:大小、类型、ctime、
mtime、atime、所有者和组。

来源:

/>

输出:

68603
文件
1450038844
1450038844
1450038844



· 包括“S”

“文件=文件名 | 命令=命令行” “[alt=行动]” “[逐字=真]”

在文件系统中插入文件的内容——如果给出了“文件”属性——或者
执行系统命令的输出 - 如果给出了“命令”属性 - 到
输入流。 为了向后兼容,如果既不是“文件”也不是“命令”
给定属性,第一个参数被视为要包含的文件。

“文件=文档名称”
读取给定的文件并将其插入到输入流中。 这个属性不能
结合命令属性。

首先在当前目录中搜索文件,然后在指定的目录中搜索
带有“-I”选项的命令行,在“MP4HLIB”中列出的目录中的下一个
环境变量(对于 4 之前的版本,它曾经是“MP1.3HPATH”),最后
在编译时位置(“/usr/local/lib/mp4h/1.3.1:/usr/local/share/mp4h”下)
默认)。

“命令=命令行”
给定的命令行在操作系统上执行,其输出为
插入到输入流中。 此属性不能与文件组合
属性。

给定的命令行是使用 en(3)标准C库例程。 这
命令是使用标准系统 shell 执行的,它在 Posix 兼容系统上
is sh(1)。

"alt=行动”
如果未找到文件,则处理此备用操作。 如果未设置此属性
并且未找到文件,则引发错误。 此属性在以下情况下无效
命令属性被指定。

“逐字=真”
文件内容包含在没有扩展的情况下。 这类似于使用 m4 不转移
以文件名作为参数的宏。

来源:



输出:

Linux

· 使用“S”

“姓名=包裹”

从包文件加载定义。

· 评论

这个标签什么都不做,它的主体被简单地丢弃了。

· set-eol-comment "S"

"[细绳]”

更改注释字符。

· 设置引号“S”

"[绳子 细绳]” “[显示=可见]”

默认情况下,读取“<@[”和“]@"> 对之间的所有字符而不进行解析。 什么时候
不带参数调用,此宏禁止此功能。 当用两个调用时
参数,它重新定义了开始和结束分隔符。 开始定界符必须以左 -
尖括号,结束定界符必须以直角括号结尾。

“显示=可见”
分隔符也写入输出。

导流 功能
改道是一种临时保存输出的方式。 的输出 mp4小时 可以随时
转移到临时文件,并重新插入输出流,未转移,再次
晚些时候。

编号分流从0开始计数,分流编号0为正常输出
溪流。 同时分流的数量主要受用于的内存限制
描述它们,因为 mp4小时 试图在记忆中保持消遣。 但是,有一个限制
到所有转移完全可用的整体内存。 当这个最大值是
即将超出,打开一个临时文件接收最大的内容
转移仍在内存中,为其他转移释放此内存。 所以,它是
理论上有可能改道的次数受可用数量的限制
文件描述符。

· 转移“S”

“[ divnum=转移号码 ]"

使用此标签转移输出,其中转移编号是要使用的转移。 如果
divnum 属性被排除在外,假设 diversion-number 为零。 如果输出是
转移到不存在的转移,它只是被丢弃。 这可以用来
抑制不需要的输出。 请参阅下面的示例。

当全部 mp4小时 输入将被处理,所有现有的转移将自动
未改道,按数字顺序。

使用相同参数的多次调用不会覆盖之前的转移
文本,但附加到它。

来源:


这是无处发送...

这是输出。

输出:

这是无处发送...

这是输出。

· 单向“S”

“[ divnum=转移号码 ]"

此标签明确地取消转移保存在转移中的转移文本
数字。 如果没有给出 divnum 属性,所有的改道都是不改道的,以数字表示
秩序。

当转移的文本未转移时,它不会被重读 mp4小时,而是直接复制到
当前输出。 因此,不转移到转移并不是错误。

不比 m4mp4小时 undivert 标签不允许文件名作为参数。 一样可以
使用带有 verbatim="true" 属性的 include 标记完成。

来源:


此文已转。

本文不转。


输出:

此文已转。

本文不转。

· divnum "S"

此标签扩展为当前转移的编号。

来源:

最初的

导读一:

变通二:


输出:

初始 0

改道一:1

改道二:2

调试 功能
当构造变得复杂时,可能很难调试它们。 下面列出的函数是
当您无法弄清楚出了什么问题时非常有用。 这些功能还不完善
并且必须在以后的版本中改进。

· 函数定义“S”

"姓名”

打印用户定义宏的替换文本。 例如,宏用于
生成本文档的所有示例是

来源:



输出:


" ">" /> [^;\n]*\n[ \t]*" "" /> $" "" reflags=m />



输出:



“/>

· 调试模式“S”

"细绳”

此命令的作用类似于“-d”标志,但可以动态更改。

· 调试文件“S”

"文档名称”

选择调试消息被转移的文件。 如果此文件名为空,
调试消息被发送回标准错误,如果设置为“-”这些消息
被丢弃。

请注意: 无法将这些调试消息打印到正在处理的文档中。

· 调试-打开“S”

"姓名” "[姓名] ...“

声明这些宏被跟踪,即如果“-d”将打印有关这些宏的信息
使用标志或“调试模式”宏。

·调试关“S”

"姓名” "[姓名] ...“

这些宏不再被追踪。

其他
· __文件__ "S"

"[姓名]”

没有参数这个宏打印当前输入文件名。 带参数,这个宏
设置此宏的未来调用返回的字符串。

· __线__ "S"

"[数字]”

没有参数这个宏打印输入文件中的当前数字行。 有了论据,
这个宏设置了这个宏的未来调用返回的数字。

来源:

这是 <__file__/>,第 <__line__/> 行。

输出:

这是 ./mp4h.mp4h,第 2201 行。

如果您仔细查看源代码,您会发现这个数字是错误的。 确实
number line 是包含该指令的整个块的结尾。

· __version__ "S"

打印版本 mp4小时.

· dnl "S"

丢弃所有字符,直到到达换行符。 此宏确保以下字符串
是一个注释,不依赖于注释字符的值。

来源:

这是一条评论
FOO
这是一条评论
酒吧

输出:

FOO
酒吧

· 日期”

“[时代]”

根据参数传递的纪元打印本地时间。 如果没有争论,
打印当前本地时间。

“时间”
纪元时间规范。

“格式”
时间(3)C库例程。

来源:


/> />
/>
" format="%Y-%m-%d %H:%M:%S" />

输出:

13 年 20 月 34 日星期日 04:2015:XNUMX

13 年 20 月 34 日星期日 04:2015:XNUMX
2015-12-13 20:34:04

· 计时器“S”

打印自上次调用此宏以来花费的时间。 打印的值为
时钟滴答,因此取决于您的 CPU。

来源:


自解析开始以来的时钟滴答数
这个例子来自 &mp4h; 是:


输出:

用户9
系统0

自解析开始以来的时钟滴答数
这个例子由 mp4小时 是:
用户9
系统0

· mp4h-l10n "S"

"名称=值”

设置特定于语言环境的变量。 默认情况下,选择可移植的“C”语言环境。 作为
语言环境在不同平台上有不同的名称,您必须参考您的系统
文档以查找适合您系统的值。

· mp4h-输出-基数“S”

"数字”

通过设置小数点后的位数来改变浮点数的输出格式
观点。 默认是以“%6.f”格式打印数字。

来源:





输出:

4.600000

4.60

外部 配套


可以使用“include”命令包含外部文件。 文件是第一位的
在当前目录中搜索,然后在命令行中使用“-I”指定的目录中搜索
选项,下一个在“MP4HLIB”环境变量中列出的目录中(它曾经是
4 之前版本的“MP1.3HPATH”),最后在编译时位置
(默认为“/usr/local/lib/mp4h/1.3.1:/usr/local/share/mp4h”)。

包含包的另一种方法是使用“use”命令。 有两个区别
在“use”和“include”之间:首先,包名没有后缀; 更重要的是,一个
不能多次加载包。

MACRO 扩张


这部分描述了宏扩展的内部机制。 它必须尽可能精确和
尽可能详尽,所以联系我“站长:[电子邮件保护]>" 如果你有
建议。

基础
让我们从一些例子开始:

来源:


这是一个简单的标签


这是一个复杂的标签


身体机能

输出:

这是一个简单的标签

这是一个复杂的标签

用户定义的宏可能具有 HTML 标签等属性。 处理这些属性
替换文本,已采用以下约定(主要源自 元HTML):

· 序列%name 被命令名替换。

· 属性从 0 开始编号。在替换文本中,%0 被替换为第一个参数,
%1 到第二个,依此类推。由于参数数量没有限制,%2 是
第 21 个参数,而不是后跟 0 字母的第三个参数。

来源:


%0

<参考文献 http://www.gimp.org 《纨绔子弟》/>

输出:

<a href="/http://www.gimp.org">Gimp

· 序列“%#”打印属性的数量。

· 序列“%%”被替换为“%”,这在嵌套定义中很有用。

来源:

;;;
外层,# 属性:%#
;;;
inner1, # 属性: %#;;;
;;;
;;;
inner2, # 属性:%%#;;;
;;;





输出:

外部,# 属性:2
内部 1,# 属性:2
内部 2,# 属性:5

· 序列 %attributes 被空格分隔的属性列表替换。

来源:







<mail1 name="Dr. Foo" mail="[电子邮件保护]“/>

输出:

傅博士
[电子邮件保护]

· 序列 %body 被复杂宏的主体替换。

来源:



">%身体

<mail2 mail="[电子邮件保护]">



输出:

<a href="/站长:[电子邮件保护]">



· 以上两种形式都接受修饰符。 当使用 %Aattributes 或 %Abody 时,换行
打印分隔的属性列表。

来源:




: " />



<show-attributes name="Dr. Foo" mail="[电子邮件保护]“/>

输出:

%0: 姓名=Dr. Foo%1: 邮件=[电子邮件保护]

· 另一种替代形式是将“A”替换为“U”,在这种情况下,文本为
替换但不会扩展。 这只有在宏被使用时才有意义
用“attributes=verbatim”定义,否则属性在之前展开
更换。

来源:


扩展前:%Uattributes
扩展后:%attributes


扩展前:%Uattributes
扩展后:%attributes

和这里 %attributes
/>
/>

输出:

扩展之前:我们开始
扩展后:我们开始

扩容前:
扩展后:我们开始

· 修饰符“A”和“U”可以组合使用。

请注意: 输入扩展完全不同 元HTMLmp4小时。 同 元HTML it
有时需要使用其他结构,如 %xbody 和 %qbody。 为了
提高兼容性 元HTML,这些构造被识别并被解释
像 %body。 出于兼容性原因提供的另一个功能是为了简单
标签 %body 和 %attributes 是等价的。 这些功能在当前 mp4小时 版本
但在未来的版本中可能会消失。

Attributes
属性之间用空格、制表符或换行符分隔,每个属性必须是一个
有效 mp4小时 实体。 例如对于上面的定义,“ "不能是
属性,因为它必须以“ ”。但这是有效的:

/>

甚至

/>

在这些示例中,“foo”标签只有一个参数。

在某些情况下,需要将多个语句组合成一个
一。 这可以用双引号或“组”原语来完成,例如

<foo "This is the 1st attribute"
/>

请注意: 与 HTML 不同,单引号不能为此目的替换双引号。

如果参数中出现双引号,它们必须用反斜杠“\”转义。

来源:




输出:

里面有双引号 " 的文字

评估
宏的特点是

· 姓名

· 容器状态(简单或复杂)

· 属性是否展开

· 函数类型(原始或用户定义的宏)

· 对于原语、内存中相应代码的地址以及用户定义的宏
替换文本

在输入时读取字符,直到找到左尖括号。 然后宏名称是
读。 在读取属性之后,逐字或不取决于此宏的方式
定义。 如果这个宏很复杂,它的主体将被逐字读取。 当这一切完成时,
替换文本中的一些特殊序列被替换(如 %body、%attributes、%0、%1、
等)并将结果文本放在输入堆栈上以便重新扫描。

请注意: 默认情况下,在任何替换之前评估属性。

考虑以下示例,以更改打字机字体中的文本:


%身体


这个定义有一个主要缺点:

来源:

这是一例子

输出:

这是一个例子

我们希望删除内部标签。

第一个想法是使用一个辅助变量来知道我们是否还在这样一个
环境:




1” " />
%身体
1” " />



(HTML 标记中星号的存在将在下一节中解释)。

来源:

这是一例子

输出:

这是一个例子

但是如果我们使用简单的标签,如下例所示,我们的定义似乎不起作用。
这是因为属性在放入替换文本之前会被扩展。

来源:

%属性
" />

输出:

这是一个例子

如果我们想防止这个问题,我们必须禁止属性扩展

来源:

;;;
%属性;;;

" />

输出:

这是一个例子

扩展 标志
当你想在你的页面中嵌入一些服务器端脚本语言时,你会遇到一些
奇怪的问题,比如

>你好

问题是怎么做 mp4小时 知道这个输入有一些额外的分隔符吗? 答案是
mp4小时 不应该尝试处理一些特殊的分隔符,因为它无法处理所有
其中(有 ASP、ePerl、PHP...,其中一些是可定制的)。 现在,记住
mp4小时 是一个宏处理器,而不是一个 XML 解析器。 所以我们必须专注于宏和格式
我们的输入文件,以便可以毫无问题地解析它。 上一个例子可能是
书面

">你好

因为引号会阻止内部右尖括号关闭“a”标签。

另一个常见问题是当我们只需要打印开始或结束标签时。 为了
例如,非常需要定义自己的页眉和页脚




...放在这里一些信息....








星号将这些标签标记为伪简单标签,这意味着它们是复杂的 HTML
标签,但用作内部的简单标签 mp4小时 因为否则标签不会很好地嵌套。

这个星号被称为“拖尾星”,它出现在标签名称的末尾。

有时 HTML 标签是不可解析的,就像在这个 javascript 代码中一样:

...
document.write('<*img src="/foo.gif"');
if (text) document.write(' alt="'+text+'"');
document.write('>');
...

“领航星”是左尖括号和标签名之间的星号,
防止解析这个标签。

也就是说,我们现在可以理解“--expansion”标志的用途。 它控制如何
扩展由 mp4h 执行。 它后跟一个整数,它是
以下值

1 不解析未知标签。
设置后,不解析 HTML 标签。 未设置时,将解析 HTML 标签,即
属性和/或正文被收集。

2 未知标签被假定为简单的。
设置后,HTML 标签默认是简单的。 未设置时,HTML 标签会变得复杂
默认,除非它们的属性包含尾随斜杠或尾随星号出现
在标签名称之后(见下文)。

4 标签名称中的尾随星号不会使此标签变得简单。
设置后,标签名称中的尾随星号没有特殊效果。 未设置时,会导致
HTML 标签要简单。

8 不匹配的结束标签关闭所有以前不匹配的开始标签。
设置后,将自动插入所有缺少的结束标记。 未设置时,一个
不匹配的结束标记被丢弃并解释为正常文本,因此继续处理
直到找到匹配和标签。

16 将反斜杠解释为 printf。
设置后,将删除非特殊字符之前的反斜杠。 未设置时,它们是
保留。

32 删除标签属性中的尾部斜杠。
设置后,删除输出标签属性中的尾部斜杠。 未设置时,它们是
保留。

64 不要删除标签名称中的尾随星号。
设置后,标签名称后的尾随星号将保留在输出中。 未设置时,它们是
除去。

128 不要删除标签名称中的前导星。
设置后,标记名称之前的前导星将保留在输出中。 未设置时,它们是
除去。

256 不要在标签属性的斜杠前添加空格
默认情况下,在标签属性的尾部斜杠之前插入一个空格。 设置时,这
空间不是预先准备好的。

1024 抑制有关错误嵌套标签的警告。
设置后,不会显示有关错误嵌套标签的警告。 未设置时,它们是
打印在标准错误上。

2048 抑制有关缺少尾部斜杠的警告。
设置后,不会显示有关缺少尾部斜杠的警告。 未设置时,它们是
打印在标准错误上。

运行

mp4h-h

找到默认值。 当前值匹配 HTML 语法,当它趋于零时
XHTML 语法变得更加熟悉。

使用 onworks.net 服务在线使用 mp4h


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。