Header links
This commit is contained in:
@@ -8,18 +8,21 @@ function strip_markdown(s) {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
function print_header(line) {
|
function print_header(line) {
|
||||||
if (line ~ /^# /) {
|
tag = ""
|
||||||
sub(/^# /, "", line); print "<h1 id=\"" strip_markdown(line) "\">" line "</h1>"
|
if (line ~ /^# /) { tag = "h1"; sub(/^# /, "", line) }
|
||||||
} else if (line ~ /^## /) {
|
else if (line ~ /^## /) { tag = "h2"; sub(/^## /, "", line) }
|
||||||
sub(/^## /, "", line); print "<h2 id=\"" strip_markdown(line) "\">" line "</h2>"
|
else if (line ~ /^### /) { tag = "h3"; sub(/^### /, "", line) }
|
||||||
} else if (line ~ /^### /) {
|
else if (line ~ /^#### /) { tag = "h4"; sub(/^#### /, "", line) }
|
||||||
sub(/^### /, "", line); print "<h3 id=\"" strip_markdown(line) "\">" line "</h3>"
|
else if (line ~ /^##### /) { tag = "h5"; sub(/^##### /, "", line) }
|
||||||
} else if (line ~ /^#### /) {
|
else if (line ~ /^###### /) { tag = "h6"; sub(/^###### /, "", line) }
|
||||||
sub(/^#### /, "", line); print "<h4 id=\"" strip_markdown(line) "\">" line "</h4>"
|
|
||||||
} else if (line ~ /^##### /) {
|
if (tag != "") {
|
||||||
sub(/^##### /, "", line); print "<h5 id=\"" strip_markdown(line) "\">" line "</h5>"
|
id = strip_markdown(line)
|
||||||
} else if (line ~ /^###### /) {
|
if (enable_header_links == "true") {
|
||||||
sub(/^###### /, "", line); print "<h6 id=\"" strip_markdown(line) "\">" line "</h6>"
|
print "<" tag " id=\"" id "\"><a href=\"#" id "\" class=\"header-anchor\">" line "</a></" tag ">"
|
||||||
|
} else {
|
||||||
|
print "<" tag " id=\"" id "\">" line "</" tag ">"
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
print line
|
print line
|
||||||
}
|
}
|
||||||
|
|||||||
35
kewt.sh
35
kewt.sh
@@ -49,6 +49,7 @@ favicon = ""
|
|||||||
generate_page_title = true
|
generate_page_title = true
|
||||||
error_page = "not_found.html"
|
error_page = "not_found.html"
|
||||||
versioning = false
|
versioning = false
|
||||||
|
enable_header_links = true
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -282,6 +283,7 @@ favicon=""
|
|||||||
generate_page_title="true"
|
generate_page_title="true"
|
||||||
error_page="not_found.html"
|
error_page="not_found.html"
|
||||||
versioning="false"
|
versioning="false"
|
||||||
|
enable_header_links="true"
|
||||||
|
|
||||||
load_config() {
|
load_config() {
|
||||||
[ -f "$1" ] || return
|
[ -f "$1" ] || return
|
||||||
@@ -322,6 +324,7 @@ load_config() {
|
|||||||
generate_page_title) generate_page_title="$val" ;;
|
generate_page_title) generate_page_title="$val" ;;
|
||||||
error_page) error_page="$val" ;;
|
error_page) error_page="$val" ;;
|
||||||
versioning) versioning="$val" ;;
|
versioning) versioning="$val" ;;
|
||||||
|
enable_header_links) enable_header_links="$val" ;;
|
||||||
esac
|
esac
|
||||||
done < "$1"
|
done < "$1"
|
||||||
}
|
}
|
||||||
@@ -435,6 +438,7 @@ copy_style_with_resolved_vars() {
|
|||||||
|
|
||||||
render_markdown() {
|
render_markdown() {
|
||||||
file="$1"
|
file="$1"
|
||||||
|
is_home="$2"
|
||||||
local_template=$(find_closest "template.html" "$(dirname "$file")")
|
local_template=$(find_closest "template.html" "$(dirname "$file")")
|
||||||
[ -z "$local_template" ] && local_template="$template"
|
[ -z "$local_template" ] && local_template="$template"
|
||||||
|
|
||||||
@@ -485,20 +489,24 @@ render_markdown() {
|
|||||||
|
|
||||||
page_title="$title"
|
page_title="$title"
|
||||||
if [ "$generate_page_title" = "true" ] && [ -n "$file" ] && [ -f "$file" ]; then
|
if [ "$generate_page_title" = "true" ] && [ -n "$file" ] && [ -f "$file" ]; then
|
||||||
first_heading=$(grep -m 1 '^# ' "$file" | sed 's/^# *//; s/ *$//')
|
if [ "$is_home" = "true" ] && [ -n "$home_name" ]; then
|
||||||
if [ -n "$first_heading" ]; then
|
page_title="$home_name - $title"
|
||||||
first_heading=$(echo "$first_heading" | sed -e 's/\[//g' -e 's/\]//g' -e 's/!//g' -e 's/\*//g' -e 's/_//g' -e 's/`//g' -e 's/([^)]*)//g' | sed 's/\\//g')
|
|
||||||
page_title="$first_heading - $title"
|
|
||||||
else
|
else
|
||||||
basename_no_ext=$(basename "$file" .md)
|
first_heading=$(grep -m 1 '^# ' "$file" | sed 's/^# *//; s/ *$//')
|
||||||
if [ "$basename_no_ext" != "index" ] && [ "$basename_no_ext" != "404_gen" ]; then
|
if [ -n "$first_heading" ]; then
|
||||||
cap_basename=$(echo "$basename_no_ext" | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
|
first_heading=$(echo "$first_heading" | sed -e 's/\[//g' -e 's/\]//g' -e 's/!//g' -e 's/\*//g' -e 's/_//g' -e 's/`//g' -e 's/([^)]*)//g' | sed 's/\\//g')
|
||||||
page_title="$cap_basename - $title"
|
page_title="$first_heading - $title"
|
||||||
|
else
|
||||||
|
basename_no_ext=$(basename "$file" .md)
|
||||||
|
if [ "$basename_no_ext" != "index" ] && [ "$basename_no_ext" != "404_gen" ]; then
|
||||||
|
cap_basename=$(echo "$basename_no_ext" | awk '{print toupper(substr($0,1,1)) substr($0,2)}')
|
||||||
|
page_title="$cap_basename - $title"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MARKDOWN_SITE_ROOT="$src" MARKDOWN_FALLBACK_FILE="$script_dir/styles/$style.css" sh "$script_dir/markdown.sh" "$file" | awk -v title="$page_title" -v nav="$nav" -v footer="$footer" -v style_path="${style_path}${asset_version}" -v header_brand="$header_brand" -v head_extra="$head_extra" -f "$awk_dir/render_template.awk" "$local_template"
|
ENABLE_HEADER_LINKS="$enable_header_links" MARKDOWN_SITE_ROOT="$src" MARKDOWN_FALLBACK_FILE="$script_dir/styles/$style.css" sh "$script_dir/markdown.sh" "$file" | awk -v title="$page_title" -v nav="$nav" -v footer="$footer" -v style_path="${style_path}${asset_version}" -v header_brand="$header_brand" -v head_extra="$head_extra" -f "$awk_dir/render_template.awk" "$local_template"
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Building site from '$src' to '$out'..."
|
echo "Building site from '$src' to '$out'..."
|
||||||
@@ -523,7 +531,8 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type d -print" | sort | while
|
|||||||
md_count=$(find "$dir" ! -name "$(basename "$dir")" -prune -name "*.md" | wc -l)
|
md_count=$(find "$dir" ! -name "$(basename "$dir")" -prune -name "*.md" | wc -l)
|
||||||
if [ "$md_count" -eq 1 ]; then
|
if [ "$md_count" -eq 1 ]; then
|
||||||
md_file=$(find "$dir" ! -name "$(basename "$dir")" -prune -name "*.md")
|
md_file=$(find "$dir" ! -name "$(basename "$dir")" -prune -name "*.md")
|
||||||
render_markdown "$md_file" > "$out_dir/index.html"
|
is_home="false"; [ "$dir" = "$src" ] && is_home="true"
|
||||||
|
render_markdown "$md_file" "$is_home" > "$out_dir/index.html"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -546,7 +555,8 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type d -print" | sort | while
|
|||||||
echo "- [$name]($name)" >> "$temp_index"
|
echo "- [$name]($name)" >> "$temp_index"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
render_markdown "$temp_index" > "$out_dir/index.html"
|
is_home="false"; [ "$dir" = "$src" ] && is_home="true"
|
||||||
|
render_markdown "$temp_index" "$is_home" > "$out_dir/index.html"
|
||||||
rm "$temp_index"
|
rm "$temp_index"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -576,8 +586,9 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type f -print" | sort | while
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${file%.md}" != "$file" ] && [ "$is_preserved" -eq 0 ]; then
|
if [ "${file%.md}" != "$file" ] && [ "$is_preserved" -eq 0 ]; then
|
||||||
|
is_home="false"; [ "$file" = "$src/index.md" ] && is_home="true"
|
||||||
out_file="$out/${rel_path%.md}.html"
|
out_file="$out/${rel_path%.md}.html"
|
||||||
render_markdown "$file" > "$out_file"
|
render_markdown "$file" "$is_home" > "$out_file"
|
||||||
else
|
else
|
||||||
cp "$file" "$out/$rel_path"
|
cp "$file" "$out/$rel_path"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ awk -f "$awk_dir/blockquote_to_admonition.awk" "$temp_file" > "$temp_file.tmp" &
|
|||||||
awk -f "$awk_dir/fenced_code.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
awk -f "$awk_dir/fenced_code.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
||||||
awk -f "$awk_dir/indented_code.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
awk -f "$awk_dir/indented_code.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
||||||
awk -f "$awk_dir/pipe_tables.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
awk -f "$awk_dir/pipe_tables.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
||||||
awk -f "$awk_dir/headers.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
awk -v enable_header_links="$ENABLE_HEADER_LINKS" -f "$awk_dir/headers.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
||||||
awk -f "$awk_dir/lists.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
awk -f "$awk_dir/lists.awk" "$temp_file" > "$temp_file.tmp" && mv "$temp_file.tmp" "$temp_file"
|
||||||
|
|
||||||
# Spacing
|
# Spacing
|
||||||
|
|||||||
16
site.conf
16
site.conf
@@ -1,16 +0,0 @@
|
|||||||
title = "kewt"
|
|
||||||
style = "kewt"
|
|
||||||
dir_indexes = true
|
|
||||||
single_file_index = true
|
|
||||||
flatten = false
|
|
||||||
footer = "made with <a href="https://kewt.krzak.org">kewt</a>"
|
|
||||||
logo = ""
|
|
||||||
display_logo = false
|
|
||||||
display_title = true
|
|
||||||
logo_as_favicon = true
|
|
||||||
favicon = ""
|
|
||||||
order = ""
|
|
||||||
home_name = "Home"
|
|
||||||
show_home_in_nav = true
|
|
||||||
nav_links = ""
|
|
||||||
nav_extra = ""
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<title>{{TITLE}}</title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{CSS}}" type="text/css" />
|
|
||||||
{{HEAD_EXTRA}}
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<h1>{{HEADER_BRAND}}</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<nav id="side-bar">{{NAV}}</nav>
|
|
||||||
|
|
||||||
<article>{{CONTENT}}</article>
|
|
||||||
<footer>{{FOOTER}}</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user