1024 lines
25 KiB
Bash
1024 lines
25 KiB
Bash
#!/bin/bash
|
||
# Name: Statique Littérateur
|
||
# Type: Article makers
|
||
# file: wip__article
|
||
# Folder: /var/lib/stl/scripts/
|
||
# By echolib (XMPP: im@echolib.re)
|
||
# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
|
||
|
||
#------------
|
||
# funny stats
|
||
#------------
|
||
# lines: 1023
|
||
# functions: 19
|
||
#-----------------------------------------------------------------------
|
||
|
||
#**********************************************************************
|
||
|
||
#======================================================================
|
||
# Argument make
|
||
# $1: mak
|
||
# $2: arguments
|
||
#======================================================================
|
||
wip__OPTIONS() {
|
||
! [[ "$2" ]] \
|
||
&& noarg "Cannot be empty"
|
||
|
||
case "$2" in
|
||
sidebar)
|
||
if ! [[ "$3" ]];then
|
||
domain__get
|
||
sidebar__create_HTML
|
||
return
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
while test "$2"
|
||
do
|
||
case "$2" in
|
||
-F) wip_force=true ;;
|
||
*".stl") article__hash "$2" ;;
|
||
"sidebar="*) sidebar="$2";position=${sidebar/sidebar=} ;;
|
||
*) noarg "$2" "Use: -F, (ARTICLE), sidebar" ;;
|
||
esac
|
||
shift
|
||
done
|
||
|
||
# Before convert, check if article has db, not changed, errors
|
||
if__article_db "$article_db"
|
||
if [[ $need_check ]];then
|
||
echo "! Article has changed. you must check it first"
|
||
exit
|
||
|
||
# Article has error
|
||
elif [[ $check_force ]];then
|
||
echo "! Article is not valid. Check for errors first"
|
||
exit
|
||
fi
|
||
|
||
# check wip hash and wip file exists
|
||
do_wip=true
|
||
this_article="$domain_dir_wip$article_uri_srv"
|
||
|
||
if ! [[ $article_wip_hash ]];then
|
||
log__add -i -M -A \
|
||
"Create new HTML convertion"
|
||
|
||
else
|
||
if ! [[ -f "$domain_dir_wip$article_uri_srv" ]];then
|
||
log__add -w -M -A \
|
||
"Was manually deleted ! Convert again"
|
||
|
||
else
|
||
if [[ $article_wip_hash == $article_chk_hash ]];then
|
||
if [[ $wip_force ]];then
|
||
log__add -w -M -A \
|
||
"Already Exists and up. Force connvert again"
|
||
|
||
else
|
||
log__add -w -M -A \
|
||
"Already Exists and up. Use -F to connvert again"
|
||
unset do_wip
|
||
fi
|
||
|
||
else
|
||
log__add -i -M -A \
|
||
"Already Exists but old. New connversion"
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
# Convert to HTML if asked or needed
|
||
if [[ $do_wip ]];then
|
||
split_article "$uri_article" # Split metas & content
|
||
makers "$article_tmp_post"
|
||
fi
|
||
|
||
# Option sidebar from command line with wip
|
||
if [[ $sidebar ]];then
|
||
sidebar__OPTIONS sidebar add $position "$this_article"
|
||
fi
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Modules to convert article to HTML
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
makers() {
|
||
|
||
# First, if inlince code: convert it to base64
|
||
make__icode_b64 code "$1"
|
||
|
||
# Quotes
|
||
make__quotes "$1"
|
||
|
||
# Titles
|
||
make__titles "$1"
|
||
make__lists "$1"
|
||
|
||
get__content_metas "^abbr: " "$article_tmp_head" make "$1"
|
||
get__content_metas "^file: " "$article_tmp_head" make "$1"
|
||
get__content_metas "^link: " "$article_tmp_head" make "$1"
|
||
get__content_metas "^image: " "$article_tmp_head" make "$1"
|
||
get__content_metas "^code: " "$article_tmp_head" make "$1"
|
||
|
||
# Bold, strong, emphasis...
|
||
make__strongs "$1"
|
||
make__bolds "$1"
|
||
make__emphasis "$1"
|
||
make__cross "$1"
|
||
make__del "$1"
|
||
make__br "$1"
|
||
|
||
# Paragraphs
|
||
make__paragraphs "$1"
|
||
|
||
# Last, decode icode from base64
|
||
make__icode_b64 decode "$1"
|
||
|
||
# At the very last converter
|
||
get__content_metas "^brut: " "$article_tmp_head" make "$1"
|
||
|
||
# a11y (tabulation)
|
||
spc=' ' # 8 spaces. Main content (2*4)
|
||
sed -i -e "s|^|$spc|" "$article_tmp_post"
|
||
|
||
#cat "$1"
|
||
create__HTML_translation
|
||
create__HTML_page
|
||
|
||
# Write wip hash to DB
|
||
db__srv_status_hash WIP set
|
||
|
||
# Remove tmp files
|
||
rm -f "$article_tmp_post"
|
||
rm -f "$article_tmp_head"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# code, decode to,from base64 icode content. Ensure keep brut text
|
||
# for decode: convert also to HTML
|
||
# $2: $article_tmp_post
|
||
#======================================================================
|
||
make__icode_b64() {
|
||
case "$1" in
|
||
code)
|
||
while IFS=: read -r 'ln' 'content'
|
||
do
|
||
|
||
while read -r 'bcode'
|
||
do
|
||
b64_bcode=`echo "$bcode" | base64`
|
||
sed -i "${ln}s^$bcode^$b64_bcode^" "$2"
|
||
done < <(grep -o -P '(?<=_`).*?(?=`_)' <<<"$content")
|
||
|
||
done < <(grep -n '`' "$2")
|
||
;;
|
||
|
||
decode)
|
||
while read -r 'bcode'
|
||
do
|
||
b64_bcode=`echo "$bcode" | base64 --decode`
|
||
sed -i "s^$bcode^$b64_bcode^" "$2"
|
||
done < <(grep -o -P '(?<=_`).*?(?=`_)' "$2")
|
||
|
||
HTML_icode="<code class=\"${domain_css}_icode\">"
|
||
sed -i "s^_\`^$HTML_icode^g" "$2"
|
||
sed -i 's^`_^</code>^g' "$2"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Covnert words in content from abbr in meta
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__abbrs() {
|
||
[[ $meta ]] || return
|
||
|
||
[[ "$header_f3" ]] \
|
||
&& abbr_use="$header_f3" \
|
||
|| abbr_use="$header_f1"
|
||
|
||
HTML_abbr=`
|
||
printf '%s %s%s%s' \
|
||
"<abbr class=\"${domain_css}_abbr\"" \
|
||
"title=\"$header_f2\">" \
|
||
"$abbr_use" \
|
||
"</abbr>"`
|
||
|
||
sed -i "s^$header_f1^$HTML_abbr^g" "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert IMAGES
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__images() {
|
||
[[ $meta ]] || return
|
||
|
||
unset ${!image_@}
|
||
|
||
case "$header_f2" in
|
||
"@"*)
|
||
header_f2=${header_f2/@/}
|
||
uri_file="${sub_genuri_srv}images/$header_f2"
|
||
;;
|
||
|
||
*)
|
||
uri_file="$header_f2"
|
||
;;
|
||
esac
|
||
|
||
while read -r 'image_article'
|
||
do
|
||
image_css="center" # Default class
|
||
mark_image=${image_article#*:} # image mark to replace in article
|
||
read -r -a image_field <<<"$image_article" # fields in array
|
||
ln=`echo "${image_field[0]}" | awk -F: '{print $1}'` # Line number
|
||
|
||
for i in `seq 1 ${#image_field[@]}`
|
||
do
|
||
case "${image_field[$i]}" in
|
||
"c="*)
|
||
image_class=${image_field[$i]/c=/}
|
||
case "$image_class" in
|
||
l|g|L|G) image_css="left" ;;
|
||
r|d|R|D) image_css="right" ;;
|
||
c|C) image_css="center" ;;
|
||
*) image_css="$image_class" ;;
|
||
esac
|
||
;;
|
||
|
||
"t="*)
|
||
image_target=${image_field[$i]/t=/}
|
||
case "$image_target" in
|
||
http*|ftp*)
|
||
image_html_link_start="<a href=\"$image_target\">"
|
||
image_html_link_close="</a>"
|
||
;;
|
||
|
||
"+")
|
||
image_html_link_start="<a href=\"$uri_file\">"
|
||
image_html_link_close="</a>"
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
"w="*)
|
||
image_width=${image_field[$i]/w=/}
|
||
width=`
|
||
grep -Eo '[[:alpha:]]+|[0-9]+' \
|
||
<<<"$image_width" \
|
||
| head -n 1`
|
||
|
||
if (( $width != 0 ));then
|
||
width_u=${image_width/$width}
|
||
! [[ $width_u ]] && width_u="px"
|
||
image_html_w="width:$width$width_u"
|
||
fi
|
||
;;
|
||
|
||
"h="*)
|
||
image_height=${image_field[$i]/h=/}
|
||
height=`
|
||
grep -Eo '[[:alpha:]]+|[0-9]+' \
|
||
<<<"$image_height" \
|
||
| head -n 1`
|
||
|
||
if (( $height != 0 ));then
|
||
height_u=${image_height/$height}
|
||
! [[ $height_u ]] && height_u="px"
|
||
image_html_h="height:$height$height_u"
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# Define Style
|
||
if [[ $width && $height ]];then
|
||
image_style=" style=\"$image_html_w;$image_html_h\""
|
||
|
||
elif [[ $width ]];then
|
||
image_style=" style=\"$image_html_w\""
|
||
|
||
elif [[ $height ]];then
|
||
image_style=" style=\"$image_html_h\""
|
||
fi
|
||
|
||
image_HTML=`
|
||
printf '%s%s%s%s%s%s\n' \
|
||
"$image_html_link_start" \
|
||
"<img class=\"${domain_css}_image $image_css\" " \
|
||
"src=\"$uri_file\" " \
|
||
"alt=\"$header_f3\" title=\"$header_f3\"" \
|
||
"$image_style />" \
|
||
"$image_html_link_close"`
|
||
|
||
sed -i "${ln}s^$mark_image^$image_HTML^" "$1"
|
||
|
||
done < <(grep -n "_image:$header_f1" "$1")
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert links (with file)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__links_file() {
|
||
[[ $meta ]] || return
|
||
|
||
case "$header_f2" in
|
||
"@"*)
|
||
header_f2=${header_f2/@/}
|
||
uri_file="${sub_genuri_srv}files/$header_f2";;
|
||
|
||
*)
|
||
uri_file="$header_f2"
|
||
;;
|
||
esac
|
||
|
||
flink_name="__$header_f1"
|
||
[[ "$header_f3" ]] \
|
||
&& flink_title=" title=\"$header_f3\""
|
||
|
||
HTML_flink=`
|
||
printf '%s %s%s%s' \
|
||
"<a class=\"${domain_css}_link-file\"" \
|
||
"href=\"$uri_file\"$flink_title>" \
|
||
"$header_f1" \
|
||
"</a>"`
|
||
|
||
|
||
HTML_flink_target=`
|
||
printf '%s %s%s%s' \
|
||
"<a class=\"${domain_css}_link-file\"" \
|
||
"href=\"$uri_file\"$flink_title target=\"_blank\">" \
|
||
"$header_f1" \
|
||
"</a>"`
|
||
|
||
sed -i "s^${flink_name}+^$HTML_flink_target^g" "$1"
|
||
sed -i "s^$flink_name^$HTML_flink^g" "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Covnert links (not links with file)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__links() {
|
||
[[ $meta ]] || return
|
||
|
||
link_name="_$header_f1"
|
||
[[ "$header_f3" ]] \
|
||
&& link_title=" title=\"$header_f3\""
|
||
|
||
HTML_link=`
|
||
printf '%s %s%s%s' \
|
||
"<a class=\"${domain_css}_link\"" \
|
||
"href=\"$header_f2\"$link_title>" \
|
||
"$header_f1" \
|
||
"</a>"`
|
||
|
||
HTML_link_target=`
|
||
printf '%s %s%s%s' \
|
||
"<a class=\"${domain_css}_link\"" \
|
||
"href=\"$header_f2\"$link_title target=\"_blank\">" \
|
||
"$header_f1" \
|
||
"</a>"`
|
||
|
||
sed -i "s^${link_name}+^$HTML_link_target^g" "$1"
|
||
sed -i "s^${link_name}^$HTML_link^g" "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert strong word(s)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__strongs() {
|
||
HTML_strong="<strong class=\"${domain_css}_strong\">"
|
||
|
||
sed -i "s^\*_^$HTML_strong^g" "$1"
|
||
sed -i 's^_\*^</strong>^g' "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert bold word(s)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__bolds() {
|
||
HTML_bold="<b class=\"${domain_css}_bold\">"
|
||
|
||
sed -i "s^+_^$HTML_bold^g" "$1"
|
||
sed -i 's^_+^</b>^g' "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert emphasis word(s)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__emphasis() {
|
||
HTML_em="<i class=\"${domain_css}_em\">"
|
||
|
||
sed -i "s^\\\_^$HTML_em^g" "$1"
|
||
sed -i 's^_\\^</i>^g' "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert cross word(s)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__cross() {
|
||
HTML_cross="<span class=\"${domain_css}_cross\">"
|
||
|
||
sed -i "s^×_^$HTML_cross^g" "$1"
|
||
sed -i 's^_×^</spa>^g' "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Convert del word(s)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__del() {
|
||
HTML_del="<del class=\"${domain_css}_del\">"
|
||
|
||
sed -i "s^~_^$HTML_del^g" "$1"
|
||
sed -i 's^_~^</del>^g' "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Create paragraphs (classic and custom)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__paragraphs() {
|
||
[[ `grep "^)$" "$1"` ]] \
|
||
&& sed -i "s,^)$,</p>,g" "$1" \
|
||
|| return
|
||
|
||
while read -r "lnpm" "class"
|
||
do
|
||
ln=`awk -F: '{print $1}' <<<$lnpm`
|
||
pm=`awk -F: '{print $2}' <<<$lnpm`
|
||
|
||
if [[ $class ]];then
|
||
HTML_p="<p class=\"${domain_css}_p $class\">"
|
||
sed -i "${ln}s^$pm $class^$HTML_p^" "$1"
|
||
|
||
else
|
||
HTML_p="<p class=\"${domain_css}_p\">"
|
||
sed -i "${ln}s^$pm^$HTML_p^" "$1"
|
||
fi
|
||
done < <(grep -n '^($\|^( ' "$1")
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Create <br /> (with | at begining line
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__br() {
|
||
sed -i 's,^|$,<br />,g' "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Create tmp file to copy article content
|
||
# Create HTML TITLES and add divs if content after
|
||
# Get rid of comments
|
||
# Copy tmp file to new article_tmp_post
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__titles() {
|
||
article_tmp_content=`mktemp` # Create tmp file to copy content
|
||
while read -r 'line'
|
||
do
|
||
if [[ $new_title ]];then
|
||
case "$line" in
|
||
''|"#"[1-6]*) ;; # If no content or title after title, do nothing
|
||
|
||
*)
|
||
printf '%s%s\n' \
|
||
"<div class=\"${domain_css}_content " \
|
||
"${domain_css}_content-h$tn\">" \
|
||
>> "$article_tmp_content"
|
||
unset new_title
|
||
div_open=true
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
case "$line" in
|
||
"#"[1-6]*)
|
||
if [[ $div_open ]];then
|
||
printf '%s\n\n' \
|
||
"</div>" \
|
||
>> "$article_tmp_content"
|
||
unset div_open
|
||
fi
|
||
|
||
tn=${line:1:1}
|
||
printf '%s%s%s%s\n' \
|
||
"<h$tn " \
|
||
"class=\"${domain_css}_title ${domain_css}_title-$tn\">" \
|
||
"${line:3}" \
|
||
"</h$tn>" \
|
||
>> "$article_tmp_content"
|
||
new_title=true
|
||
;;
|
||
|
||
"# "*) continue ;; # Get rid of comments
|
||
'') continue ;;
|
||
*) printf '%s\n' "$line" >> "$article_tmp_content" ;;
|
||
esac
|
||
done < <(cat "$1")
|
||
|
||
# Close last div
|
||
[[ $div_open ]] \
|
||
&& printf '%s\n' \
|
||
"</div>" \
|
||
>> "$article_tmp_content"
|
||
|
||
# Copy tmp file to legacy article file
|
||
cat "$article_tmp_content" > "$1"
|
||
|
||
# Remove tmp content created for titles and divs
|
||
rm -f "$article_tmp_content"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# make conteent Quotes
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__quotes() {
|
||
[[ `grep '^---' "$1"` ]] \
|
||
&& article_tmp_content=`mktemp` \
|
||
|| return
|
||
|
||
# After getting datas from loop below, print in tmp file content
|
||
# --------------------------------------------------------------
|
||
make__quote_print() {
|
||
if [[ $quote_fig ]];then
|
||
|
||
if [[ $quote_book && $quote_year ]];then
|
||
quote_title=" title=\"$quote_book $quote_year\""
|
||
quote_datas=" $quote_book $quote_year"
|
||
|
||
elif [[ $quote_book ]];then
|
||
quote_title=" titlee=\"$quote_book\""
|
||
quote_datas=" $quote_book"
|
||
|
||
elif [[ $quote_year ]];then
|
||
quote_datas=" $quote_year"
|
||
fi
|
||
|
||
cat <<EOQ >> "$article_tmp_content"
|
||
<figure class="$quote_css">
|
||
<blockquote$quote_lang$quote_html_cite>
|
||
$(printf '%s\n' "${quote_line[@]}")
|
||
</blockquote>
|
||
<figcaption>
|
||
<cite>
|
||
<a href="$quote_link"$quote_title>$quote_author</a>$quote_datas
|
||
</cite>
|
||
</figcaption>
|
||
</figure>
|
||
EOQ
|
||
|
||
else
|
||
cat <<EOQ >> "$article_tmp_content"
|
||
<blockquote class="$quote_css"$quote_lang$quote_html_cite>
|
||
$(printf '%s\n' "${quote_line[@]}")
|
||
</blockquote>
|
||
EOQ
|
||
fi
|
||
}
|
||
|
||
|
||
while read -r 'line'
|
||
do
|
||
case "$line" in
|
||
'---'*)
|
||
if [[ $quote_start ]];then
|
||
quote_close=true
|
||
make__quote_print
|
||
unset ${!quote_@}
|
||
|
||
else
|
||
quote_start=true
|
||
unset quote_close
|
||
|
||
quote_css=`awk '{print $2}' <<<"$line"`
|
||
! [[ $quote_css ]] \
|
||
&& quote_css="${domain_css}_quote" \
|
||
|| quote_css="${domain_css}_quote $quote_css"
|
||
fi
|
||
;;
|
||
|
||
*)
|
||
if [[ $quote_start ]];then
|
||
case "$line" in
|
||
"_cite"*)
|
||
quote_fig=true
|
||
quote_author=`awk -F" : " '{print $2}' <<<"$line"`
|
||
;;
|
||
|
||
"_link"*)
|
||
quote_link=`awk -F" : " '{print $2}' <<<"$line"`
|
||
quote_html_cite=" cite=\"$quote_link\""
|
||
;;
|
||
|
||
"_lang"*)
|
||
quote_lang=`awk -F" : " '{print $2}' <<<"$line"`
|
||
quote_lang=" lang=\"$quote_lang\""
|
||
;;
|
||
|
||
"_book"*)
|
||
quote_book=`awk -F" : " '{print $2}' <<<"$line"`
|
||
;;
|
||
|
||
"_year"*)
|
||
quote_year=`awk -F" : " '{print $2}' <<<"$line"`
|
||
quote_year="($quote_year)"
|
||
;;
|
||
|
||
*)
|
||
((ln++))
|
||
quote_line[ln]="$line"
|
||
;;
|
||
esac
|
||
|
||
else
|
||
printf '%s\n' "$line" >> "$article_tmp_content"
|
||
fi
|
||
;;
|
||
esac
|
||
done < <(cat "$1")
|
||
|
||
# Copy tmp file new content to legacy article file
|
||
cat "$article_tmp_content" > "$1"
|
||
|
||
# Remove tmp content created for quotes
|
||
rm -f "$article_tmp_content"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# Lists (independant module)
|
||
# repeat for each ^>> found
|
||
# Put bloc list in a file: gsl_tmp_list_brut
|
||
# Convert list to HTML in a new file: gsl_tmp_list_HTML
|
||
# Replace gsl bloc with new file
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__lists() {
|
||
# Check for last bloc Item list
|
||
[[ `grep '^>>' "$1"` ]] || return
|
||
|
||
unset mark list mn sign muo_class my_class
|
||
|
||
# Define start and close line number
|
||
list_ln_start=`grep -n "^<<" "$1" | head -n 1 | awk -F: '{print $1}'`
|
||
list_ln_close=`grep -n "^>>" "$1" | head -n 1 | awk -F: '{print $1}'`
|
||
|
||
#----------------------------------------------------------------------
|
||
# Put gsl block list in tmp file
|
||
#----------------------------------------------------------------------
|
||
gsl_tmp_list_brut=`mktemp`
|
||
awk -v lns="$list_ln_start" -v lnc="$list_ln_close" \
|
||
'NR >= lns && NR <= lnc {print}' \
|
||
"$1" \
|
||
> "$gsl_tmp_list_brut"
|
||
|
||
# File to print HTML List
|
||
gsl_tmp_list_HTML=`mktemp`
|
||
|
||
# Define CSS class
|
||
li_class="${domain_css}_li ${domain_css}_li-"
|
||
uo_class="${domain_css}_list ${domain_css}_list-"
|
||
|
||
# Custom class for bloc only
|
||
my_class=`awk 'NR == 1 {print $2}' "$gsl_tmp_list_brut"`
|
||
[[ $my_class ]] \
|
||
&& muo_class=" $my_class $my_class-"
|
||
|
||
#----------------------------------------------------------------------
|
||
# Define list in arrays
|
||
#----------------------------------------------------------------------
|
||
i=0;l=0
|
||
while read -r "ln" "mark" "content"
|
||
do
|
||
((i++))
|
||
mark[$i]="${mark}"
|
||
sign[$i]="${mark:0:1}"
|
||
line[$i]="$ln"
|
||
mn[$i]="${#mark}"
|
||
case "$mark" in
|
||
"="*) list[$i]="ul" ;;
|
||
"+"*) list[$i]="ol" ;;
|
||
esac
|
||
done < <(awk '($1 ~ "=" || $1 ~ "+" || $1 ~ ">>") \
|
||
{print NR,$0}' \
|
||
"$gsl_tmp_list_brut")
|
||
|
||
|
||
# Generic prints li
|
||
# -----------------
|
||
make__list_li() {
|
||
printf "%$((sp + 2))s%s\n" "" \
|
||
"<li class=\"$li_class${mn[$n]}\">${content[$n]}</li>" \
|
||
| awk -v sp="$((sp+2))" \
|
||
'NR == 1 {print $0};NR > 1 {printf "%" sp "s%s\n", "", $0}' \
|
||
>> "$gsl_tmp_list_HTML"
|
||
}
|
||
|
||
# Generic print ul | ol (open current)
|
||
# ------------------------------------
|
||
make__list_open_n() {
|
||
l=$(( l + 1 ))
|
||
printf "%${sp}s%s\n" "" \
|
||
"<${list[n]}>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
}
|
||
|
||
|
||
#----------------------------------------------------------------------
|
||
# Define content items and make HTML list
|
||
#----------------------------------------------------------------------
|
||
for n in `seq 1 $i`
|
||
do
|
||
# Define content items for each list
|
||
content[$n]=`
|
||
awk -v cts="${line[$n]}" -v ctc="${line[$((n+1))]}" \
|
||
'NR >= cts && NR < ctc {print $0}' \
|
||
"$gsl_tmp_list_brut" \
|
||
| awk '{ sub(/^[ \t]+/, ""); print }'`
|
||
|
||
content[$n]=${content[$n]/${mark[$n]}/}
|
||
content[$n]=`awk '{sub(/^[ \t]+/, ""); print}' <<<"${content[$n]}"`
|
||
|
||
# Define HTML ul | ol from previous item list
|
||
# ----------------------------------------
|
||
# Define a11y tabulation for each item
|
||
sp=$(( ${mn[$n]} * 2 - 2 ))
|
||
|
||
# ----------
|
||
# First Item
|
||
# ----------
|
||
if (( $n == 1 ));then
|
||
uo_class+="${list[n]}"
|
||
[[ $my_class ]] \
|
||
&& muo_class+="${list[n]}"
|
||
|
||
l=$(( l + 1 ))
|
||
printf "%${sp}s%s\n" "" \
|
||
"<${list[n]} class=\"$uo_class$muo_class\">" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
printf "%$((sp + 2))s%s\n" "" \
|
||
"<li class=\"${li_class}1\">${content[$n]}</li>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
|
||
# ---------
|
||
# Last Item
|
||
# ---------
|
||
elif (( $n == $i ));then
|
||
sp=$(( ${mn[$(( n - 1 ))]} * 2 - 2 ))
|
||
|
||
# ---------------------
|
||
# Same sign | Last Item
|
||
# ---------------------
|
||
if [[ ${sign[1]} == ${sign[$(( n - 1 ))]} ]];then
|
||
for c in `seq 1 ${mn[$(( n - 1 ))]}`
|
||
do
|
||
printf "%${sp}s%s\n" "" \
|
||
"</${list[l]}>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
sp=$(( sp - 2 ))
|
||
l=$(( l - 1 ))
|
||
done
|
||
|
||
# ---------------------
|
||
# Diff sign | Last Item
|
||
# ---------------------
|
||
else
|
||
printf "%${sp}s%s\n" "" \
|
||
"</${list[$(( n - 1 ))]}>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
l=$(( l - 1 ))
|
||
|
||
for c in `seq 1 ${mn[$(( n - 1 ))]}`
|
||
do
|
||
l=$(( l - 1 ))
|
||
sp=$(( sp - 2 ))
|
||
(( $sp < 0 )) && sp=0
|
||
printf "%${sp}s%s\n" "" \
|
||
"</${list[l]}>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
done
|
||
fi
|
||
|
||
# -----------
|
||
# Middle Item
|
||
# -----------
|
||
else
|
||
# Diff NBR between current and previous mark: mark difference
|
||
md=$(( ${mn[$n]} - ${mn[$((n - 1))]} ))
|
||
|
||
#echo "${mark[n]} | ${sign[n]} <==> ${mark[$(( n - 1 ))]} | ${sign[$(( n - 1 ))]}"
|
||
|
||
# ----------------------------
|
||
# Same Diff from previous Item
|
||
# ----------------------------
|
||
if (( $md == 0 ));then
|
||
|
||
# ---------------------
|
||
# Same sign | Same Item
|
||
# ---------------------
|
||
if [[ ${sign[n]} == ${sign[$(( n - 1 ))]} ]];then
|
||
make__list_li
|
||
|
||
# ---------------------
|
||
# Diff sign | Same Item
|
||
# ---------------------
|
||
else
|
||
make__list_open_n
|
||
make__list_li
|
||
fi
|
||
|
||
# -------------------------
|
||
# NEW Item UP from previous
|
||
# -------------------------
|
||
elif (( $md > 0 ));then
|
||
|
||
# -----------------------
|
||
# Same sign | New Item UP
|
||
# -----------------------
|
||
if [[ ${sign[n]} == ${sign[$(( n - 1 ))]} ]];then
|
||
make__list_open_n
|
||
make__list_li
|
||
|
||
# -----------------------
|
||
# Diff sign | New item UP
|
||
# -----------------------
|
||
else
|
||
make__list_open_n
|
||
make__list_li
|
||
fi
|
||
|
||
|
||
# ---------------------------
|
||
# New Item DOWN from previous
|
||
# ---------------------------
|
||
else
|
||
bsp=$(( ${mn[$(( n - 1 ))]} * 2 - 2 ))
|
||
|
||
# -------------------------
|
||
# Same sign | New Item Down
|
||
# -------------------------
|
||
if [[ ${sign[n]} == ${sign[$(( n - 1 ))]} ]];then
|
||
for c in `seq 1 ${md/-/}`
|
||
do
|
||
printf "%${bsp}s%s\n" "" \
|
||
"</${list[l]}>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
bsp=$(( bsp - 2 ))
|
||
l=$(( l - 1 ))
|
||
done
|
||
make__list_li
|
||
|
||
# -------------------------
|
||
# Diff sign | New Item Down
|
||
# -------------------------
|
||
else
|
||
l=$(( l + 1 ))
|
||
for c in `seq 1 $(( ${md/-/} + 1 ))`
|
||
do
|
||
printf "%${bsp}s%s\n" "" \
|
||
"</${list[$(( n - 1 ))]}>" \
|
||
>> "$gsl_tmp_list_HTML"
|
||
bsp=$(( bsp - 2 ))
|
||
l=$(( l - 1 ))
|
||
done
|
||
make__list_li
|
||
fi
|
||
fi
|
||
fi
|
||
done
|
||
|
||
# Delete source lines and insert HTML file
|
||
del_ln=`seq $list_ln_start $list_ln_close | wc -l`
|
||
for i in `seq 1 $del_ln`
|
||
do
|
||
sed -i "${list_ln_start}d" "$1"
|
||
done
|
||
sed -i "$((list_ln_start - 1))r$gsl_tmp_list_HTML" "$1"
|
||
|
||
rm -f "$gsl_tmp_list_brut"
|
||
rm -f "$gsl_tmp_list_HTML"
|
||
|
||
make__lists "$1"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# make conteent precode
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__precode() {
|
||
[[ $meta ]] || return
|
||
|
||
unset ${!precode_@}
|
||
|
||
# Define CSS
|
||
precode_css="class=\"${domain_css}_code-block code-block-$header_f1\""
|
||
precode_css_line="class=\"${domain_css}_code-line\""
|
||
precode_css_content="class=\"${domain_css}_code-content\""
|
||
precode_css_source="class=\"${domain_css}_code-link\""
|
||
precode_css_div="class=\"${domain_css}_code-div\""
|
||
|
||
# No Alt-Text ; generate
|
||
[[ "$header_f3" ]] \
|
||
&& precode_title=" title=\"Code: source\"" \
|
||
|| header_f3="Code: source"
|
||
|
||
case "$header_f2" in
|
||
"@"*)
|
||
header_f2=${header_f2/@/}
|
||
uri_file="${sub_genuri_srv}files/$header_f2"
|
||
uri_file_hard="$domain_dir_files/$header_f2"
|
||
;;
|
||
|
||
*)
|
||
uri_file="$header_f2"
|
||
uri_file_hard="$uri_folder/$header_f2"
|
||
;;
|
||
esac
|
||
|
||
# Create TMP file with HTML precode
|
||
article_tmp_content=`mktemp`
|
||
cat << EOCODE > "$article_tmp_content"
|
||
<pre $precode_css>
|
||
$(while read -r 'ln' 'content'
|
||
do
|
||
printf '%2s%s%s\n' "" \
|
||
"<span $precode_css_line>$ln</span>" \
|
||
"<span $precode_css_content>$content</span>"
|
||
done < <(cat -n "$uri_file_hard"))
|
||
</pre>
|
||
|
||
<div $precode_css_div>
|
||
<a $precode_css_source
|
||
target="_blank"
|
||
href="$uri_file"$precode_title>
|
||
$header_f3
|
||
</a>
|
||
</div>
|
||
EOCODE
|
||
|
||
while IFS=: read -r 'ln' 'content'
|
||
do
|
||
sed -i "${ln}r $article_tmp_content" "$1"
|
||
sed -i "${ln}d" "$1"
|
||
done < <(grep -n "_code:$header_f1" "$1")
|
||
|
||
# Remove TMP file
|
||
rm -f "$article_tmp_content"
|
||
}
|
||
|
||
|
||
#======================================================================
|
||
# make conteent brut (copy file as is)
|
||
# $1: $article_tmp_post
|
||
#======================================================================
|
||
make__brut() {
|
||
[[ $meta ]] || return
|
||
|
||
case "$header_f2" in
|
||
"@"*)
|
||
header_f2=${header_f2/@/}
|
||
uri_file="$domain_dir_files/$header_f2"
|
||
;;
|
||
|
||
*)
|
||
uri_file="$uri_folder/$header_f2"
|
||
;;
|
||
esac
|
||
|
||
while IFS=: read -r 'ln' 'content'
|
||
do
|
||
sed -i "${ln}r $uri_file" "$1"
|
||
sed -i "${ln}d" "$1"
|
||
done < <(grep -n "_brut:$header_f1" "$1")
|
||
}
|