]> git.huck.website - metaforge.git/commitdiff
fixed: minify header directive devel
authorHuck Boles <huck@huck.website>
Sat, 3 Jun 2023 15:14:25 +0000 (10:14 -0500)
committerHuck Boles <huck@huck.website>
Sat, 3 Jun 2023 15:14:25 +0000 (10:14 -0500)
files/test_site/source/unit_tests/find_dest.meta
files/test_site/source/unit_tests/global/no_minify.meta [new file with mode: 0644]
src/error.rs
src/lib.rs
src/metafile/dir/node.rs
src/metafile/file.rs
src/metafile/file/patterns.rs
src/metafile/file/variables.rs
src/metafile/header.rs
src/parser.rs
src/tests.rs

index b27622fd7604abaa2c4f08500059fe809de15bda..1a2a8193ab613a653f2d42f84a4e451b19bbf24c 100644 (file)
@@ -1 +1 @@
-#{ skip = 'true' }
+#{ ignore = 'true' }
diff --git a/files/test_site/source/unit_tests/global/no_minify.meta b/files/test_site/source/unit_tests/global/no_minify.meta
new file mode 100644 (file)
index 0000000..02d1ba3
--- /dev/null
@@ -0,0 +1,7 @@
+#{ minify = false }
+
+&{ base = DEFAULT }
+
+# TEST
+
+this shouldn't get minified
index 4f82158e330a95afcb30157a38418b41b87a29c0..241edcd3f64a7462ef80f70ac1625dbb6a089852 100644 (file)
@@ -24,6 +24,8 @@ pub enum MetaError {
     UndefinedDefault { pattern: String, path: String },
     #[error("the parser cannot resolve this input: {input}")]
     UnreachableRule { input: String },
+    #[error("unknown option in header: {opt}")]
+    Header { opt: String },
     #[error("{file}\n{error}")]
     ParserError { file: String, error: String },
     #[error(transparent)]
@@ -39,7 +41,7 @@ pub fn check_ignore<T>(result: Result<T, MetaError>) -> Result<Option<T>, MetaEr
         Ok(f) => Ok(Some(f)),
         Err(e) => match e {
             MetaError::Ignored => Ok(None),
-            e => Err(e.into()),
+            e => Err(e),
         },
     }
 }
