#!/bin/bash # file: gsl__post_makers # Folder: /var/lib/gsl/scripts # By echolib # License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 #======================================================================= # --------- # MAIN CALL # --------- #======================================================================= #======================================================================= # From: gsl__loop_posts | Convert Post from modules to HTML #======================================================================= gsl__all_makers() { # Code readability a11y gsl_a11y_post=`mktemp` # Get content only, not header in a file gsl__post_content_only # Get base uri from post/page type: case "$gsl_post_type" in post) gsl_uri=".." ;; page) gsl_uri="." ;; esac gsl__do_italics "make" "$gsl_tmp_post" # First gsl__do_header "make" "$gsl_marker_link" "$gsl_post" gsl__do_header "make" "$gsl_marker_abbr" "$gsl_post" gsl__make_newline gsl__make_files gsl__do_strongs_bolds "make" "$gsl_tmp_post" gsl__make_list gsl__do_icode "make" "$gsl_tmp_post" gsl__make_titles gsl__do_header "make" "$gsl_marker_image" "$gsl_post" gsl__make_paragraphs # From File_Code gsl_fcode_nbr=`grep "$gsl_mark_fcode" "$gsl_tmp_post" | wc -l` if (( $gsl_fcode_nbr > 0 ));then for fcode in `seq 1 $gsl_fcode_nbr` do gsl__make_fcode done fi gsl__check_cites gsl__make_a11y echo -ne "\r\033[2K" rm -f "$gsl_tmp_post" # No more Needed tmp file post # Create SRV folder according to post type [[ "$gsl_post_type" == "post" ]] \ && mkdir -p "$gsl_srv_wip/$gsl_header_slug/" \ && gsl__logs_print \ "$gsl_log_w" \ "SRV" \ "wip" \ "Create folder: $gsl_header_slug" \ "$gsl_srv_wip/$gsl_header_slug/" \ && gsl_checker_war=true # Create HTML Page using gsl_a11y_post gsl__page_creator gsl__db_set_post_status wip rm -f "$gsl_a11y_post" # No more Needed a11y post } #======================================================================= # --------------------------------------------- # Tools and prepapre tmp file from CONTENT Post # --------------------------------------------- #======================================================================= #======================================================================= # Get line nbr from TMP CONTENT Post... $1: TERM | $2: File #======================================================================= gsl__get_mark_content_line() { awk -v s="$1" \ '$0 ~ s {print NR}' \ "$2" || return } #======================================================================= # --------------------------------- # Converters # --------------------------------- #======================================================================= #---------------------------------------------------------------------- #====================================================================== # Convert List.Get first/last line item / repeat till no more mark #====================================================================== # Loop till no more list marker gsl__make_list() { if [[ `awk -v mls="\$gsl_mark_listo" \ 'match($1,mls) {print NR,$0;exit}' \ "$gsl_tmp_post"` ]] || \ [[ `awk -v mls="\$gsl_mark_list" \ 'match($1,mls) {print NR,$0;exit}' \ "$gsl_tmp_post"` ]];then gsl__make_list_read_by_block fi return } # ===================================================================== # Read list by block, create tmp file, convert in HTML, replace block # ln: line number | ml: marker list # ===================================================================== gsl__make_list_read_by_block() { unset list_lb list_le # Making tmp block file list gsl_file_block_list=`mktemp` while read -r "ln" "ml" "content" do case "$ml" in "$gsl_mark_list"*|"$gsl_mark_listo"*) case "$ml" in "$gsl_mark_list"*) gsl_html_uol="ul" ;; "$gsl_mark_listo"*) gsl_html_uol="ol" ;; esac ! [[ $list_lb ]] && list_lb="$ln" echo "$ml $content" >> "$gsl_file_block_list" ;; ""|*) if [[ $list_lb ]];then list_le=$ln echo "" >> "$gsl_file_block_list" break fi ;; esac done < <(cat -n "$gsl_tmp_post") # Convert block_list echo -ne "\r\033[2K: Converting list block... $list_lb-$list_le" gsl__make_list_convert # Remove in gsl_tmp_post block list and replace with $gsl_file_html_list diff_lines=$(( list_le - list_lb )) #seq $list_lb $list_le for rml in `seq 1 $diff_lines` do sed -i "${list_lb}d" "$gsl_tmp_post" done sed -i "$((list_lb -1))r $gsl_file_html_list" "$gsl_tmp_post" # No more needed html file list rm -f "$gsl_file_html_list" # No more needed block list file rm -f "$gsl_file_block_list" # Go again if new list found gsl__make_list } # ===================================================================== # Create TMP HTML block list file # ===================================================================== gsl__make_list_convert() { gsl_file_html_list=`mktemp` # mln: marker list number | pmln: previous list mark number gsl__make_list_count_prev_mark() { pml=`gawk -v pln=$(( ln -1 )) 'NR == pln {print $1}' "$gsl_file_block_list"` pmln=${#pml} } mln_indent=0 while read -r "ln" "ml" "content" do mln=${#ml} (( $mln_indent < $mln )) \ && mln_indent=$mln \ && mln_indent_close=$((mln_indent * 3 - 3)) gsl__make_list_count_prev_mark diff_pmln_mln=$(( mln - pmln )) #echo "$mln (pmln=$pmln ; diff: $diff_pmln_mln)" >> "$gsl_file_html_list" if (( $diff_pmln_mln == 0 ));then printf "%$((mln * 3))s%s\n" \ "" \ "
  • $content
  • " \ >> "$gsl_file_html_list" elif (( $diff_pmln_mln > 0 ));then printf "%$((mln * 3 - 3))s%s\n%$((mln * 3))s%s\n" \ "" \ "<$gsl_html_uol class=\"${gsl_site_css}_list-$gsl_html_uol\">" \ "" \ "
  • $content
  • " \ >> "$gsl_file_html_list" elif (( $diff_pmln_mln < 0 ));then for i in `seq $diff_pmln_mln -1` do if [[ "$content" ]];then printf "%${mln_indent_close}s%s\n%${mln_indent_close}s%s\n" \ "" \ "" \ "" \ "
  • $content
  • " \ >> "$gsl_file_html_list" else printf "%${mln_indent_close}s%s\n" \ "" \ "" \ >> "$gsl_file_html_list" fi mln_indent_close=$((mln_indent_close - 3)) (( $mln_indent_close < 0 )) && mln_indent_close=0 done fi done < <(cat -n "$gsl_file_block_list") } #---------------------------------------------------------------------- #====================================================================== # Replace gsl_mark_fcode #====================================================================== gsl__make_fcode() { while IFS=: read -r "line" "mark" "nbr" do # Get File gsl_file_fcode=` grep "${gsl_marker_code}$nbr" "$gsl_post" \ | awk -F" : " '{print $2}'` echo -ne "\r\033[2K: Converting Block-Codes... $gsl_file_fcode" gsl_css_class="${gsl_site_css}_block-code" # Create tmp file from block-code, adding span for line numbers in css gsl_file_bcode=`mktemp` while read -r "gsl_bcode_line" do echo "$gsl_bcode_line" >> "$gsl_file_bcode" done < <(cat "$gsl_dir_domain_files/$gsl_file_fcode") gsl_file_tmp_code=`mktemp` printf '%s %s\n%b\n%s\n' \ "
    " \
             "$(cat "$gsl_file_bcode")" \
             "
    " \ > "$gsl_file_tmp_code" # Replace in tmp post and delete mark sed -i "${line}r $gsl_file_tmp_code" "$gsl_tmp_post" sed -i "${line}d" "$gsl_tmp_post" rm -f "$gsl_file_tmp_code" rm -f "$gsl_file_bcode" done < <(grep -n "$gsl_mark_fcode" "$gsl_tmp_post" | head -n 1) } #====================================================================== # From gsl__do_header: Make Link #====================================================================== gsl__make_link() { gsl_post_hf_1="${gsl_post_hf_1}" gsl_post_hf_1_t="${gsl_post_hf_1}+" [[ "$gsl_post_hf_3" ]] \ && gsl_html_link_title=" title=\"$gsl_post_hf_3\"" # target blank gsl_html_link_t=` printf '%s%s%s%s' \ "" \ "$gsl_post_hf_1" \ ""` echo -ne "\r\033[2K: Converting Link... $gsl_post_hf_1" sed -i "s|_${gsl_post_hf_1_t}|$gsl_html_link_t|g" "$gsl_tmp_post" # No Target gsl_html_link=` printf '%s%s%s' \ "" \ "$gsl_post_hf_1" \ ""` sed -i "s|_${gsl_post_hf_1}|$gsl_html_link|g" "$gsl_tmp_post" unset gsl_post_hf_3 gsl_html_link_title } #====================================================================== # From gsl__do_header: Make ABBRS #====================================================================== gsl__make_abbr() { echo -ne "\r\033[2K: Converting ABBR... $gsl_post_hf_1" gsl_html_long="$gsl_post_hf_1" sed -i "s|$gsl_post_hf_1|$gsl_html_long|" "$gsl_tmp_post" } #======================================================================= # Find and convert Titles #1-6 + block dib #======================================================================= gsl__make_titles() { gsl_file_block_titles=`mktemp` while read -r "ln" "t" "content" do echo -ne "\r\033[2K: Converting Block Title... $t $content" if [[ $ln_o ]];then if [[ $ln_c ]];then ln_o=$ln_c ln_c=$ln else ln_c=$ln fi else ln_o=$ln tn=${t: -1} echo "$content" >> "$gsl_file_block_titles" fi if [[ $ln_c ]];then tn=${t: -1} if [[ `awk -v o="$ln_o" -v c="$ln_c" \ 'NR > o && NR < c' \ "$gsl_tmp_post"` ]];then echo "
    " \ >> "$gsl_file_block_titles" awk -v o="$ln_o" -v c="$ln_c" \ 'NR > o && NR < c && $0' \ "$gsl_tmp_post" \ >> "$gsl_file_block_titles" echo -e "
    \n" \ >> "$gsl_file_block_titles" fi echo "$content" >> "$gsl_file_block_titles" fi done < <(awk '$1 ~ /#/ {print NR,$0}' "$gsl_tmp_post") # Doing the last title block content last_line=`cat "$gsl_tmp_post" | wc -l` if [[ `awk -v o="$ln_o" -v c="$last_line" \ 'NR > o && NR <= c' \ "$gsl_tmp_post"` ]];then echo "
    " \ >> "$gsl_file_block_titles" awk -v o="$ln_c" -v c="$last_line" \ 'NR > o && NR <= c' \ "$gsl_tmp_post" \ >> "$gsl_file_block_titles" echo "
    " >> "$gsl_file_block_titles" fi cat "$gsl_file_block_titles" > "$gsl_tmp_post" rm -f "$gsl_file_block_titles" } #======================================================================= # Find and convert paragraphs (3 different css styles) #======================================================================= gsl__make_paragraphs() { echo -ne "\r\033[2K: Converting Paragraphs..." while read -r "ln" "content" do case "$content" in ")") sed -i "${ln}s,.*,

    ," \ "$gsl_tmp_post" ;; "("*) gsl_css_id=` awk -v l="$ln" \ 'NR == l {print $2}' \ "$gsl_tmp_post"` if [[ "$gsl_css_id" ]] && \ [[ `grep '^[-0-9a-zA-Z]*$' <<<"$gsl_css_id"` ]];then gsl_css_id="-$gsl_css_id" fi gsl_html_par_id="

    " sed -i "${ln}s,.*,$gsl_html_par_id," \ "$gsl_tmp_post" ;; *) continue ;; esac done < <(cat -n "$gsl_tmp_post") } #----------------------------------------------------------------------- #======================================================================= # Find BLOCKQUOTES #======================================================================= gsl__check_cites() { echo -ne "\r\033[2K: Searching and converting Citations..." unset gsl_lines_nbr gsl_lines_nbr=(` gsl__get_mark_content_line \ "$gsl_mark_blockquote" \ "$gsl_tmp_post"`) gsl_lines_nbr=(${gsl_lines_nbr[0]} ${gsl_lines_nbr[1]}) ! [[ "$gsl_lines_nbr" ]] \ && return for i in `seq 1 ${#gsl_lines_nbr[@]}` do if [[ "$gsl_cite_start" ]];then unset gsl_cite_start gsl_cite_line_stop=${gsl_lines_nbr[(($i-1))]} gsl__make_cite else gsl_cite_start=true gsl_cite_line_start=${gsl_lines_nbr[(($i-1))]} fi done gsl__check_cites } #======================================================================= # Replace and Convert this blockquote #======================================================================= gsl__make_cite() { gsl_file_tmp_cite=`mktemp` # File to Put whole Blockquote gsl_file_tmp_cite_content=`mktemp` # File to Put Blockquote CONTENT only gsl_file_tmp_cite_html=`mktemp` # File to Put final HTML blockquote # Put whole blockquote in file awk -v o="$gsl_cite_line_start" -v c="$gsl_cite_line_stop" \ 'NR >= o && NR <= c' \ "$gsl_tmp_post" \ > "$gsl_file_tmp_cite" # No more DATAS needed for next if any unset ${!gsl_bq_@} ${!gsl_html_cite_@} # Get DATAS from blockquote while read -r "gsl_content_line" do case "$gsl_content_line" in ---*) continue ;; _cite*) gsl_bq_author=`awk -F" : " '{print $2}' <<< "$gsl_content_line"` ;; _book*) gsl_bq_book=`awk -F" : " '{print $2}' <<< "$gsl_content_line"` ;; _lang*) gsl_bq_lang=`awk -F" : " '{print $2}' <<< "$gsl_content_line"` gsl_html_cite_lang=" lang=\"$gsl_bq_lang\"" ;; _year*) gsl_bq_year=`awk -F" : " '{print $2}' <<< "$gsl_content_line"` ;; _link*) gsl_bq_link=`awk -F" : " '{print $2}' <<< "$gsl_content_line"` gsl_html_cite_link=" cite=\"$gsl_bq_link\"" ;; *) [[ "$gsl_bq_author" ]] \ && echo " $gsl_content_line" >> "$gsl_file_tmp_cite_content" \ || echo " $gsl_content_line" >> "$gsl_file_tmp_cite_content" ;; esac done < <(cat "$gsl_file_tmp_cite") [[ "$gsl_bq_book" ]] \ && gsl_bq_ref=" - $gsl_bq_book" [[ "$gsl_bq_year" ]] \ && gsl_bq_ref+=" ($gsl_bq_year)" [[ "$gsl_bq_book" ]] \ && gsl_html_cite_book=" title=\"Book:$gsl_bq_ref\"" ! [[ "$gsl_bq_link" ]] && [[ "$gsl_bq_book" ]] \ && gsl_html_cite_link=" cite=\"$gsl_bq_book$gsl_bq_year\"" rm -f "$gsl_file_tmp_cite" # No more whole blockquote file needed gsl_file_tmp_cite=`mktemp` # File to put Converted HTML DATAS # Advanced or simple blockquote [[ "$gsl_bq_author" ]] \ && gsl__make_cite_advanced \ || gsl__make_cite_simple # Insert html blockquote file in Post sed -i "${gsl_cite_line_stop}r $gsl_file_tmp_cite_html" "$gsl_tmp_post" # Remove useless lines gsl_cite_total_lines=$(( $gsl_cite_line_stop - gsl_cite_line_start )) for i in `seq 0 $gsl_cite_total_lines` do sed -i "${gsl_cite_line_start}d" "$gsl_tmp_post" done rm -f "$gsl_file_tmp_cite_content" # No more blockquote CONTENT needed rm -f "$gsl_file_tmp_cite_html" # No more html blockquote file needed } #======================================================================= # from gsl__post_maker_cite : ADVANCED blockquote #======================================================================= gsl__make_cite_advanced() { gsl_css_class="class=\"${gsl_site_css}_quote\"" cat << EOCITE > "$gsl_file_tmp_cite_html"

    $(cat "$gsl_file_tmp_cite_content")
    $gsl_bq_author$gsl_bq_ref
    EOCITE } #======================================================================= # from gsl__post_maker_cite : SIMPLE blockquote #======================================================================= gsl__make_cite_simple() { gsl_css_class="${gsl_site_css}_simple-quote" cat << EOCITE > "$gsl_file_tmp_cite_html"
    $(cat "$gsl_file_tmp_cite_content")
    EOCITE } #----------------------------------------------------------------------- #----------------------------------------------------------------------- # Convert HTML: Images #----------------------------------------------------------------------- gsl__make_image() { gsl_this_mark="$gsl_mark_image:$gsl_post_hf_1" while IFS=: read -r "line_nbr" \ "marker" \ "this_image" \ "align_image" \ "width" \ "height" \ "target" do # Get this marker gsl_this_mark=`awk -v ln="$line_nbr" 'NR == ln' $gsl_tmp_post` #align_image=`awk -F: '{print $3}' <<< "$this_image"` case "$align_image" in R|r|D|d) gsl_html_class="class=\"${gsl_site_css}_image_right\"" ;; L|l|G|g) gsl_html_class="class=\"${gsl_site_css}_image_left\"" ;; C|c) gsl_html_class="class=\"${gsl_site_css}_image_center\"";; *) gsl_html_class="class=\"${gsl_site_css}_image_center\"";; esac gsl_html_src="src=\"$gsl_uri/images/$gsl_post_hf_2\"" gsl_html_alt="alt=\"$gsl_post_hf_3\" title=\"$gsl_post_hf_3\"" [[ "$width" ]] && gsl_html_width=" style=\"width:${width}px;\"" [[ "$height" ]] && gsl_html_height=" style=\"height:${height}px;\"" gsl_html_image=` printf '%s %s %s%s%s' \ ""` [[ "$target" ]] \ && gsl_html_image="$gsl_html_image" echo -ne "\r\033[2K: Converting Image... Line:$line_nbr $gsl_this_mark" sed -i "${line_nbr}s|$gsl_this_mark|$gsl_html_image|" "$gsl_tmp_post" done < <(grep -n "$gsl_this_mark" "$gsl_tmp_post") } #----------------------------------------------------------------------- # Convert HTML: Files #----------------------------------------------------------------------- gsl__make_files() { echo # Set HTML Base Link case "$gsl_post_type" in post) gsl_bfile_url="../files" ;; page) gsl_bfile_url="files" ;; esac while read -r "gsl_this_file" do gsl_this_file=${gsl_this_file/$gsl_marker_file/} gsl_filetxt=` awk -F" : " \ '{print $1}' \ <<< "$gsl_this_file"` gsl_filename=` awk -F" : " \ '{print $2}' \ <<< "$gsl_this_file"` gsl_filealt=` awk -F" : " \ '{print $3}' \ <<< "$gsl_this_file"` [[ "$gsl_filealt" ]] \ && gsl_HTML_file_title=" title=\"$gsl_filealt\"" # Convert file to link gsl_mark_file="$gsl_mark_file$gsl_filetxt" gsl_HTML_file_link=` printf '%s%s%s%s%s%s' \ "" \ "$gsl_filetxt" \ ""` echo -ne "\r\033[2K: Converting File... $gsl_mark_file" sed -i "s|$gsl_mark_file|$gsl_HTML_file_link|g" \ "$gsl_tmp_post" done < <(grep "$gsl_marker_file" "$gsl_post") } #----------------------------------------------------------------------- # Convert Inline-code #----------------------------------------------------------------------- gsl__make_inline_codes() { gsl_HTML_inline_code="" sed -i "s|$gsl_mo_code|$gsl_HTML_inline_code|g" \ "$gsl_tmp_post" sed -i "s|$gsl_mc_code||g" \ "$gsl_tmp_post" } #----------------------------------------------------------------------- # Reading Code ; making readability #----------------------------------------------------------------------- gsl__make_a11y() { echo -ne "\r\033[2K: Reading HTML Code for readability..." gsl__make_a11y_add_space() { gsl_set_space=$(( gsl_set_space * 2 )) gsl_space=`printf "%${gsl_set_space}s" ""` awk -v b="$gsl_start_line" \ -v c="$gsl_stop_line" \ -v space="$gsl_space" \ 'NR > b && NR < c {print space $0}' \ "$gsl_tmp_post" \ >> "$gsl_a11y_post" } gsl_last_title_line=` grep -n " $gsl_last_title_line ));then gsl_stop_line=`cat "$gsl_tmp_post" | wc -l` gsl__make_a11y_add_space # print last line and stop awk -v last="$gsl_stop_line" -v space="$gsl_space" \ 'NR == last {print space $0}' \ "$gsl_tmp_post" \ >> "$gsl_a11y_post" break fi case "$gsl_line" in "> "$gsl_a11y_post" ;; esac done < <(cat -n "$gsl_tmp_post") } #----------------------------------------------------------------------- # Create a new line from | to
    #----------------------------------------------------------------------- gsl__make_newline() { while read -r "nbrline" "nl" "content" do echo -ne "\r\033[2K: Converting New Line... | >
    " sed -i "${nbrline}s,|,
    ," "$gsl_tmp_post" done < <(awk -v nl="|" '$1==nl {print NR,$0}' "$gsl_tmp_post") echo -ne "\r\033[2K" }