1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/*!
Prepyrus is a tool for verifying and processing MDX files
that contain citations in Chicago author-date style and certain metadata.
⚠️ This tool is still in early development and API may frequently change.
## Usage
Add the crate to your `Cargo.toml` and use it as shown below:
```toml
[dependencies]
prepyrus = "0.2"
```
Main API interface is the `Prepyrus` impl. Example usage:
```rust
use prepyrus::{
cli::{Cli, Mode},
Prepyrus
};
fn main() {
let _ = run().unwrap_or_else(|e| {
eprintln!("Error: {}", e);
std::process::exit(1);
});
println!("Prepyrus completed successfully!");
}
fn run() -> Result<(), Box<dyn std::error::Error>> {
// Example Command Line Inputs
let cli = Cli {
bib_file: "tests/mocks/test.bib".to_string(),
target_path: "tests/mocks/data".to_string(),
mode: Mode::Verify,
ignore_paths: Some(vec!["tests/mocks/data/development.mdx".into()]),
generate_index_to_file: None,
index_link_prefix_rewrite: None,
};
let config = Prepyrus::build_config(cli, None)?;
let all_entries = Prepyrus::get_all_bib_entries(&config.bib_file).unwrap();
let mdx_paths =
Prepyrus::get_mdx_paths(&config.target_path, Some(config.settings.ignore_paths))?;
// Phase 1: Verify MDX files
let articles_file_data = Prepyrus::verify(mdx_paths, &all_entries)?;
// Phase 2: Process MDX files (requires mode to be set to "process")
if config.mode == Mode::Process {
Prepyrus::process(articles_file_data);
}
Ok(())
}
```
`verify` mode only verifies the citations in the MDX files against the bibliography.
**⚠️ NOTE: This mode modifies the MDX files.**
`process` mode _additionally_ processes the MDX files by injecting bibliography and other details into the MDX files.
## Description
The tool is designed to work with MDX files that contain citations in Chicago author-date style. Examples:
> "...nowhere on heaven or on earth is there anything which does not contain both being and nothing in itself" (Hegel 2010, 61).
The tool parses and verifies the citations in the MDX files against a
bibliography file in BibTeX format (using Biblatex).
If the citations are valid, the tool processes the MDX files
by adding a bibliography section at the end of the file.
It also adds author, editor, and contributor from the MDX file metadata if available.
Finally, it also adds a notes heading at the end if footnotes are present in the file.
## Limitations
The tool currently only supports citations in Chicago author-date style.
Only book entries are currently supported (plans to support more types in the future).
Only the following metadata fields are supported:
- author
- editor
- contributor
## Examples
To see a working implementation of prepyrus, please visit the [sPhil repo](https://github.com/systemphil/sphil).
## Acknowledgements
Thanks to Typst's [biblatex](https://github.com/typst/biblatex) package for providing an awesome library for parsing BibTex files, the people behind serde and regex Rust crates and the Rust community!
## License
Apache-2.0
*/
use Error;
use crateCli;
pub use crateConfig;
use Entry;
use Parser;
use ;
use ArticleFileData;
/// Main API interface for the Prepyrus tool.
/// It contains methods for building the configuration, retrieving bibliography entries,
/// retrieving MDX file paths, verifying MDX files, and processing MDX files.
/// There is an intended usage of these methods, but you are free to mix and match as you like.