index 696d5eb0ada24f6934fe759b76c4ac3489029021..017094f44492d4c472bfdc8153e7e5eab9e58db6 100644 (file)
@@ -54,9 +54,9 @@ pub fn build_site(opts: &Options) -> Result<()> {
     let mut source = DirNode::build(opts.source.clone(), opts)?;
 
     let global_init = if source.path.join("default.meta").exists() {
-        MetaFile::build(source.path.join("default.meta"), &opts)?
+        MetaFile::build(source.path.join("default.meta"), opts)?
     } else {
-        MetaFile::new(&opts)
+        MetaFile::new(opts)
     };
 
     source.map(&global_init)?;
index d9b2a052980a1c61a25c73a9f4319f6d309826f3..94071bf90c0b4e659da23a70e44696daa85546af 100644 (file)
@@ -62,7 +62,7 @@ impl<'a> DirNode<'a> {
 
             if self.global.header.copy_only {
                 let dest = self.global.dest()?;
-                fs::copy(file, &dest.parent().unwrap_or(&self.opts.build))?;
+                fs::copy(file, dest.parent().unwrap_or(&self.opts.build))?;
                 continue;
             }
 
@@ -86,7 +86,7 @@ impl<'a> DirNode<'a> {
             file.merge(&self.global);
             match file.construct() {
                 Ok(str) => {
-                    if file.header.minify && self.opts.minify {
+                    if file.header.minify && &file.header.filetype == "html" {
                         fs::write(file.dest()?, minify(str.as_bytes(), &HTML_CFG))?;
                     } else {
                         fs::write(file.dest()?, str)?;
index b86570942cca1a019d91c64fbb425a7261e6788a..71e05350666c0085bc94fb7f4e53470c3bd99c0b 100644 (file)
@@ -41,8 +41,7 @@ impl<'a> MetaFile<'a> {
             Err(_) => {
                 return Err(MetaError::FileNotFound {
                     path: path.to_string_lossy().to_string(),
-                }
-                .into())
+                })
             }
         };
 
@@ -71,12 +70,11 @@ impl<'a> MetaFile<'a> {
             return Err(Box::new(MetaError::Ignored));
         }
 
-        let src_str: String;
-        if self.header.pandoc.map_or(true, |x| x) {
-            src_str = self.pandoc().map_err(MetaError::from)?;
+        let src_str = if self.header.pandoc.map_or(true, |x| x) {
+            self.pandoc().map_err(MetaError::from)
         } else {
-            src_str = self.get_source().map_err(MetaError::from)?;
-        }
+            self.get_source().map_err(MetaError::from)
+        }?;
 
         let pattern = self.get_pattern("base").map_err(MetaError::from)?;
         let mut base = parse_string(pattern, self.opts).map_err(|e| MetaError::ParserError {
index 304254f4088edf74c4cd428c7db37f53decc5aab..012c561dd5e48a030835338956f6eb427ffc4a6a 100644 (file)
@@ -21,7 +21,7 @@ impl<'a> MetaFile<'a> {
         } else if self
             .opts
             .pattern
-            .join(key.replace(".", "/") + ".meta")
+            .join(key.replace('.', "/") + ".meta")
             .exists()
             || is_source
         {
index 08f09f81fb7bba42ed88c3f3be0e76a0392b9fe8..e217ee74bca3a032011d65110f17c9cc929f9556 100644 (file)
@@ -4,14 +4,10 @@ impl<'a> MetaFile<'a> {
     pub fn get_variable(&self, key: &str) -> Result<String> {
         log!(
             self.opts,
-            format!(
-                "substituting {} in {}",
-                key.to_string(),
-                self.path.display()
-            ),
+            format!("substituting {key} in {}", self.path.display()),
             2
         );
-        let long_key = self.name()? + "." + &key.to_string();
+        let long_key = self.name()? + "." + key;
         if let Some(val) = self.variables.get(&Scope::create_local(&long_key)) {
             Ok(val.clone())
         } else if let Some(val) = self.variables.get(&Scope::create_global(&long_key)) {
index a895ac3492db11cd545f2025d9fdf78ac2383362..fb428badc2b7539b5965d4801fc9b37a986d0f70 100644 (file)
@@ -1,5 +1,7 @@
 use std::collections::HashMap;
 
+use crate::MetaError;
+
 #[derive(Debug, Clone, Default)]
 pub struct Header {
     pub blank: bool,
@@ -31,8 +33,9 @@ impl Header {
     }
 }
 
-impl From<HashMap<String, String>> for Header {
-    fn from(value: HashMap<String, String>) -> Self {
+impl TryFrom<HashMap<String, String>> for Header {
+    type Error = MetaError;
+    fn try_from(value: HashMap<String, String>) -> Result<Self, Self::Error> {
         let mut header = Header::new();
         for (key, val) in value.iter() {
             match &key[..] {
@@ -45,10 +48,10 @@ impl From<HashMap<String, String>> for Header {
                 "source" => header.source = val.to_string(),
                 "ignore" => header.ignore = val == "true",
                 "copy_only" => header.copy_only = val == "true",
-                "minify" => header.copy_only = val == "true",
-                _ => continue,
+                "minify" => header.minify = val == "true",
+                x => return Err(MetaError::Header { opt: x.to_string() }),
             }
         }
-        header
+        Ok(header)
     }
 }
index d30dea521005f73a1104c0552f4458b808a42707..a4ae372baa0660b4a81fa7f544bbbe87f65a495e 100644 (file)
@@ -32,7 +32,7 @@ pub fn parse_string(file: String, opts: &Options) -> Result<MetaFile> {
             match pair.as_rule() {
                 Rule::source => meta_file.source = parse_source(pair.into_inner()),
                 Rule::header => {
-                    meta_file.header = Header::from(parse_header_defs(pair.into_inner()))
+                    meta_file.header = Header::try_from(parse_header_defs(pair.into_inner()))?
                 }
                 Rule::var_def => meta_file.variables = parse_defs(pair.into_inner())?,
                 Rule::arr_def => meta_file.arrays = parse_array_defs(pair.into_inner())?,
index 8564ce79a84504fbfb64d9d190030fdae8da3b53..6acef5700f3c29ced613e48ca6ee1aa4f3aa2c63 100644 (file)
@@ -203,5 +203,10 @@ fn test_global() -> Result<()> {
         "<p>GOOD GOOD</p>"
     );
 
+    assert_eq!(
+        fs::read_to_string(dir.join("build/unit_tests/global/no_minify.html"))?,
+        "<html>\n<h1 id=\"test\">TEST</h1>\n<p>this shouldn’t get minified</p>\n\n\n\n</html>\n"
+    );
+
     Ok(())
 }