#![feature(new_range_api)]
#![warn(missing_docs)]
use nargo_ir::IRModule;
use nargo_types::{NargoValue, Span};
use std::collections::HashMap;
mod base;
mod oak_script_parser;
mod oak_style_parser;
mod oak_template_parser;
mod registry;
pub mod shell;
pub mod template;
pub mod vutex;
pub use base::ParseState;
pub use nargo_types::Cursor;
pub use oak_script_parser::OakTypeScriptParser;
pub use oak_style_parser::OakCssParser;
pub use oak_template_parser::OakVueTemplateParser;
pub use registry::{MetadataParser, ParserRegistry, ScriptParser, StyleParser, TemplateParser};
pub use shell::VocShell as Parser;
pub use vutex::{
document::{parse_document, parse_frontmatter},
Document, DocumentMeta, FrontMatter, FrontMatterParser, MarkdownParser,
};
pub fn parse(source: &str) -> nargo_types::Result<IRModule> {
let registry = std::sync::Arc::new(ParserRegistry::new());
let mut parser = Parser::new("anonymous.tsx".to_string(), source, registry);
parser.parse_all()
}
pub fn parse_i18n(source: &str, lang: &str) -> nargo_types::Result<HashMap<String, NargoValue>> {
let registry = std::sync::Arc::new(ParserRegistry::new());
if let Some(parser) = registry.get_metadata_parser(lang) {
let mut state = ParseState::new(source);
let (val, _trivia) = parser.parse(&mut state, lang)?;
if let NargoValue::Object(map) = val {
return Ok(map);
}
}
Err(nargo_types::Error::parse_error(format!("Unsupported i18n lang: {}", lang), Span::default()))
}