чување 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:
измењених датотека: 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 <https://www.gnu.org/licenses/>. </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
-