📚 SwiftyBibtex

一个用于解析 BibTeX 文件的 Swift 库。

📖 用法

准备您的输入,以字符串形式。例如:

let input = """
@Article{max20,
    author={Max},
    title={SwiftyBibtex},
    journal={New Repositories},
    year={2020},
    note={A Swift library for parsing BibTeX files.}
}
@String{me="Max"}
@Preamble{"Maintained by " # me}
@Comment{TODO: Add more entries}
"""

访问出版物

do {
    let result = try SwiftyBibtex.parse(input)
    result.publications
} catch {
    print("Error parsing input: \(error)")
}

出版物属性

let publication = publications[0]

publication.publicationType  // PublicationType.article
publication.citationKey      // "max20"
publication.fields           // ["author": "Max", ...]
publication.rangeInFile      // (1:0)...(12:0)

注意:fields 中的所有键都是小写的。

出版物类型

您可以将出版物转换为以下任何类型:

每种类型都有一组必需的和可选的字段,可以直接访问。 所有其他字段可以使用 fields 属性访问。

if let article = publication as? Article {
    article.author          // "Max"
    article.title           // "SwiftyBibtex"
    article.journal         // "New Repositories"
    article.year            // 2020
    article.fields["note"]  // Optional("A Swift library for parsing BibTeX files.")
}

访问前导和注释

let result = try SwiftyBibtex.parse(input)
result.preambles  // ["Maintained by Max"]
result.comments   // ["TODO: Add more entries"]

访问警告和错误

let result = try SwiftyBibtex.parse(input)
for warning in result.warnings {
    print(warning.message)
}
for error in result.errors {
    print(error.line)
    print(error.charPositionInLine)
    print(error.message)
}

警告和错误会自动记录到控制台。 您可以通过设置不同的日志记录级别来更改此行为。

let result = try SwiftyBibtex.parse(input, loggingLevel: .warn)  // Log warnings and errors.
let result = try SwiftyBibtex.parse(input, loggingLevel: .error) // Log only errors.
let result = try SwiftyBibtex.parse(input, loggingLevel: .none)  // Don't log anything.

警告由以下类型之一表示:

错误由以下类型之一表示:

将警告或错误转换为这些类型之一,可以使您获得有关它的更多信息。

if let extraneousInputError = error as? ExtraneousInputParserError {
    print(extraneousInputError.offendingSymbol)
    print(extraneousInputError.expectedSymbols)
}

⚙️ 安装

Swift Package Manager

Xcode

选择 File > Swift Packages > Add Package Dependency... 并输入以下URL

https://github.com/MaxHaertwig/SwiftyBibtex.git

Package.swift

打开 Package.swift 并将以下行添加到您Package的依赖项中

.package(name: "SwiftyBibtex", url: "https://github.com/MaxHaertwig/SwiftyBibtex.git", .upToNextMajor(from: "1.0.0"))

🦌 ANTLR

该库使用 ANTLR 生成其底层的 BibTeX 解析器。 词法分析器和解析器语法可以在 BibtexLexer.g4BibtexParser.g4 中找到。 如果您决定更改其中一个语法文件,请确保运行 generate_bibtex_parser.sh 脚本以生成新的解析器。

ANTLR 运行时 (Antlr4) 作为包依赖项包含在内。

🤝 贡献

欢迎提供反馈、问题Pull Requests

📄 许可证

SwiftyBibtexMIT 许可证下可用。 有关更多信息,请参见 LICENSE