]> OzVa Git service - gn-parser/commitdiff
Metdata changes
authorMax Value <greenwoodw50@gmail.com>
Fri, 9 May 2025 00:34:58 +0000 (01:34 +0100)
committerMax Value <greenwoodw50@gmail.com>
Fri, 9 May 2025 00:34:58 +0000 (01:34 +0100)
Changed metadata JSON output format
Added wordcount output
Added title and author to latex output

Cargo.toml
src/lib.rs
src/types/document.rs

index 8ea5d8cccfbff42267b19d2bb4f567eca1eacedb..3317cf3421ff12be11902cf9bd1d961778d513ca 100644 (file)
@@ -8,3 +8,4 @@ edition = "2021"
 [dependencies]
 chrono = "0.4.41"
 regex = "1.11.1"
+serde_json = "1.0.140"
index e1b4ed5661fef3353ee5d1f4ce14dc5c2fcc478a..8c4e16bd751273d5ea83a4d834f5c66f53530a78 100644 (file)
@@ -38,6 +38,7 @@ pub fn run(config: Config) -> Result<(), Box<dyn Error>>  {
                "latex" => {document.render_latex()},
                "gemtext" => {document.render_gemtext()},
                "metadata" => {document.render_metadata()},
+               "wc" => {document.render_wordcount()},
                _ => {String::from("?")}
        });
 
index 3abb8c92c6575d471e13fc15e64af0cbda021583..4dae7f7a40f78f5ab88e4e1f0a0b4e1df5e26e44 100644 (file)
@@ -1,3 +1,5 @@
+use serde_json::json;
+
 use crate::types::metadata::Metadata;
 use crate::types::reference_list::ReferenceList;
 use crate::types::Renderable;
@@ -23,10 +25,17 @@ impl Document {
 
 impl Renderable for Document {
        fn render_latex(&self) -> String {
-               let mut full_text = String::from("\
-\\documentclass{article}
-\\usepackage{hyperref}
-               ");
+               let mut full_text = format!("\
+\\documentclass{{article}}
+\\usepackage{{hyperref}}
+\\hypersetup{{
+       pdftitle={{{title}}},
+       pdfauthor={{{author}}},
+       }}
+               ",
+               title = self.metadata.title,
+               author = self.metadata.author
+               );
                match &self.metadata.style {
                        Some(style) => {full_text.push_str(&format!("\\usepackage{{{style}}}\n"));}
                        None => ()
@@ -70,19 +79,24 @@ impl Renderable for Document {
 
 impl Document{
        pub fn render_metadata(&self) -> String {
-               let mut data = self.metadata.keys.clone();
+               let data = serde_json::to_value(self.metadata.keys.clone()).unwrap();
+               let text = self.render_plaintext();
 
-               data.insert(String::from("title"), self.metadata.title.to_string());
-               data.insert(String::from("author"), self.metadata.author.to_string());
-               data.insert(String::from("date"), self.metadata.date.to_string());
+               json!({
+                       "title": self.metadata.title,
+                       "author": self.metadata.author,
+                       "date": self.metadata.date,
+                       "stats": {
+                               "elements": self.body.len(),
+                               "word_count": text.split_whitespace().collect::<Vec<&str>>().iter().len(),
+                               "character_count": text.split_whitespace().map(|s| s.chars()).flatten().collect::<Vec<char>>().len()
+                       },
+                       "data": data
+               }).to_string()
+       }
 
-               data.insert(String::from("elements"), self.body.len().to_string());
+       pub fn render_wordcount(&self) -> String {
                let text = self.render_plaintext();
-               let word_count = text.split_whitespace().collect::<Vec<&str>>().iter().len();
-               data.insert(String::from("word_count"), word_count.to_string());
-               let character_count = text.split_whitespace().map(|s| s.chars()).flatten().collect::<Vec<char>>().len();
-               data.insert(String::from("character_count"), character_count.to_string());
-
-               format!("{data:?}")
+               text.split_whitespace().collect::<Vec<&str>>().iter().len().to_string()
        }
 }