一个用于解析 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
中的所有键都是小写的。
您可以将出版物转换为以下任何类型:
Article (文章)
Book (书籍)
Booklet (小册子)
InBook (书籍中的章节)
InCollection (文集中的文章)
InProceedings (会议论文集中的文章)
Manual (手册)
MasterThesis (硕士论文)
Misc (其他)
PhdThesis (博士论文)
Proceedings (会议论文集)
TechReport (技术报告)
Unpublished (未发表的文章)
每种类型都有一组必需的和可选的字段,可以直接访问。 所有其他字段可以使用 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.
警告由以下类型之一表示:
DuplicateCitationKeyWarning (重复的引用键警告)
MismatchedDataTypeWarning (不匹配的数据类型警告)
MissingRequiredFieldsWarning (缺少必需字段警告)
UnrecognizedPublicationTypeWarning (无法识别的出版物类型警告)
UnusedStringDefinitionWarning (未使用的字符串定义警告)
错误由以下类型之一表示:
ExtraneousInputParserError (多余的输入解析器错误)
MismatchedInputParserError (不匹配的输入解析器错误)
MissingSymbolParserError (缺少符号解析器错误)
NoViableAlternativeParserError (无可行替代方案解析器错误)
StringDefinitionNotFoundParserError (未找到字符串定义解析器错误)
TokenRecognitionParserError (令牌识别解析器错误)
将警告或错误转换为这些类型之一,可以使您获得有关它的更多信息。
if let extraneousInputError = error as? ExtraneousInputParserError {
print(extraneousInputError.offendingSymbol)
print(extraneousInputError.expectedSymbols)
}
选择 File > Swift Packages > Add Package Dependency...
并输入以下URL
https://github.com/MaxHaertwig/SwiftyBibtex.git
打开 Package.swift
并将以下行添加到您Package的依赖项中
.package(name: "SwiftyBibtex", url: "https://github.com/MaxHaertwig/SwiftyBibtex.git", .upToNextMajor(from: "1.0.0"))
该库使用 ANTLR 生成其底层的 BibTeX 解析器。 词法分析器和解析器语法可以在 BibtexLexer.g4 和 BibtexParser.g4 中找到。 如果您决定更改其中一个语法文件,请确保运行 generate_bibtex_parser.sh
脚本以生成新的解析器。
ANTLR 运行时 (Antlr4) 作为包依赖项包含在内。
欢迎提供反馈、问题 和 Pull Requests。
SwiftyBibtex 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE。