From 640ace97fdd69766ca0a90078d7df0c6a3ac4e35 Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Wed, 22 Dec 2021 12:36:44 +0100 Subject: Migration to Ruby --- Makefile | 29 ---- README.md | 20 --- check.sh | 20 --- hyde.rb | 45 ++++++ hyde.sh | 3 - hyde.sh.mk | 3 - pom.xml | 147 ------------------- .../java/it/alessandroiezzi/genwebsite/Dir.java | 34 ----- .../it/alessandroiezzi/genwebsite/Genwebsite.java | 163 --------------------- .../java/it/alessandroiezzi/genwebsite/Page.java | 129 ---------------- .../it/alessandroiezzi/genwebsite/Website.java | 48 ------ .../it/alessandroiezzi/genwebsite/AppTest.java | 20 --- 12 files changed, 45 insertions(+), 616 deletions(-) delete mode 100644 Makefile delete mode 100644 README.md delete mode 100755 check.sh create mode 100755 hyde.rb delete mode 100755 hyde.sh delete mode 100755 hyde.sh.mk delete mode 100644 pom.xml delete mode 100644 src/main/java/it/alessandroiezzi/genwebsite/Dir.java delete mode 100644 src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java delete mode 100644 src/main/java/it/alessandroiezzi/genwebsite/Page.java delete mode 100644 src/main/java/it/alessandroiezzi/genwebsite/Website.java delete mode 100644 src/test/java/it/alessandroiezzi/genwebsite/AppTest.java diff --git a/Makefile b/Makefile deleted file mode 100644 index 9aab5c2..0000000 --- a/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -APPNAME=hyde -INSTALLDIR=~ -DESTDIR=${INSTALLDIR}/.${APPNAME} -JAR=${DESTDIR}/${APPNAME}.jar -LAUNCHER=${APPNAME} - -dist: - mvn package - -env: - @echo "APPNAME = "${APPNAME} - @echo "INSTALLDIR = "${INSTALLDIR} - @echo "DESTDIR = "${DESTDIR} - @echo "JAR = "${JAR} - @echo "LAUNCHER = "${LAUNCHER} - -install: - mkdir -p ${DESTDIR} - cp target/${APPNAME}-*-jar-with-dependencies.jar ${JAR} - cp ${APPNAME}.sh.mk ${LAUNCHER}.sh - chmod +x ${LAUNCHER}.sh - sed -i "" "s|DESTDIR|${JAR}|" ${LAUNCHER}.sh - cp ${APPNAME}.sh ${DESTDIR} - ln -s ${DESTDIR}/${LAUNCHER}.sh ${INSTALLDIR}/bin/${LAUNCHER} - -clean: - rm -rf ${BUILDDIR} - rm -f ${INSTALLDIR}/bin/${LAUNCHER} - rm -rf ${DESTDIR} diff --git a/README.md b/README.md deleted file mode 100644 index fb37bf8..0000000 --- a/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# hyde - -It's a simple website generator - -## Build instructions -Launch `check.sh` to check required softwares (and versions). - -Then: - -``` -$ make -# make install -``` - -To uninstall: - -``` -# make clean -``` - diff --git a/check.sh b/check.sh deleted file mode 100755 index ff4fb0c..0000000 --- a/check.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -if [ -z `which javac` ]; then - echo "- JDK 8 missing" - ERROR=1 -else - if [ -z `javac -version 2>&1 | awk '{print $2}' | grep -o "1.8"` ]; then - echo "- JDK 8 missing" - ERROR=1 - fi -fi - -if [ -z `which mvn` ]; then - echo "- Maven missing" - ERROR=1 -fi - -if [ -z $ERROR ]; then - echo "Check completed without errors" -fi diff --git a/hyde.rb b/hyde.rb new file mode 100755 index 0000000..ae97276 --- /dev/null +++ b/hyde.rb @@ -0,0 +1,45 @@ +#!/usr/local/bin/ruby + +require "erb" +require 'optparse' + +options = {} +OptionParser.new do |opt| + opt.on("-f", "--file-name FILENAME", "File name of the page you want to render") { + |o| options[:fileName] = o + } + opt.on("-t", "--title TITLE", "Title of the rendered page") { + |o| options[:title] = o + } + opt.on("-m", "--master MASTER", "Master file page") { + |o| options[:master] = o + } + opt.on("-n", "--page-name NAME", "page name") { + |o| options[:pageName] = o + } +end.parse! + +#puts options + +class Page + def initialize title, pageFileName, pageName + @title = title + @pageFileName = pageFileName + @pageName = pageName + end + + def render path + content = File.read(File.expand_path(path)) + t = ERB.new(content) + t.result(binding) + end +end + +#page = Page.new("Home", "home.html.erb") +page = Page.new(options[:title], options[:fileName], options[:pageName]) + +if options[:master] == nil + puts page.render("master.rhtml") +else + puts page.render(options[:master]) +end diff --git a/hyde.sh b/hyde.sh deleted file mode 100755 index 55b3ff5..0000000 --- a/hyde.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -java -jar ~/.hyde/hyde.jar $@ diff --git a/hyde.sh.mk b/hyde.sh.mk deleted file mode 100755 index 4caeb99..0000000 --- a/hyde.sh.mk +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -java -jar DESTDIR $@ diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 6dae9b8..0000000 --- a/pom.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - 4.0.0 - - it.alessandroiezzi - hyde - 0.0.1 - - hyde - - https://github.com/aindros/hyde - - - UTF-8 - 1.8 - 1.8 - - - - - org.projectlombok - lombok - true - 1.18.4 - - - org.apache.commons - commons-lang3 - 3.7 - - - com.vladsch.flexmark - flexmark-all - 0.62.2 - - - org.freemarker - freemarker - 2.3.30 - - - commons-cli - commons-cli - 1.4 - - - commons-io - commons-io - 2.8.0 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - 2.11.1 - - - junit - junit - 4.11 - test - - - - - - - maven-assembly-plugin - - - package - - single - - - - - - jar-with-dependencies - - - - it.alessandroiezzi.genwebsite.Genwebsite - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - true - it.alessandroiezzi.genwebsite.Genwebsite - - - - - - - - - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - maven-surefire-plugin - 2.22.1 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - - - - diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Dir.java b/src/main/java/it/alessandroiezzi/genwebsite/Dir.java deleted file mode 100644 index 1d2c970..0000000 --- a/src/main/java/it/alessandroiezzi/genwebsite/Dir.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2021 Alessandro Iezzi dev@alessandroiezzi.it - * - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package it.alessandroiezzi.genwebsite; - -import lombok.Getter; -import lombok.Setter; -import org.apache.commons.lang3.StringUtils; - -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; - -public class Dir { - @Getter @Setter private String name = ""; - - public Dir(String name) { - this.name = name; - } -} diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java b/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java deleted file mode 100644 index 553c370..0000000 --- a/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2021 Alessandro Iezzi dev@alessandroiezzi.it - * - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package it.alessandroiezzi.genwebsite; - -import com.fasterxml.jackson.dataformat.xml.XmlMapper; - -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateException; -import freemarker.template.TemplateExceptionHandler; -import org.apache.commons.cli.*; - -import org.apache.commons.io.FileUtils; - -import org.apache.commons.lang3.StringUtils; - -import java.io.*; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Genwebsite { - public static void main(String[] args) throws ParseException, IOException { - String filename = "./website.xml"; - - String longOpt = "file"; - Options options = new Options(); - Option _option = new Option("f", longOpt, true, - "If your website descriptor has a differnt name or resides in other directory."); - _option.setRequired(false); - options.addOption(_option); - CommandLine commandLine = new DefaultParser().parse(options, args); - if (commandLine.hasOption(longOpt)) { - filename = commandLine.getOptionValue(longOpt); - } - - File websiteXml = Paths.get(filename).toFile(); - - XmlMapper xmlMapper = new XmlMapper(); - Website website = xmlMapper.readValue(websiteXml, Website.class); - // Where to build - String websiteDir = websiteXml.getAbsoluteFile().getParent(); - if (website.getRootDir() == null || website.getRootDir().isEmpty()) { - website.setRootDir(websiteDir); - } - System.out.println("Root dir is: " + website.getRootDir()); - File outDir = Paths.get(websiteDir).resolve("build").toFile(); - outDir.mkdirs(); - - for (Dir dir : website.getIncludes()) { - FileUtils.copyDirectory(new File(dir.getName()), Paths.get(outDir.toURI()).resolve(new File(dir.getName()).getName()).toFile()); - } - - //Freemarker configuration object - Configuration cfg = new Configuration(Configuration.VERSION_2_3_29); - cfg.setDirectoryForTemplateLoading(new File(website.getRootDir())); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); - cfg.setLogTemplateExceptions(false); - cfg.setWrapUncheckedExceptions(true); - cfg.setFallbackOnNullLoopVariable(false); - - try { - for (Page page : website.getPages()) { - String pageTemplate = website.getTemplate(); - List files = new ArrayList<>(); - - if (page.getIn() != null && !page.getIn().isEmpty()) { - File file = new File(page.getIn()); - if (file.isDirectory()) { - listf(page.getIn(), files); - } else { - files.add(new File(page.getIn())); - } - } - - String pageOut = page.getOut(); - - for (File curFile : files) { - System.out.println("Processing: " + curFile.getPath()); - page.setIn(curFile.getPath()); - page.parse(); - if (StringUtils.isNotBlank(page.getTemplate())) { - pageTemplate = page.getTemplate(); - } - - //Load template from source folder - Template template = cfg.getTemplate(pageTemplate); - - // Build the data-model - Map data = new HashMap<>(); - data.put("title", page.getTitle()); - data.put("date", page.getDate()); - System.out.println(page.getDate() + " " + page.getTitle()); - data.put("content", page.getContent()); - data.put("globals", website.getGlobals()); - data.put(page.getId() + "Active", "class=\"active\""); - - // Console output - /* - Writer out = new OutputStreamWriter(System.out); - template.process(data, out); - out.flush(); - */ - - if (pageOut == null || pageOut.isEmpty()) { - page.setOut(curFile.getPath().replace(".md", ".html")); - System.out.println("Out dir page: " + page.getOut()); - } - File pageFile = Paths.get(outDir.getAbsolutePath()).resolve(page.getOut()).toFile(); - pageFile.getParentFile().mkdirs(); - if (pageFile.isDirectory()) { - pageFile = Paths.get(pageFile.getPath()).resolve(page.getIn()).toFile(); - } - - // File output - Writer file = new FileWriter(pageFile); - template.process(data, file); - file.flush(); - file.close(); - } - } - - } catch (IOException e) { - e.printStackTrace(); - } catch (TemplateException e) { - e.printStackTrace(); - } - } - - public static void listf(String directoryName, List files) { - File directory = new File(directoryName); - - // Get all files from a directory. - File[] fList = directory.listFiles(); - if(fList != null) { - for (File file : fList) { - if (file.isFile()) { - files.add(file); - } else if (file.isDirectory()) { - listf(file.getPath(), files); - } - } - } - } -} diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Page.java b/src/main/java/it/alessandroiezzi/genwebsite/Page.java deleted file mode 100644 index b36c78f..0000000 --- a/src/main/java/it/alessandroiezzi/genwebsite/Page.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2021 Alessandro Iezzi dev@alessandroiezzi.it - * - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package it.alessandroiezzi.genwebsite; - -import com.vladsch.flexmark.html.HtmlRenderer; -import com.vladsch.flexmark.parser.Parser; -import com.vladsch.flexmark.util.ast.Node; -import com.vladsch.flexmark.util.data.MutableDataSet; -import lombok.Getter; -import lombok.Setter; - -import java.io.BufferedReader; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; - -public class Page { - @Setter private String rootDir = ""; - @Getter @Setter private String out = ""; - @Getter @Setter private String content = ""; - @Getter private String in = ""; - @Getter @Setter private String template = ""; - @Setter private String title = ""; - @Getter @Setter private String id = ""; - @Getter @Setter private String dir = ""; - @Getter private boolean parsed = false; - @Getter private String date; - - public Page() { - date = new String(""); - } - - public String getTitle() { - if (!parsed) { - throw new RuntimeException("You must call parse before getTitle"); - } - - System.out.println("Page title: " + title); - - return title; - } - - public void setIn(String in) { - parsed = false; - this.in = in; - } - - public void setDate(String date) { - this.date = date; - System.out.println("-------------------> " + date); - } - - public String parse() throws IOException { - if (parsed) - return content; - - if (in != null && !in.isEmpty() && !in.trim().isEmpty()) { - String[] splited = in.split("\\."); - String extension = splited[splited.length - 1]; - - StringBuilder sb = new StringBuilder(); - BufferedReader br = Files.newBufferedReader(Paths.get(rootDir).resolve(in)); - String line; - while ((line = br.readLine()) != null) { - if (line.startsWith("# property:")) { - String property = line.replace("# property:", ""); - String[] splitted = property.split("="); - if (splitted.length > 1) { - switch(splitted[0].trim()) { - case "title": - title = splitted[1].trim(); - break; - case "date": - date = splitted[1].trim(); - break; - } - } - } else { - sb.append(line).append("\n"); - } - } - - switch (extension) { - case "md": - System.out.println("Parsing markdown"); - MutableDataSet options = new MutableDataSet(); - - // uncomment to set optional extensions - //options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), StrikethroughExtension.create())); - - // uncomment to convert soft-breaks to hard breaks - //options.set(HtmlRenderer.SOFT_BREAK, "
\n"); - - Parser parser = Parser.builder(options).build(); - HtmlRenderer renderer = HtmlRenderer.builder(options).build(); - - // You can re-use parser and renderer instances - Node document = parser.parse(sb.toString()); - - content = renderer.render(document); - break; - case "html": - case "htm": - case "xhtm": - content = sb.toString(); - break; - } - } - - parsed = true; - - return content; - } -} diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Website.java b/src/main/java/it/alessandroiezzi/genwebsite/Website.java deleted file mode 100644 index 652043e..0000000 --- a/src/main/java/it/alessandroiezzi/genwebsite/Website.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2021 Alessandro Iezzi dev@alessandroiezzi.it - * - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package it.alessandroiezzi.genwebsite; - -import lombok.Getter; -import lombok.Setter; -import org.apache.commons.lang3.StringUtils; - -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.HashMap; - -public class Website { - @Getter private List includes = new ArrayList<>(); - @Getter private String rootDir; - @Setter private String pagesDir; - @Getter @Setter private String template; - @Getter @Setter private List pages = new ArrayList<>(); - @Getter private Map globals = new HashMap<>(); - - public void setRootDir(String rootDir) { - this.pages.forEach(p -> { - String rootPageDir = rootDir; - if (StringUtils.isNotBlank(pagesDir)) { - rootPageDir = Paths.get(rootDir).resolve(pagesDir).toFile().getAbsolutePath(); - } - p.setRootDir(rootPageDir); - }); - this.rootDir = rootDir; - } -} diff --git a/src/test/java/it/alessandroiezzi/genwebsite/AppTest.java b/src/test/java/it/alessandroiezzi/genwebsite/AppTest.java deleted file mode 100644 index 49b044c..0000000 --- a/src/test/java/it/alessandroiezzi/genwebsite/AppTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.alessandroiezzi.genwebsite; - -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -/** - * Unit test for simple App. - */ -public class AppTest -{ - /** - * Rigorous Test :-) - */ - @Test - public void shouldAnswerWithTrue() - { - assertTrue( true ); - } -} -- cgit v1.2.3