]> git.huck.website - metaforge.git/commitdiff
added: working README site
authorHuck Boles <huck@huck.website>
Sun, 21 May 2023 23:18:10 +0000 (18:18 -0500)
committerHuck Boles <huck@huck.website>
Sun, 21 May 2023 23:18:10 +0000 (18:18 -0500)
README
files/README/pattern/body/default.meta
files/README/source/docs/default.meta
files/README/source/docs/definitions.meta
files/README/source/docs/expansions.meta
files/README/source/docs/header.meta
files/README/source/docs/structure.meta
files/README/source/docs/syntax.meta
files/README/source/index.meta
tests/readme.rs [new file with mode: 0644]

diff --git a/README b/README
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..80458c1405e29bcd9242b3cbdab2319e2d145588 100644 (file)
--- a/README
+++ b/README
@@ -0,0 +1,13 @@
+metaforge - v0.1.1
+
+a pattern driven static site generator for extensible snippet insertion.
+
+the full documentation is available in this repository under the **files/README/source/docs**
+directory. it's currently setup as a working example of a metaforge site, so you can poke around
+and see one way a site can be setup.
+
+building documentation:
+    $ cargo test -- --ignored readme
+
+this command can be run as many times as needed to regenerate the documentation, and is
+reccomended after upgrading to a new version to see what's changed.
index 1bdfbcc59804fe9fd7e3cdab20eec81b58514cbb..015020206f5872957dfd412755cfea3bd3bd4376 100644 (file)
@@ -1,6 +1,6 @@
 <body>
-    <a href="../index.html">home</a>
-    <h1>${title}</h1>
+    <a href="${home}">home</a>
+    <div><h1><strong>${title}</strong> - <em>${version}</em></h1></div>
     <p>${description}</p>
     <article>
         &{SOURCE}
