slweb

Једноставни генератор статичких веб страна
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 90922b1aa8b23fdfe69bd0f342a036917eec8f40
родитељ 923f2dea7646e9e84062a26edb46f9e4e8295dda
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Mon, 14 Dec 2020 22:39:51 +0100

Removed the old Bash script, added all examples HTML to .gitignore

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
M.gitignore | 4+---
Mindex.html | 2+-
Dslweb.in | 356-------------------------------------------------------------------------------
измењених датотека: 3, додавања: 2(+), брисања: 360(-)

diff --git a/.gitignore b/.gitignore @@ -12,7 +12,5 @@ nohup.out slweb slweb.1 compile_commands.json -examples/basic/index.html -examples/includes/index.html -examples/tags/index.html +examples/*/*.html diff --git a/index.html b/index.html @@ -103,7 +103,7 @@ this program. If not, see &lt;https://www.gnu.org/licenses/&gt;. </p> <div id="git-log"> Previous commit: -index.slw e8066ca 2020-12-14 11:35:38 +0100 (Страхиња Радић) (HEAD -> master, tag: v0.3.0-alpha, origin/switch-to-c, origin/master, origin/HEAD, switch-to-c) +index.slw 923f2de 2020-12-14 22:37:53 +0100 (Страхиња Радић) (HEAD -> master, origin/master, origin/HEAD) </div><!--git-log--> diff --git a/slweb.in b/slweb.in @@ -1,356 +0,0 @@ -#!/bin/bash -#set -x - -BODY_ONLY=0 -INFILE=index.slw -OUTFILE=index.html -VERSION=%VERSION% -LSDIRS_MAX_SUBDIRS=5 -LSDIRS_PERMALINK_PATTERN='\3.\2.\1.' - -function throw() -{ - echo $1 1>&2 - exit 1 -} - -function version() -{ - cat <<EOT -Slweb $VERSION -EOT - return 1 -} - -function usage() -{ - cat <<EOT -usage: $(basename $0) [-b|--body-only] [-d <dir>|--basedir <dir>] [-h|--help] [-v|--version] <file> -EOT - return 1 -} - -function begin_html() -{ -cat <<EOT -<!DOCTYPE html> -<html lang="en"> -EOT -} - -function end_html() -{ -cat <<EOT -</html> -EOT -} - -function begin_head() -{ -cat <<EOT -<head> -EOT -} - -function head() -{ -cat <<EOT - <title>${VARS[site-name]}</title> - <meta charset="utf8" /> - <meta name="description" content="${VARS[site-desc]}" /> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta name="generator" content="slweb" /> -EOT -} - -function add_css() -{ - cat <<EOT - <link rel="stylesheet" href="$1" /> -EOT -} - -function end_head() -{ -cat <<EOT -</head> -EOT -} - -function begin_body() -{ -cat <<EOT -<body> -EOT -} - -function body() -{ - BODY=$(echo "$1" | \ - sed -e's/^#### \([^\n]*\)$/<h4>\1<\/h4>/g' \ - -e's/^### \([^\n]*\)$/<h3>\1<\/h3>/g' \ - -e's/^## \([^\n]*\)$/<h2>\1<\/h2>/g' \ - -e's/^# \([^\n]*\)$/<h1>\1<\/h1>/g' | \ - sed -z -e 's/^\n*>/<blockquote>\n>/g' \ - -e 's/^\([^>\n][^\n]*\)\?\n>/\1\n><blockquote>\n>/g' \ - -e 's/\n\([^>\n][^\n]*\)\?\n>/\n\1\n<blockquote>\n>/g' \ - -e 's/\n>\([^\n]*\)\n\([^>]\)/\n>\1\n<\/blockquote>\n\2/g' \ - -e 's/\n>\([^\n]*\)\n$/\n>\1\n<\/blockquote>\n/g' \ - -e 's/\n>/\n/g' | \ - sed -e '1h;2,$H;$!d;g;s/\n\+\n```[^\n]*\n/\n\n<pre>\n/g' | \ - sed -e 's/^```$/<\/pre>\n\n/g' | \ - sed -e '1h;2,$H;$!d;g;s/^\([^<>{\n]\+\)/<p>\1/g' | \ - sed -e '1h;2,$H;$!d;g;s/\n\n\([^<>{\n]\+\)/\n\n<p>\1/g' | \ - sed -e '1h;2,$H;$!d;g;s/^\([^>\n][^\n]*\)\n\n/\1<\/p>\n\n/g' | \ - sed -e '1h;2,$H;$!d;g;/\n\([^>\n][^\n]*\)\?\([^>}\n]\)\n\n/s/\([^\n]*[^>}\n]\)\n\n/\1<\/p>\n\n/g' | \ - sed -e '1h;2,$H;$!d;g;s/\([^>}\n]\)$/\1<\/p>\n\n/g' | \ - sed -e 's/^\*\*\([^*]*\)\*\*/<strong>\1<\/strong>/g' \ - -e 's/\([^\\]\)\*\*\([^*]*\)\*\*/\1<strong>\2<\/strong>/g' \ - -e 's/^\*\([^*]*\)\*/<em>\1<\/em>/g' \ - -e 's/\([^\\]\)\*\([^*]*\)\*/\1<em>\2<\/em>/g' \ - -e 's/\\\*/\*/g' \ - -e 's/^_\([^_]\+\)_/<em>\1<\/em>/g' \ - -e 's/\([^\\]\)_\([^_]\+\)_/\1<em>\2<\/em>/g' \ - -e 's/\\_/_/g' \ - -e 's/\\#/#/g' \ - -e 's/\\$//g' \ - -e 's/`\(.*\)`/<code>\1<\/code>/g' \ - -e 's/\\`/`/g' \ - -e "s/^{made-by}/$MADEBY/g" \ - -e "s/\([^\\]\){made-by}/\1$MADEBY/g" \ - -e 's/\\\({made-by}\)/\1/g' \ - -e "s/^{git-log}/$GITLOG/g" \ - -e "s/\([^\\]\){git-log}/\1$GITLOG/g" \ - -e 's/\\\({git-log}\)/\1/g' \ - -e 's/^{\.\([a-z 0-9-]\+\)#\([a-z0-9-]\+\)}/<div id="\2" class="\1">/g' \ - -e 's/\([^\\]\){\.\([a-z 0-9-]\+\)#\([a-z0-9-]\+\)}/\1<div id="\3" class="\2">/g' \ - -e 's/\\\({\.[a-z0-9-]\+#[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{#\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)}/<div id="\1" class="\2">/g' \ - -e 's/\([^\\]\){#\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)}/\1<div id="\2" class="\3">/g' \ - -e 's/\\\({#[a-z0-9-]\+\.[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\.\([a-z 0-9-]\+\)}/<div class="\1">/g' \ - -e 's/\([^\\]\){\.\([a-z0-9-]\+\)}/\1<div class="\2">/g' \ - -e 's/\\\({\.[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{#\([a-z0-9-]\+\)}/<div id="\1">/g' \ - -e 's/\([^\\]\){#\([a-z0-9-]\+\)}/\1<div id="\2">/g' \ - -e 's/\\\({#[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)#\([a-z0-9-]\+\)}/<\1 id="\3" class="\2">/g' \ - -e 's/\([^\\]\){\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)#\([a-z0-9-]\+\)}/\1<\2 id="\4" class="\3">/g' \ - -e 's/\\\({[a-z0-9-]\+\.[a-z 0-9-]\+#[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\([a-z0-9-]\+\)#\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)}/<\1 id="\2" class="\3">/g' \ - -e 's/\([^\\]\){\([a-z0-9-]\+\)#\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)}/\1<\2 id="\3" class="\4">/g' \ - -e 's/\\\({[a-z0-9-]\+#[a-z0-9-]\+\.[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)}/<\1 class="\2">/g' \ - -e 's/\([^\\]\){\([a-z0-9-]\+\)\.\([a-z 0-9-]\+\)}/\1<\2 class="\3">/g' \ - -e 's/\\\({[a-z0-9-]\+\.[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\([a-z0-9-]\+\)#\([a-z0-9-]\+\)}/<\1 id="\2">/g' \ - -e 's/\([^\\]\){\([a-z0-9-]\+\)#\([a-z0-9-]\+\)}/\1<\2 id="\3">/g' \ - -e 's/\\\({[a-z0-9-]\+#[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\([a-z0-9-]\+\)}/<\1>/g' \ - -e 's/\([^\\]\){\([a-z0-9-]\+\)}/\1<\2>/g' \ - -e 's/\\\({[a-z0-9-]\+\)/\1/g' \ - -e 's/^{\/\([a-z0-9-]\+\)}/<\/\1>/g' \ - -e 's/\([^\\]\){\/\([a-z0-9-]\+\)}/\1<\/\2>/g' \ - -e 's/\\\({\/[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\/\.\([a-z0-9-]\+\)}/<\/div><!--.\1-->/g' \ - -e 's/\([^\\]\){\/\.\([a-z0-9-]\+\)}/\1<\/div><!--.\2-->/g' \ - -e 's/\\\({\/\.[a-z0-9-]\+}\)/\1/g' \ - -e 's/^{\/#\([a-z0-9-]\+\)}/<\/div><!--#\1-->/g' \ - -e 's/\([^\\]\){\/#\([a-z0-9-]\+\)}/\1<\/div><!--#\2-->/g' \ - -e 's/\\\({\/#[a-z0-9-]\+}\)/\1/g' \ - -e 's/ $/<br \/>/g' \ - -e "s/^\\[=\\(\\S\\+\\) \\([^]]\\+\\)\\](\\([a-z]\+:\/\/[^)]\\+\\))/<a href=\"\\3\">\\{=\\1\\}\\2<\\/a>/g" \ - -e "s/\\([^\\\\]\\)\\[=\\(\\S\\+\\) \\([^]]\\+\\)\\](\\([a-z]\+:\/\/[^)]\\+\\))/\\1<a href=\"\\4\">\\{=\\2\\}\\3<\\/a>/g" \ - -e "s/^\\[\\([^]]\\+\\)\\](\\([a-z]\+:\/\/[^)]\\+\\))/<a href=\"\\2\">\\1<\\/a>/g" \ - -e "s/\\([^\\\\]\\)\\[\\([^]]\\+\\)\\](\\([a-z]\+:\/\/[^)]\\+\\))/\\1<a href=\"\\3\">\\2<\\/a>/g" \ - -e 's/\\\(\[[^]]\+\]([a-z]\+:\/\/[^)]\+)\)/\1/g' \ - -e "s/^\\[=\\(\\S\\+\\) (\\([^]]\\+\\))\\](\\([^)]\\+\\))/<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\3\">\\{=\\1\\}<span>\\2<\\/span><\\/a>/g" \ - -e "s/\\([^\\\\]\\)\\[=\\(\\S\\+\\) (\\([^]]\\+\\))\\](\\([^)]\\+\\))/\\1<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\4\">\\{=\\2\\}<span>\\3<\\/span><\\/a>/g" \ - -e "s/^\\[(\\([^]]\\+\\))\\](\\([^)]\\+\\))/<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\2\"><span>\\1<\\/span><\\/a>/g" \ - -e "s/\\([^\\\\]\\)\\[(\\([^]]\\+\\))\\](\\([^)]\\+\\))/\\1<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\3\"><span>\\2<\\/span><\\/a>/g" \ - -e "s/^\\[=\\(\\S\\+\\) \\([^]]\\+\\)\\](\\([^)]\\+\\))/<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\3\">\\{=\\1\\}\\2<\\/a>/g" \ - -e "s/\\([^\\\\]\\)\\[=\\(\\S\\+\\) \\([^]]\\+\\)\\](\\([^)]\\+\\))/\\1<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\4\">\\{=\\2\\}\\3<\\/a>/g" \ - -e "s/^\\[\\([^]]\\+\\)\\](\\([^)]\\+\\))/<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\2\">\\1<\\/a>/g" \ - -e "s/\\([^\\\\]\\)\\[\\([^]]\\+\\)\\](\\([^)]\\+\\))/\\1<a href=\"$(realpath --relative-to=$BASEDIR $(dirname $INFILE) | sed -e's/\//\\\//g' -e's/&/\\\&/g')\/\\3\">\\2<\\/a>/g" \ - -e 's/\\\(\[[^]]\+\]([^)]\+)\)/\1/g') - - INCLUDE=$(echo "$BODY" | \ - sed -e'/^{include/s/{include \"\([.\/a-z0-9_ -]\+\)\"}.*/\1/;t;d' | \ - sed 1q) - - while [ -n "$INCLUDE" ]; do - INCLUDE_BODY=$($0 -b -d $(dirname $INFILE) "$(dirname $INFILE)/$INCLUDE.slw" | \ - sed -z -e's/\//\\\//g' -e's/"/\\"/g' -e's/&/\\\&/g' -e's/\n/\\n/g') - BODY=$(echo "$BODY" | \ - sed -e"s/^{include \\\"$(echo $INCLUDE | sed -e's/\//\\\//g' -e's/&/\\\&/g')\\\"}/$INCLUDE_BODY/") - INCLUDE=$(echo "$BODY" | \ - sed -e'/^{include/s/.*{include \"\([.\/a-z0-9_ -]\+\)\"}.*/\1/;t;d' | \ - sed 1q) - done - - for macro_name in $MACRO_NAMES; do - MACRO_BODY=$(echo "${MACROS[$macro_name]}" | \ - sed -z -e's/\//\\\//g' -e's/"/\\"/g' -e's/&/\\\&/g' -e's/\n/\\n/g') - BODY=$(echo "$BODY" | \ - sed -e "s/{=$macro_name}/$MACRO_BODY/g") - done - echo "$BODY" -} - -function end_body() -{ -cat <<EOT -</body> -EOT -} - -BASEDIR=. -MADEBY=$(cat <<EOT | sed -e's/\//\\\//g' -e"s/\"/\\\\\"/g" | sed -z -e's/\n/\\n/g' -<div id="made-by"> -Generated by <a href="https://github.com/Strahinja/slweb">slweb</a> -© 2020 Strahinya Radich. -</div><!--made-by--> -EOT -) -GITLOG=$(cat <<EOT | sed -e's/\//\\\//g' -e"s/\"/\\\\\"/g" | sed -z -e's/\n/\\n/g' -<div id="git-log"> -Previous commit: -$(git log -1 --pretty=format:"$(basename $INFILE) %h %ci (%cn) %d" \ - $INFILE 2>/dev/null || echo "(Not in a Git repository)") -</div><!--git-log--> -EOT -) - -while [ $# -gt 0 ]; do - case "$1" in - -v|--version) version; exit - ;; - -h|--help) usage; exit - ;; - -b|--body-only) BODY_ONLY=1 - ;; - -d|--basedir) shift; BASEDIR=$1 - ;; - *) INFILE=$1 - ;; - esac - shift -done - -[ -f $INFILE ] || throw "$INFILE not present" - -declare -A VARS - -HAS_YAML=$(grep -- '^---' "$INFILE" 2>/dev/null) -if [ -n "$HAS_YAML" ]; then - YAML=$(sed '/^---/,$d' $INFILE) - VAR_KEYS=$(echo "$YAML" | \ - grep '^[a-z-]\+:.*' | \ - sed -e's/^\([a-z-]\+\):.*$/\1/g') - for key in $VAR_KEYS; do - VARS[$key]=$(sed '/^---/,$d' $INFILE | grep -e "^$key:" | \ - sed -e "s/^$key: \(.*\)$/\1/g") - done - CSSFILES=$(echo "$YAML" | \ - grep ^stylesheet | \ - sed -e 's/stylesheet: \(.*\)/\1/g') -fi -INDIR=$(dirname $INFILE 2>/dev/null) - -#if [ $BODY_ONLY -eq 0 ]; then - grep -- '^---' $INFILE 2>&1 >/dev/null \ - && DOC="$(sed '0,/^---/d' $INFILE)" \ - || DOC=$(cat $INFILE) -#else - #DOC=$(cat $INFILE) -#fi - -lsdirs_commands=$(echo "$DOC" | \ - grep -e '{lsdirs\( [0-9]\+\)\?}' \ - -e '{lsdirs\( [0-9]\+\)\? =[^}]\+}') -#shopt -s extglob -#shopt -s nullglob -lsdirs_subdir_count=$(echo "$lsdirs_commands" | \ - sed -e 's/{lsdirs\( \([0-9]\+\)\)\?}/\2/g' \ - -e 's/{lsdirs\( \([0-9]\+\)\)\? =[^}]\+}/\2/g') -lsdirs_subdir_count=${lsdirs_subdir_count:=$LSDIRS_MAX_SUBDIRS} -lsdirs_subdirs=$(cd $INDIR; \ - find . -mindepth 1 -type d -print | sort -r) -while IFS= read -r lsdirs_command; do - [ -z "$lsdirs_command" ] && continue - lsdirs_macroname=$(echo "$lsdirs_command" | \ - grep '{lsdirs\( [0-9]\+\)\? =[^}]\+}' | \ - sed -e 's/{lsdirs\( [0-9]\+\)\? =\([^}]\+\)}/\2/g') - lsdirs_html="<ul class=\"dir\">\n" - details_open=" open" - while IFS= read -r lsdirs_subdir; do - [ $lsdirs_subdir_count -le 0 ] && break - lsdirs_subdir_count=$(($lsdirs_subdir_count-1)) - [ -z "$lsdirs_subdir" ] && continue - lsdirs_html="$lsdirs_html\n<li>\n<details${details_open}>\n\ - <summary>" - if [ -n "$lsdirs_macroname" ]; then - lsdirs_html="$lsdirs_html{=$lsdirs_macroname}" - fi - lsdirs_html="$lsdirs_html$(basename "$lsdirs_subdir")\ - </summary>\n\ - <div>\n" - - lsdirscontent_files=$(cd $INDIR; \ - find $lsdirs_subdir -mindepth 1 -name '*.slw' -print) - while IFS= read -r lsdirscontent_file; do - [ -z "$lsdirscontent_file" ] && continue - lsdirscontent_file_html=$(echo "$lsdirscontent_file" | \ - sed -e 's/\.slw/\.html/g') - lsdirscontent_file_date=$(grep '^date:' $lsdirscontent_file | \ - sed -E "s/^date: ([0-9]{4})-([0-9]{2})-([0-9]{2})T.*/$LSDIRS_PERMALINK_PATTERN/g" | \ - sed 1q) - lsdirs_html="$lsdirs_html\ - <a href=\"$INDIR/$lsdirscontent_file_html\">$lsdirscontent_file_date</a>\ - $($0 -b -d $INDIR $INDIR/$lsdirscontent_file)" - done <<< "$lsdirscontent_files" - - lsdirs_html="$lsdirs_html\ - </div>\n\ - </details>\n</li>\n" - details_open="" - done <<< "$lsdirs_subdirs" - lsdirs_html="$lsdirs_html\n</ul><!--dir-->\n" - lsdirs_html=$(echo "$lsdirs_html" | \ - sed -e's/\//\\\//g' -e's/\[/\\\[/g' -e's/\]/\\\]/g' -e's/\./\\\./g' \ - -e's/\"/\\\"/g' | \ - sed -ze 's/\n/\\n/g') - # -e's/\n/\\n/g') - DOC=$(echo "$DOC" | \ - sed -e "s/$lsdirs_command/$lsdirs_html/g") -done <<< "$lsdirs_commands" - - -declare -A MACROS -MACRO_NAMES=$(sed -e 's/{=\(\S\+\)}/\1/g;t;d' $INFILE) -for macro_name in $MACRO_NAMES; do - MACROS[$macro_name]=$(echo "$DOC" | \ - grep -zo "{=$macro_name}\\(.*\\){\\/=$macro_name}" | tr -d '\0' | \ - sed -ze "s/{=$macro_name}\\(.*\\){\\/=$macro_name}/\\1/g") - DOC=$(echo "$DOC" | \ - sed -ze "s/\s*{=$macro_name}\\(.*\\){\\/=$macro_name}\s*//g") -done - -if [ $BODY_ONLY -eq 0 ]; then - begin_html - begin_head - head - for CSSFILE in $CSSFILES; do - [ -f $INDIR/$CSSFILE ] && add_css $CSSFILE \ - || echo "$INDIR/$CSSFILE not found" - done - end_head - begin_body -fi -[ -n "${VARS[title]}" ] && DOC="## ${VARS[title]}$(echo; echo "$DOC")" -body "$DOC" -if [ $BODY_ONLY -eq 0 ]; then - end_body - end_html -fi -