Skip to content

Xezun/XZML

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XZML

CI Status Version License Platform

示例项目 Example

要运行示例项目,需在拉取代码后,先在Pods目录执行pod install命令。

To run the example project, clone the repo, and run pod install from the Pods directory first.

版本需求 Requirements

iOS 11.0, Xcode 14.0

安装使用 Installation

推荐使用CocoaPods安装XZML组件。

XZML is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'XZML'

背景

XZML是一款轻量级的富文本标记语言,是为解决在iOS开发中,富文本构造过程繁琐、不支持后端下发的问题而研发。

效果

XZML 效果 说明
日利率 <B&0.02%> <aaa#$0.08%> 日利率 0.02% 0.08% 设置0.02%粗体,0.08%灰色且带删除线

因 GitHub 的 Markdown 不支持字体颜色,呈现效果可能并非实际效果

语法

元素是构成XZML的基本单位,元素支持嵌套和样式继承,具体规则如下。

1、元素

1.1 元素构成

元素由范围标记符、样式、文本内容三部分构成,形式如下。

范围起始标记 + 样式 + 文本内容 + 范围终止标记

范围标记符包裹的文本内容会应用指定的样式,其中:

  • 起始标记:<

  • 终止标记:>

  • 样式:样式值 + 样式标记符

  • 文本内容:纯文本字符,特殊字符需用\转义

1.2 元素串联

< 作用域1 > < 作用域2 > 不属于作用域 < 作用域3 >

1.3 元素嵌套

< 作用域1 < 作用域1.1 < 作用域1.1.1 > > >

1.4 样式继承

< 样式1 内容1 < 样式2 内容2 > 内容3 >

内容1内容3的样式相同,因为它们在同一对范围标记符内,内容2则会继承外层的样式1样式2只对内层的内容2生效。

2、样式标记符

XZML 使用固定格式且简化的文本作为样式值,多属性样式值使用@符号分隔属性,基本格式如下。

属性1 @属性2 @属性3 样式标记符

理论上,任何字符都可以作为样式标记符,但是使用不常用的特殊符号作为样式标记符,能减少转义符号的使用。以下符号在 XZML 中被用作样式标记符使用。

【样式标记符】

标记符 名称 属性1 属性2 属性3 示例
# 文本颜色 前景色 背景色 <f00#红色文字>
& 字体字号 字体 字号 基准线偏移 <宋体@20&宋体20号文字>
$ 文本修饰 样式 线型 颜色 <$带删除线的文字>
* 安全模式 替代符号 重复次数 <*安全模式变星星的文字>
~ 超链接 URL <https://www.xezun.com/~打开Xezun官网>
^ 文本段落 属性值 + 属性标记 <20H30M^最小行高20点,最大行高30点的段落>

【属性默认值】

在实际开发中,要用的富文本可能会包含各种各样的样式,但是固定地方使用的富文本,往往是固定样式或少量可配置样式, 因此没有必要所有的样式都需要下发,在编码时,如果设置好默认值,则可以大大降低XZML的长度和复杂度。

[textLabel setAttributedTextWithXZMLString:@"文本甲 <&文本乙> <宋体&文本丙>" defaultAttributes:@{
    NSFontAttributeName: [UIFont fontWithName:@"Text-Font" size:14.0],
    XZMLFontAttributeName: [UIFont fontWithName:@"Number-Font" size:14.0],
}];

在上面这段代码中,文本甲将应用Text-Font字体,文本乙将应用Number-Font字体,文本丙将应用宋体字体。

样式 默认值 设置一个属性时
字体 XZMLFontAttributeName 指定字体,继承字号 作为字体名,与默认字号相同
颜色 XZMLForegroundColorAttributeName 作为前景色,无背景色
删除线 单删除线 作为删除线样式,与前景色相同
隐私 4个星星 作为星星的数量,与前景色相同

【简化字体名】

由于字体名字可能较长,而在业务中,大部分情况下,所使用的都是固定字体,因此可以通过设置字体缩写,来简化样式的书写,比如<B&0.02%>B字体名,是通过如下方法提前注册的。

[XZMLParser setFontName:@"AmericanTypewriter-Bold" forAbbreviation:@"B"];

【颜色】

XZML使用十六进制颜色,基本与css规则一致。

格式 示例 (r, g, b, a) 效果
RGB D34 (r: 0xDD, g: 0x33, b: 0x44, a: 0xFF)
RGBA D34B (r: 0xDD, g: 0x33, b: 0x44, a: 0xBB)
RRGGBB 12BC89 (r: 0x12, g: 0xBC, b: 0x89, a: 0xFF)
RRGGBBAA 12BC8955 (r: 0x12, g: 0xBC, b: 0x89, a: 0x55)

【转义字符】

转义字符\之后的第一个字符,作为原始字符使用;如果转义字符在末尾,则忽略该转义字符。

Author

Xezun, developer@xezun.com

License

XZML is available under the MIT license. See the LICENSE file for more info.