1#![feature(new_range_api)]
2#![warn(missing_docs)]
3use nargo_ir::IRModule;
4use nargo_types::{NargoValue, Span};
5use std::collections::HashMap;
6
7mod base;
8mod oak_script_parser;
9mod oak_style_parser;
10mod oak_template_parser;
11mod registry;
12pub mod shell;
13pub mod template;
14pub mod vutex;
15
16pub use base::ParseState;
17pub use nargo_types::Cursor;
18pub use oak_script_parser::OakTypeScriptParser;
19pub use oak_style_parser::OakCssParser;
20pub use oak_template_parser::OakVueTemplateParser;
21pub use registry::{MetadataParser, ParserRegistry, ScriptParser, StyleParser, TemplateParser};
22pub use shell::VocShell as Parser;
23
24pub use vutex::{
25 document::{parse_document, parse_frontmatter},
26 Document, DocumentMeta, FrontMatter, FrontMatterParser, MarkdownParser,
27};
28
29pub fn parse(source: &str) -> nargo_types::Result<IRModule> {
39 let registry = std::sync::Arc::new(ParserRegistry::new());
40 let mut parser = Parser::new("anonymous.tsx".to_string(), source, registry);
41 parser.parse_all()
42}
43
44pub fn parse_i18n(source: &str, lang: &str) -> nargo_types::Result<HashMap<String, NargoValue>> {
45 let registry = std::sync::Arc::new(ParserRegistry::new());
46 if let Some(parser) = registry.get_metadata_parser(lang) {
47 let mut state = ParseState::new(source);
48 let (val, _trivia) = parser.parse(&mut state, lang)?;
49 if let NargoValue::Object(map) = val {
50 return Ok(map);
51 }
52 }
53 Err(nargo_types::Error::parse_error(format!("Unsupported i18n lang: {}", lang), Span::default()))
54}