MPEDN 1.0.0

MPEDN 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 eclipse
发布最后发布2015 年 3 月

Matthew Phillips 维护。



MPEDN 1.0.0

  • Matthew Phillips

MPEdn

一个用于 OS X 和 iOS 的 EDN (可扩展数据表示) Objective C I/O 库。

该库包括

  • MPEdnParser,一个用于读取 EDN 并生成等价 Cocoa 数据结构的解析器。

  • MPEdnWriter,将 Cocoa 数据结构写入 EDN。

对于大多数用法,解析 EDN 简单如您所见

[@"{:a 1}" ednStringToObject];

它在出错时返回解析对象或 nil。

要从 Cocoa 对象生成 EDN

[myObject objectToEdnString];

请查看头文件以获取 API 文档。

给用户的通知 MPEdn 0.1

0.2 版本将破坏现有的 - 不好意思!自动输出 NSDictionary 字符串键作为关键词(即 MPEdnWriter useKeywordsInMaps 属性)的默认设置已从 YES 更改为 NO。如果您希望保留 0.1 的行为,请使用 objectToEdnStringAutoKeywords 而不是 objectToEdnString 来生成 EDN 输出。

此外,关键词现在实现为 MPEdnKeyword 实例,而不是像 0.1 中的字符串。为了获得旧的行为,请将 keywordsAsStrings 属性设置在 MPEdnParser 上或使用 [NSString ednStringToObjectKeywordsAsStrings]

在您的项目中使用它

要使用该库,可以

  • 使用提供的 Xcode 项目生成 libMPEdn.a 并将其以及 .h 文件复制到您的项目中,或者;

  • 使用包含您的项目与 MPEdn 的 workspace,如此处所述。您可能还需要将 -all_load 标志添加到项目的 "其他链接器标志" 部分,如果链接器没有链接到 ednStringToObjectobjectToEdnString 类别方法。

EDN 到 Cocoa 映射

  • EDN 映射 <-> NSDictionary(但请查阅 [MPEdnParser newDictionary] 以覆盖)。

  • EDN 列表或向量 <-> NSArray(但请查阅 [MPEdnParser newArray] 以覆盖)。

  • EDN 集合 <-> NSSet(但请查阅 [MPEdnParser newSet] 以覆盖)。

  • EDN 字符串 <-> NSString

  • EDN 浮点数 <-> NSNumbernumberWithDouble)。

  • EDN 整数 <-> NSNumbernumberWithLong)。不支持 N(大整数)后缀。

  • EDN 十进制数('M' 后缀,Clojure 中的 BigDecimal)<-> NSDecimalNumber

  • EDN 布尔值 <-> NSNumbernumberWithBool)。

  • EDN 字符 <-> NSNumbernumberWithUnsignedChar)。

  • EDN 关键字 <-> MPEdnKeyword。如果 MPEdnWriter.useKeywordsInMaps 属性为 true(截至 0.2 版本默认为 false),用作 NSDictionary 键的字符串将尽可能以关键字的形式输出。请注意,字符串和关键字永远不会进行比较,因此当从使用关键字的外部服务中读取词典时可能会令人困惑:通常情况下,如果可能的话,应显式使用关键字。

  • EDN 符号 <-> MPEdnSymbol

  • 通过实现 MPEdnTaggedValueWriter 和/或 MPEdnTaggedValueReader 的类可以将 EDN 带标签的值进行转换(有关示例,请参阅 MPEdnBase64Codec)。您可以通过在 MPEdnParser 上设置 allowUnknownTags 属性来接受任意标签(无论是否为其提供了读取器),这将使用 MPEdnTaggedValue 实例表示未知带标签的值。MPEdnWriter 知道如何输出 MPEdnTaggedValue,这使得带有未知标签的 EDN 能够往返。

注释

  • 未来可能会通过解析到映射值来更好地处理符号,无论是通过符号表还是用户定义的回调。

  • 浮点数将被完整输出,以避免精度损失。

  • 字符串中的换行将在其转义形式中输出(使用 \n 而不是原始的 0x0a),尽管原始形式是合法的,这使得在行定向协议中使用生成的 EDN 字符串变得容易。

  • 解析器和写入器完全支持字符串值中所有 Unicode 代码点(即普通字符和 UTF-16 代理对),但其他地方则不支持。添加一般支持会很简单,但可能会付出一些速度代价,但鉴于 EDN 语法是在 ASCII 字符类的基础上定义的,因此不清楚在使用字符串之外的任何情况下是否使用 ASCII 是否是有效的 EDN。

作者和许可协议

MPEdn 由 Matthew Phillips([email protected])开发。它使用与 Clojure 相同的开源许可协议,即 Eclipse 公共许可协议 v1.0