diff --git a/README.md b/README.md
index 7bf147d..3688706 100644
--- a/README.md
+++ b/README.md
@@ -20,31 +20,60 @@ MIT. Review the `LICENSE` file if required.
## How to use
-You need a copy of GNU make (GPL-3 licensed software).
+`node ymake`, set options using `export` commands.
-Use the `gmake` (or if it's the system makefile parser, `make`) command
-after writing Markdown (\*.md) files to the `docs` directory.
+An alternative makefile for GNU make is avaliable if it is prefered.
-Afterwards, check the `build` directory for the `.html` files.
+Either way, you'll want to write Markdown (\*.md) files to the
+`docs` (which is the default `SRC_DIRS`) directory.
+
+Afterwards, check the `build` (`BUILD_DIR`) directory for the `.html` files.
Otherwise, if you just want to use `yiki` to render one file:
`node compile source.md target.htm`
+
## Options
+`SRC_DIRS` Specify the directory which `yiki` compiles files from.
+
+ymake: `export SRC_DIRS="./input"`
+
+GMake: `gmake SRC_DIRS="./input"`
+
+
+
+`BUILD_DIR` Specify the directory which `yiki` compiles files into.
+
+ymake: `export BUILD_DIR="./output"`
+
+GMake: `gmake BUILD_DIR="./output"`
+
+
+
`WIKINAME` Specify what the "A new yiki!" text should be replaced with.
-Example: `gmake WIKINAME="I love options!"`
+ymake: `export WIKINAME="I love options!"`
+
+GMake: `gmake WIKINAME="I love options!"`
+
+
`VPREFIX` Specify the virtual root of that the default template links to
for the `yiki.css` and the `index.html` files.
-Example: `gmake VPREFIX:="/yiki/"`
+ymake: `export VPREFIX="/yiki/"`
+
+GMake: `gmake VPREFIX:="/yiki/"`
+
+
`DOMAIN` Specifiy the domain name that your sitemap.xml links to.
-Example `gmake DOMAIN:="example.com"`
+ymake: `export DOMAIN="example.com"`
+
+GMake: `gmake DOMAIN:="example.com"`
## Contributing
diff --git a/compile.js b/compile.js
index d360b9a..f179023 100644
--- a/compile.js
+++ b/compile.js
@@ -32,12 +32,12 @@ const Process = require("process");
const Filesystem = require("fs");
const Path = require("path");
-if(Process.argv.length < 4) {
+if(Process.argv.length < 4 && require.main === module) {
console.error("You need a source.md and target.htm path!");
Process.exit(1);
}
-function render(input, options) {
+function markup(input, options) {
let tableOfContents = new Remarkable().use(TOCGenerator.plugin(options)).render(input);
let output = new Remarkable().use(RemarkableHeaderIDs()).render("# Table of contents:\n"+tableOfContents.content+"\n"+input);
return output;
@@ -105,5 +105,9 @@ function format(data, name) {
); /* eslint-enable indent */
}
-let content = render(Filesystem.readFileSync(Process.argv[2]).toString());
-Filesystem.writeFileSync(Process.argv[3], format(content, Path.basename(Process.argv[3], ".html").replace(/_/g, " ")));
+module.exports = {"markup": markup, "format": format};
+
+if(require.main === module) {
+ let content = markup(Filesystem.readFileSync(Process.argv[2]).toString());
+ Filesystem.writeFileSync(Process.argv[3], format(content, Path.basename(Process.argv[3], ".html").replace(/_/g, " ")));
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 39bdae6..8dd2e16 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "yiki",
- "version": "0.0.7",
+ "version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "yiki",
- "version": "0.0.7",
+ "version": "0.1.0",
"license": "MIT",
"dependencies": {
"@liquify/prettify": "^0.5.5-beta.1",
diff --git a/package.json b/package.json
index 1c51b4f..d225799 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,10 @@
{
"name": "yiki",
- "version": "0.0.7",
+ "version": "0.1.0",
"description": "The yellows111 wiki system",
"main": "compile.js",
"scripts": {
- "build": "gmake"
+ "build": "node ymake"
},
"keywords": [
"markdown"
diff --git a/sitemap-gen.js b/sitemap-gen.js
index 785e60f..ae7b5e6 100644
--- a/sitemap-gen.js
+++ b/sitemap-gen.js
@@ -23,8 +23,7 @@ const Process = require("process");
const Filesystem = require("fs");
// required vars
-const fileList = Process.argv.slice(3);
-const currentDir = Process.argv[2];
+
var rootPrefix = "/";
if(process.env["VPREFIX"]) {
rootPrefix = process.env["VPREFIX"];
@@ -40,19 +39,33 @@ function renderSiteMap() {
return ( /* eslint-disable indent */
`
-${outputTemp}
-
+${outputTemp}
`
); /* eslint-enable indent */
}
-for (let file of fileList) {
+function makeSitemapChunk(file, outputDir) {
outputTemp = outputTemp.concat( /* eslint-disable indent */
`
- https://${targetDomain}${rootPrefix}${file.replace(currentDir, "")}
+ https://${targetDomain}${rootPrefix}${file.replace(outputDir, "")}
${Filesystem.statSync(file).mtime.toISOString().substring(0, 10)}
- `
+
+`
); /* eslint-enable indent */
}
-Filesystem.writeFileSync(`${Process.argv[2]}/sitemap.xml`, renderSiteMap());
+if(require.main === module) {
+ const fileList = Process.argv.slice(3);
+ const currentDir = Process.argv[2];
+ for (let file of fileList) {
+ makeSitemapChunk(file, currentDir);
+ }
+ Filesystem.writeFileSync(`${Process.argv[2]}/sitemap.xml`, renderSiteMap());
+}
+
+module.exports = function(fileList, filter) {
+ for (let file of fileList) {
+ makeSitemapChunk(file, filter);
+ }
+ return renderSiteMap();
+}
\ No newline at end of file
diff --git a/ymake.js b/ymake.js
new file mode 100644
index 0000000..122287f
--- /dev/null
+++ b/ymake.js
@@ -0,0 +1,81 @@
+// Copyright (c) 2024 yellows111
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+//
+
+const Process = require("node:process");
+const Filesystem = require("node:fs");
+const Path = require("node:path");
+
+// yellows111 make - yiki makefile, v1
+
+const Compiler = require("./compile.js")
+
+var BUILD_DIR = "./build";
+var SRC_DIRS = "./docs";
+
+if(process.env["BUILD_DIR"]) {
+ BUILD_DIR = process.env["BUILD_DIR"];
+}
+if(process.env["SRC_DIRS"]) {
+ SRC_DIRS = process.env["SRC_DIRS"];
+}
+
+const MARKDOWN_L = Filesystem.globSync(`${SRC_DIRS}/**/*.md`);
+
+MARKDOWN_L.forEach(function(file) {
+ console.log("MARKER: "+file);
+ try {
+ Filesystem.statSync(
+ Path.dirname(
+ file.replace(Path.normalize(SRC_DIRS), Path.normalize(BUILD_DIR))
+ )
+ );
+ } catch(err) {
+ if(err.code === "ENOENT") {
+ let rpath = Path.dirname(file.replace(Path.normalize(SRC_DIRS), Path.normalize(BUILD_DIR)));
+ console.log(`creating ${rpath}/`);
+ Filesystem.mkdirSync(rpath, {"recursive": true});
+ } else {
+ throw err;
+ }
+ };
+ Filesystem.writeFileSync(
+ file.replace(Path.normalize(SRC_DIRS), Path.normalize(BUILD_DIR)).replace(".md", ".html"),
+ Compiler.format(
+ Compiler.markup(Filesystem.readFileSync(file).toString()),
+ Path.basename(file, ".md").replace(/_/g, " ")
+ )
+ );
+});
+
+Filesystem.globSync(`${SRC_DIRS}/**/*.css`).forEach(function(file) {
+ console.log("COPY: "+file);
+ Filesystem.copyFileSync(file, file.replace(/docs/, "build"));
+});
+
+Filesystem.writeFileSync(Path.normalize(BUILD_DIR+"/sitemap.xml"),
+ require("./sitemap-gen.js")(
+ MARKDOWN_L.map(function(filename){
+ return Path.dirname(filename).replace(/\\/g, "/").replace(/\.md/g, ".html")
+ }),
+ Path.normalize(SRC_DIRS)
+ )
+);
+console.log(`SMAP: ${Path.normalize(BUILD_DIR+"/sitemap.xml")}`);
\ No newline at end of file