mirror of
http://git.davidovski.xyz/shblg.git
synced 2024-08-15 00:43:48 +00:00
Compare commits
2 commits
af75a700c5
...
50074253d0
Author | SHA1 | Date | |
---|---|---|---|
|
50074253d0 | ||
|
52e9c3aeea |
8 changed files with 141 additions and 26 deletions
45
example/entries/entries.sh
Executable file
45
example/entries/entries.sh
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# add a special header to all entries
|
||||||
|
cat << EOF
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>$1</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>my blog</h1>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# make this page be the index if it is called with no arguments
|
||||||
|
[ -z "$1" ] && {
|
||||||
|
cat << EOF
|
||||||
|
<h2>blog entries</h2>
|
||||||
|
<ul>
|
||||||
|
EOF
|
||||||
|
# list all the files in the directory
|
||||||
|
for file in *.md; do
|
||||||
|
printf "<li><a href=\"%s\">%s</a></li>" "${file%.*}.html" "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
</ul>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
} || {
|
||||||
|
# convert the markdown page to html text
|
||||||
|
md2html $1
|
||||||
|
|
||||||
|
# add a back button
|
||||||
|
cat << EOF
|
||||||
|
<span><a href="entries.html">go back to list</a></span>
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# and a footer
|
||||||
|
cat << EOF
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
|
13
example/entries/entry1.md
Executable file
13
example/entries/entry1.md
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!./entries.sh
|
||||||
|
|
||||||
|
# first blog entry
|
||||||
|
|
||||||
|
hello welcome to my test blog. here i will be talking about blah
|
||||||
|
|
||||||
|
## something else
|
||||||
|
|
||||||
|
i probably have something else to say here
|
||||||
|
|
||||||
|
## conclusion
|
||||||
|
|
||||||
|
this is the conclusion, thank you
|
9
example/entries/entry2.md
Executable file
9
example/entries/entry2.md
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!./entries.sh
|
||||||
|
|
||||||
|
# day 2
|
||||||
|
|
||||||
|
this is a second entry to my blog
|
||||||
|
|
||||||
|
i learned how to make text **bold** and *italic*
|
||||||
|
|
||||||
|
wow isnt that ***cool???***
|
2
src/test.md → example/index.md
Normal file → Executable file
2
src/test.md → example/index.md
Normal file → Executable file
|
@ -1,3 +1,5 @@
|
||||||
|
#!/usr/bin/env md2html
|
||||||
|
|
||||||
# This is a test md file hello
|
# This is a test md file hello
|
||||||
|
|
||||||
This is *italics* this is **bold** this is ***both*** wow (this is in brackets ssh) and [this is in square brackets not a anchor lol]
|
This is *italics* this is **bold** this is ***both*** wow (this is in brackets ssh) and [this is in square brackets not a anchor lol]
|
8
install.sh
Executable file
8
install.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# installs m2html and shblg to the system path
|
||||||
|
|
||||||
|
PREFIX=${PREFIX:-/usr}
|
||||||
|
|
||||||
|
install -m755 src/md2html.sh ${PREFIX}/bin/md2html
|
||||||
|
install -m755 src/shblg.sh ${PREFIX}/bin/shblg
|
|
@ -6,6 +6,19 @@ cat () {
|
||||||
while IFS= read -r line; do printf "%s\n" "$line"; done < "$1"
|
while IFS= read -r line; do printf "%s\n" "$line"; done < "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# remove a shebang from the start of the file
|
||||||
|
_remove_shebang () {
|
||||||
|
IFS= read -r line
|
||||||
|
case "$line" in
|
||||||
|
"#!"*) ;;
|
||||||
|
*) printf "%s\n" "$line"
|
||||||
|
esac
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
printf "%s\n" "$line"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# remove traling whitespace from empty lines
|
# remove traling whitespace from empty lines
|
||||||
#
|
#
|
||||||
_pre_strip () {
|
_pre_strip () {
|
||||||
|
@ -396,7 +409,8 @@ _squash () {
|
||||||
# convert the markdown from stdin into html
|
# convert the markdown from stdin into html
|
||||||
#
|
#
|
||||||
md2html () {
|
md2html () {
|
||||||
_pre_strip \
|
_remove_shebang \
|
||||||
|
| _pre_strip \
|
||||||
| _code \
|
| _code \
|
||||||
| _pre_emph \
|
| _pre_emph \
|
||||||
| _blockquote \
|
| _blockquote \
|
||||||
|
@ -414,8 +428,7 @@ md2html () {
|
||||||
| _h 3 \
|
| _h 3 \
|
||||||
| _h 2 \
|
| _h 2 \
|
||||||
| _h 1 \
|
| _h 1 \
|
||||||
| _squash \
|
| _squash
|
||||||
| _html
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -z "$*" ] \
|
[ -z "$*" ] \
|
||||||
|
|
23
src/shblg
23
src/shblg
|
@ -1,23 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
INPUT_DIR=blog
|
|
||||||
OUTPUT_DIR=dist
|
|
||||||
PAGE_TEMPLATE=blog/template.html
|
|
||||||
|
|
||||||
while getopts ":o:i:t:" opt; do
|
|
||||||
case "$opt" in
|
|
||||||
o)
|
|
||||||
OUTPUT_DIR=$(realpath $OPTARG)
|
|
||||||
;;
|
|
||||||
i)
|
|
||||||
INPUT_DIR=$(realpath $OPTARG)
|
|
||||||
;;
|
|
||||||
t)
|
|
||||||
PAGE_TEMPLATE=$(realpath $OPTARG)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
for f in ${INPUT_DIR}/*.md; do
|
|
||||||
md2html "$f" > ${OUTPUT_DIR}/$f
|
|
||||||
done
|
|
48
src/shblg.sh
Executable file
48
src/shblg.sh
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
INPUT_DIR=blog
|
||||||
|
OUTPUT_DIR=dist
|
||||||
|
PAGE_TEMPLATE=blog/template.html
|
||||||
|
|
||||||
|
while getopts ":o:i:t:" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
o)
|
||||||
|
OUTPUT_DIR=$OPTARG/
|
||||||
|
mkdir -p $OUTPUT_DIR
|
||||||
|
OUTPUT_DIR=$(realpath $OUTPUT_DIR)
|
||||||
|
;;
|
||||||
|
i)
|
||||||
|
INPUT_DIR=$(realpath $OPTARG)
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
PAGE_TEMPLATE=$(realpath $OPTARG)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# process a file to
|
||||||
|
process () {
|
||||||
|
path="${1#$INPUT_DIR}"
|
||||||
|
dirpath="${1%${1##*/}}"
|
||||||
|
out_file="${OUTPUT_DIR}${path}"
|
||||||
|
|
||||||
|
[ -d "$1" ] && {
|
||||||
|
mkdir -p "$out_file"
|
||||||
|
for f in "$1"/*; do
|
||||||
|
process "$f"
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
} || [ -x "$1" ] && {
|
||||||
|
# execute the file
|
||||||
|
cd $dirpath
|
||||||
|
"$1" > "${out_file%.*}.html"
|
||||||
|
cd -
|
||||||
|
return 0
|
||||||
|
} || {
|
||||||
|
# just output the file as is
|
||||||
|
while IFS= read -r line; do printf "%s\n" "$line"; done < "$1" > "$out_file"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
process "$INPUT_DIR"
|
Loading…
Reference in a new issue