index f0767101d9b1cabce69630fafbd4198df0aaaa84..810305831e2ced403b5a8f0ecd6834c9a41d5912 100644 (file)
@@ -1,7 +1,10 @@
 ${
-    var = '${'
-    arr = '@{'
-    pat = '&{'
-    head = '#{'
-    com = '-{'
+    -{ index is a folder up in this directory }
+    home = '../index.html'
+    -{ using substitutions for example code so it doesn't mess up parsing }
+    var = '${ '
+    arr = '@{ '
+    pat = '&{ '
+    head = '#{ '
+    com = '-{ '
 }
index 99259a97bf6c2e9f04ca7c61787d871a50998121..ff507c2683542e55c3850aa60460a4432bab512c 100644 (file)
@@ -1,6 +1,7 @@
 ${
     title = 'definitions'
     description = 'definining variables and patterns'
+    arr_sub = '@{'
 }
 
 ## rules
@@ -11,25 +12,26 @@ text, and after any header settings (which are a special type of definition bloc
 a block is a sigil for the definition type, followed by braces that
 surround assignment statements
 
-assignments are identifiers, followed by an equals sign, then a value
+assignments are identifiers, followed by an equals sign (=), then a value
 
 definition blocks can have spaces and new lines arbitrarily inserted
 between each component, and support multiple assignments per block
 
 ## identifiers
 
-identifiers can contain alphanumeric ascii values as well as _ and separating dots .
+identifiers can contain alphanumeric ascii values and _ as well as separating dots (.)
 
 variable identifiers without dots are available to any pattern called by the file
 
 array identifiers without dots are available only to the pattern they are defined in
 
 variable and array identifiers with separating dots use the final item
-as the variable, and the preceding items are expanded like a pattern identifier to make
-a mask on the definition. the definition is only valid in that pattern directory (not children), otherwise it is undefined.
+as the identifier, and the preceding items are expanded like a pattern identifier to make
+a mask on the definition. the definition is only valid in that pattern directory (not children),
+otherwise it is undefined.
 
-pattern identifiers expand to a directory of files in the pattern
-directory by replacing .'s with /'s, appending necessary file extensions when called.
+pattern identifiers expand to a directory of files in the pattern directory
+by replacing .'s with /'s, appending necessary file extensions when called.
 the value selects a single file in the directory as the desired pattern.
 
 an identifier preceded by an star (*) will be marked as local to the file it is defined in.
@@ -41,9 +43,9 @@ assignment in a local block can be made global again by prefixing it with an exc
 values can be a double or single quoted string, if defining an array,
 a value is a bracket surrounded, comma separated list of strings
 
-all values can optionally be assigned as BLANK, which expands to nothing
+all values can optionally be assigned as ***BLANK***, which expands to nothing
 
-patterns can also be assigned as DEFAULT, for overriding globally defined patterns.
+patterns can also be assigned as ***DEFAULT***, for overriding globally defined patterns.
 
 ## scope
 
@@ -52,33 +54,33 @@ directory is defined in all files in the current and child directories.
 
 values defined normally are defined for any file called in the chain of expansion.
 this value can be overridden, either for a single file in the chain by prefixing the
-definition with a star *, or for any files further down the chain, by defining a new
+definition with a star (*), or for any files further down the chain, by defining a new
 value normally.
 
 ## examples
 
     ${var}
-        *foo = 'bar' ${com} foo is only equal to bar in this file }
-        bar.baz = BLANK ${com} this only applies to pattern/bar/*.meta }
-        baz = quux ${com} baz is equal to quux in every file called during
-                      expansion, unless it gets overridden }
+       *foo = 'bar' ${com} foo is only equal to bar in this file }
+       bar.baz = BLANK ${com} this only applies to pattern/bar/*.meta }
+       baz = quux ${com} baz is equal to quux in every file called during
+                     expansion, unless it gets overridden }
     }
 
     ${arr}
-        bar = ['foo','bar']
-        baz.blank = BLANK ${com} this inserts nothing }
+       bar = ['foo','bar']
+       baz.blank = BLANK ${com} this inserts nothing }
 
-        foo.bar = [ 'foobar', 'foobaz' ]
-        ${com} this will copy pattern/foo/*.meta twice, inserting 'foobar and 'foobaz'
-           once each at the location of @{bar} }
+       foo.bar = [ 'foobar', 'foobaz' ]
+       ${com} this will copy pattern/foo/*.meta twice, inserting 'foobar and 'foobaz'
+          once each at the location of ${arr_sub}bar} }
     }
 
     ${com} all of these patterns are only defined for this file }
     *${pat}
-        foo.bar = BLANK
-        bar.default = DEFAULT
+       foo.bar = BLANK
+       bar.default = DEFAULT
 
-        !baz = "bar"
-        ${com} except for this definition, which
-           continues down the expansion chain }
+       !baz = "bar"
+       ${com} except for this definition, which
+          continues down the expansion chain }
     }
index 5b38ce502b05fdc2507029cd1d4ae525094f27d0..6060114691f31692a851f0dbbfcff509f1f4a754 100644 (file)
@@ -1,6 +1,9 @@
 ${
     title = 'expansions'
     description = 'expanding variables and patterns in a file'
+    var_sub = '${'
+    arr_sub = '@{'
+    pat_sub = '&{'
 }
 
 ## syntax
@@ -12,11 +15,11 @@ when the file is built
 
 ### examples
 
-    ...this is a string with a ${var}variable} to be expanded...
+    ...this is a string with a ${var_sub}variable} to be expanded...
 
-    ...this line has a ${pat}pattern} inside of it...
+    ...this line has a ${pat_sub}pattern} inside of it...
 
-    ...this ${arr}array} will be replaced...
+    ...this ${arr_sub}array} will be replaced...
 
 ## behavior
 
@@ -33,9 +36,9 @@ don't need any extra expansion.
 
     definition:
         ${var}
-            baz = "foo"
-            bar.baz = "quux"
-            quux = BLANK
+           baz = "foo"
+           bar.baz = "quux"
+           quux = BLANK
         }
 
     pattern [foo]: <p>${var}baz} ${var}quux}</p>
@@ -55,7 +58,7 @@ parts of patterns.
 
 #### example
 
-    pattern [foo]: <p>${arr}bar}</p>
+    pattern [foo]: <p>${arr_sub}bar}</p>
 
     defintion: ${arr} foo.bar = ['foo', 'bar', 'baz'] }
 
@@ -97,9 +100,9 @@ so it is required to have at least a **default.meta** in the **pattern/base** di
 
 ### example
 
-    pattern [base]: <html>${pat}body}</html>
+    pattern [base]: <html>${pat_sub}body}</html>
 
-    pattern [body]: <body>${pat}SOURCE}</body>
+    pattern [body]: <body>${pat_sub}SOURCE}</body>
 
     source [SOURCE]: foo *bar* baz
 
index 8213b6e113a9cbc630b10be6cc5666a9390ab03d..88a535161e8cf270c923a847b657183a7ed76c1f 100644 (file)
@@ -9,14 +9,15 @@ define settings for the parser, allowing better control over how a single file g
 processed.
 
 header blocks works similarly as any other definition block, with keys consisting
-of pre-defined keywords, and values are booleans (unquoted) or strings, and the ***DEFAULT***
-option for overriding.
+of pre-defined keywords, and values consisting of booleans (unquoted) or strings,
+as well as ***DEFAULT*** option for overriding.
 
 the header block must be the first block in a file, as it determines how the parser
 reads and constructs the rest of the file
 
 in a **default.meta** file, any keys preceded by an exclamation mark (!) get applied
-as global header settings, following the same inheritance rules as other global definitions.
+as header settings for the entire directory and children, following the same inheritance
+rules as other definitions.
 
 prefixing a definition block with an exclamation mark makes the entire block globally defined.
 inside, you can mark individual assignments as local by preceding them with a star (*) as in
@@ -25,22 +26,22 @@ normal definition blocks.
 ### example
 
     ${head}
-        filetype = 'txt'
-        !pandoc = 'false'
+       filetype = 'txt'
+       !pandoc = 'false'
     }
 
 ## keywords
 
 ### any
 
-- blank = BOOL - stops parsing and returns an empty string
-- panic_default = BOOL - if true, panics on an undefined default pattern
-- panic_undefined = BOOL - if true, panics on an undefined variable or array
-- equal_arrays = BOOL - if true, panics if arrays in the same pattern have different sizes
+- blank = **BOOL** - if true, stops parsing and returns an empty string
+- panic_default = **BOOL** - if true, panics on an undefined default pattern
+- panic_undefined = **BOOL** - if true, panics on an undefined variable or array
+- equal_arrays = **BOOL** - if true, panics if arrays in the same pattern have different sizes
 
 ### source
 
-- ignore = BOOL - stops parsing and skips this file, useful for ignoring directories with scoped definitions
-- filetype = STRING - change the filetype of the output file
-- source = STRING - change the the filetype of the source file
-- pandoc = BOOL - toggles if pandoc is ran on this file to convert between filetypes
+- ignore = **BOOL** - stops parsing and skips this file, useful for ignoring directories with scoped definitions
+- source = **STRING** - change the the filetype of the source file
+- filetype = **STRING** - change the filetype of the output file
+- pandoc = **BOOL** - toggles if pandoc is ran on this file to convert between filetypes
index a9770571c8b7e5344ff94264b3cf57dd7142c50c..b8c51dc3034be79e7bb9f7a4c4e0d74ac64a0338 100644 (file)
@@ -1,3 +1,8 @@
+${
+    title = 'structure'
+    description = 'directory structure for metaforge'
+}
+
 ## file locations
 metaforge parses files with the **.meta** extension.
 
@@ -17,9 +22,9 @@ files from the pattern directory the should generally contain html snippets,
 but can contain anything that you'd like to substitute.
 
 required directories are:
-- source - site structure and contents
-- pattern - patterns for expansion
-- pattern/base - gets expanded to start building each pattern.
+- source (site structure and contents)
+- pattern (patterns for expansion)
+- pattern/base (gets expanded to start building each pattern)
 
 the build directory doesn't need to exist, as metaforge will create a
 new one if it's missing
index 56ff417f9d706296d8d6e730f07a129b75bbabdb..f8ae0b74b35fedd020af4445e66512a0c322e03d 100644 (file)
@@ -17,8 +17,8 @@ a sigil followed by assignment operations enclosed by brackets
     ${var} foo = 'bar' }
 
     ${pat}
-        foo.bar = "baz"
-        bar.baz = 'foo'
+       foo.bar = "baz"
+       bar.baz = 'foo'
     }
 
 ## strings
@@ -49,7 +49,7 @@ whitespace and newlines between list values are accepted
     ]
 
 ## comments
-a comment sigil \- followed by a comment in braces
+a comment sigil \- followed by a comment in braces.
 the only characters not allowed are braces.
 
 comments get removed during the first pass through of parsing, and can occur
@@ -59,9 +59,8 @@ anywhere in or across a line.
     ${com} foobar }
 
     ${com}
-        foobar
-        foobaz
-    }
+       foobar
+       foobaz }
 
 ## layout
 - optional header definition block
@@ -72,18 +71,18 @@ anywhere in or across a line.
     ${head} foo = 'bar' } ${com} settings for parsing file }
 
     ${var}
-        foo = 'foobar'
-        bar.foo = 'foobaz'
+       foo = 'foobar'
+       bar.foo = 'foobaz'
     }
 
     ${arr}
-        foo = ['foobar','foobaz']
-        foo.bar.baz = [ 'foobar', 'foobaz', 'barbaz' ]
+       foo = ['foobar','foobaz']
+       foo.bar.baz = [ 'foobar', 'foobaz', 'barbaz' ]
     }
 
     ${pat}
-        foo.bar = 'foobar'
-        bar = "foo_bar"
+       foo.bar = 'foobar'
+       bar = "foo_bar"
     }
 
     # FOOBAR
index 327b99513249725d5a97c0cc2e0540f0cf77d70d..079d07bd6f2046ac63e6082fe2b01bb6b6c9ccdb 100644 (file)
@@ -4,16 +4,22 @@ ${
 
 this is the documentation for metaforge, generated by metaforge itself.
 
-currently it's unstyled html rendered by your browser, so it's pretty bare-bones right now, but
+currently it's unstyled html rendered by your browser, so it's pretty bare-bones, but
 you can change that easily.
 
-open **files/README** in metaforge's repository, and explore the source and pattern
-files to get a glimpse into a working project.
+open **files/README** in metaforge's repository and explore the source and pattern
+files to get some examples.
+
+you can change anything in the **README** directory and see how it affects the site once
+you rebuild it.
 
 ## contents
 - [syntax](docs/syntax.html)
 - [definitions](docs/definitions.html)
 - [expansions](docs/expansions.html)
 - [structure](docs/structure.html)
-- [headers](docs/headers.html)
+- [headers](docs/header.html)
 - [flags](docs/flags.html)
+
+## versions
+- 0.1.1: initial release
diff --git a/tests/readme.rs b/tests/readme.rs
new file mode 100644 (file)
index 0000000..a64228a
--- /dev/null
@@ -0,0 +1,18 @@
+use eyre::Result;
+
+#[test]
+#[ignore = "generates README site"]
+fn readme() -> Result<()> {
+    let dir = std::path::PathBuf::from("files/README")
+        .canonicalize()
+        .unwrap();
+
+    let mut opts = metaforge::Options::new();
+    opts.root = dir.clone();
+    opts.source = dir.join("source");
+    opts.build = dir.join("build");
+    opts.pattern = dir.join("pattern");
+    opts.clean = true;
+
+    metaforge::build_site(&opts)
+}