diff options
author | 2021-12-22 12:36:44 +0100 | |
---|---|---|
committer | 2021-12-22 12:36:44 +0100 | |
commit | 640ace97fdd69766ca0a90078d7df0c6a3ac4e35 (patch) | |
tree | 6b4c3cb00042ead2340a316d94dfe2f65bc39b8a | |
parent | f7b6dc58eb41c6afecfb7c3915a4317124de2068 (diff) | |
download | hyde-640ace97fdd69766ca0a90078d7df0c6a3ac4e35.tar.gz hyde-640ace97fdd69766ca0a90078d7df0c6a3ac4e35.zip |
Migration to Ruby
-rw-r--r-- | Makefile | 29 | ||||
-rw-r--r-- | README.md | 20 | ||||
-rwxr-xr-x | check.sh | 20 | ||||
-rwxr-xr-x | hyde.rb | 45 | ||||
-rwxr-xr-x | hyde.sh | 3 | ||||
-rwxr-xr-x | hyde.sh.mk | 3 | ||||
-rw-r--r-- | pom.xml | 147 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Dir.java | 34 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java | 163 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Page.java | 129 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Website.java | 48 | ||||
-rw-r--r-- | src/test/java/it/alessandroiezzi/genwebsite/AppTest.java | 20 |
12 files changed, 45 insertions, 616 deletions
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 @@ -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 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <groupId>it.alessandroiezzi</groupId> - <artifactId>hyde</artifactId> - <version>0.0.1</version> - - <name>hyde</name> - <!-- FIXME change it to the project's website --> - <url>https://github.com/aindros/hyde</url> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <maven.compiler.source>1.8</maven.compiler.source> - <maven.compiler.target>1.8</maven.compiler.target> - </properties> - - <dependencies> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <optional>true</optional> - <version>1.18.4</version> <!-- la 1.16.x non funziona con la JDK 11 --> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - <version>3.7</version> - </dependency> - <dependency> - <groupId>com.vladsch.flexmark</groupId> - <artifactId>flexmark-all</artifactId> - <version>0.62.2</version> - </dependency> - <dependency> - <groupId>org.freemarker</groupId> - <artifactId>freemarker</artifactId> - <version>2.3.30</version> - </dependency> - <dependency> - <groupId>commons-cli</groupId> - <artifactId>commons-cli</artifactId> - <version>1.4</version> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>2.8.0</version> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.dataformat</groupId> - <artifactId>jackson-dataformat-xml</artifactId> - <version>2.11.1</version> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.11</version> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>single</goal> - </goals> - </execution> - </executions> - <configuration> - <descriptorRefs> - <descriptorRef>jar-with-dependencies</descriptorRef> - </descriptorRefs> - <archive> - <manifest> - <mainClass>it.alessandroiezzi.genwebsite.Genwebsite</mainClass> - </manifest> - </archive> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - <addClasspath>true</addClasspath> - <mainClass>it.alessandroiezzi.genwebsite.Genwebsite</mainClass> - </manifest> - </archive> - </configuration> - </plugin> - </plugins> - <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> - <plugins> - <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> - <plugin> - <artifactId>maven-clean-plugin</artifactId> - <version>3.1.0</version> - </plugin> - <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> - <plugin> - <artifactId>maven-resources-plugin</artifactId> - <version>3.0.2</version> - </plugin> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.8.0</version> - </plugin> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <version>2.22.1</version> - </plugin> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <version>3.0.2</version> - </plugin> - <plugin> - <artifactId>maven-install-plugin</artifactId> - <version>2.5.2</version> - </plugin> - <plugin> - <artifactId>maven-deploy-plugin</artifactId> - <version>2.8.2</version> - </plugin> - <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> - <plugin> - <artifactId>maven-site-plugin</artifactId> - <version>3.7.1</version> - </plugin> - <plugin> - <artifactId>maven-project-info-reports-plugin</artifactId> - <version>3.0.0</version> - </plugin> - </plugins> - </pluginManagement> - </build> -</project> 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 <https://www.gnu.org/licenses/>. - */ -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 <https://www.gnu.org/licenses/>. - */ -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<File> 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<String, Object> 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<File> 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 <https://www.gnu.org/licenses/>. - */ -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, "<br />\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 <https://www.gnu.org/licenses/>. - */ -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<Dir> includes = new ArrayList<>(); - @Getter private String rootDir; - @Setter private String pagesDir; - @Getter @Setter private String template; - @Getter @Setter private List<Page> pages = new ArrayList<>(); - @Getter private Map<String, String> 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 ); - } -} |