#!/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() { clear unset gsl_check_done gsl__prepare_makers gsl__make_strongs gsl__make_bolds gsl__do_header make "$gsl_marker_link" "$gsl_tmp_post" gsl__do_header make "$gsl_marker_abbr" "$gsl_tmp_post" gsl__make_titles gsl_ct=0 && gsl__make_titles_div_open gsl_ct=0 && gsl__make_titles_div_close #echo -ne "\r\033[2K: Searching and converting lists..." #gsl__make_lists echo -ne "\r\033[2K: Searching and converting Paragraphs..." gsl__make_paragraphs #echo -ne "\r\033[2K: Searching and converting Inline-Codes..." #gsl__make_inline_codes #echo -ne "\r\033[2K: Searching and converting Block-Codes..." #gsl__check_bcodes gsl__check_cites gsl__make_a11y echo -ne "\r\033[2K" # No more Needed tmp file post rm -f "$gsl_tmp_post" # Create HTML Page using gsl_a11y_post clear cat "$gsl_a11y_post" gsl__page_creator # No more Needed a11y post rm -f "$gsl_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 } #======================================================================= # Get NEEDED infos, and create TMP file from CONTENT #======================================================================= gsl__prepare_makers() { # Getting NEEDED infos gsl_post_type=` awk -F"$gsl_marker_type" '{print $2}' "$gsl_post"` gsl_post_begin=` grep -n "#1" $gsl_post \ | head -1 \ | awk -F: '{print $1}'` # Source config website (DATAS) source "$gsl_this_conf_domain/$gsl_find_domain.conf" # Get Needed Headers DATAS gsl__get_needed_headers # Get extra Headers DATAS gsl_header_images=`gsl__get_header "$gsl_marker_image" "$gsl_post"` # Create TMP file from CONTENT gsl_tmp_post=`mktemp` awk -v l="$gsl_post_begin" \ 'NR >= l' \ "$gsl_post" \ > "$gsl_tmp_post" # Code readability a11y gsl_a11y_post=`mktemp` } #======================================================================= # --------------------------------- # Converters # --------------------------------- #======================================================================= #====================================================================== # From gsl__do_header: Make Link #====================================================================== gsl__make_link() { echo -ne "\r\033[2K: Converting Links... $gsl_post_hf_1" gsl_post_hf_1="${gsl_post_hf_1}" gsl_post_hf_1_t="${gsl_post_hf_1}+" [[ "$sl_post_hf_3" ]] \ && gsl_html_link_title=" title=\"$sl_post_hf_3\"" # target blank gsl_html_link_t=` printf '%s%s%s%s' \ "" \ "$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" } #====================================================================== # From gsl__do_header: Make ABBRS #====================================================================== gsl__make_abbr() { echo -ne "\r\033[2K: Converting ABBRs... $gsl_post_hf_1" gsl_html_long="$gsl_post_hf_1" sed -i "s|$gsl_post_hf_1|$gsl_html_long|" "$gsl_tmp_post" } gsl_make_sb_show() { echo -ne "\r\033[2K: Converting... Line:$gsl_line_nbr $gsl_html_word" sed -i "s|$gsl_word_replace|$gsl_html_word|" "$gsl_tmp_post" unset ${!gsl_word@} ${!gsl_html@} } #====================================================================== # From gsl__all_header: Make Strongs #====================================================================== gsl__make_strongs() { while read -r "gsl_line_nbr" "gsl_word" do case "$gsl_word" in # STRONG "**"*"**"*|*"**"*"**"*) gsl_word=${gsl_word#*'**'} gsl_word=${gsl_word%'**'*} gsl_word_replace='\*\*'"$gsl_word"'\*\*' gsl_html_word="$gsl_word" gsl_make_sb_show ;; "**"*"**") gsl_html_word="${gsl_word//'**'/}" gsl_word_replace='\*\*'"$gsl_word"'\*\*' gsl_make_sb_show ;; "**"*) gsl_word=${gsl_word#'**'*} gsl_html_word="$gsl_word" gsl_word_replace='\*\*'"$gsl_word" gsl_make_sb_show ;; *"**") gsl_word=${gsl_word%'**'*} gsl_html_word="${gsl_word//'**'/}" gsl_word_replace="$gsl_word"'\*\*' gsl_make_sb_show ;; *) continue ;; esac done < <(awk '{for(i=1;i<=NF;i++) {print NR, $i}}' "$gsl_tmp_post") } #====================================================================== # From gsl__all_header: Make Bolds #====================================================================== gsl__make_bolds() { while read -r "gsl_line_nbr" "gsl_word" do case "$gsl_word" in # STRONG "*"*"*"*|*"*"*"*"*) gsl_word=${gsl_word#*'*'} gsl_word=${gsl_word%'*'*} gsl_word_replace='\*'"$gsl_word"'\*' gsl_html_word="$gsl_word" gsl_make_sb_show ;; "*"*"*") gsl_html_word="${gsl_word//'*'/}" gsl_word_replace='\*'"$gsl_word"'\*' gsl_make_sb_show ;; "*"*) gsl_word=${gsl_word#'*'*} gsl_html_word="$gsl_word" gsl_word_replace='\*'"$gsl_word" gsl_make_sb_show ;; *"*") gsl_word=${gsl_word%'*'*} gsl_html_word="${gsl_word//'*'/}" gsl_word_replace="$gsl_word"'\*' gsl_make_sb_show ;; *) continue ;; esac done < <(awk '{for(i=1;i<=NF;i++) {print NR, $i}}' "$gsl_tmp_post") } #======================================================================= # Find BLOCK-CODES #======================================================================= gsl__check_bcodes() { gsl_lines_nbr=(` gsl__get_mark_content_line \ "$gsl_mark_code" \ "$gsl_tmp_post"`) ! [[ "$gsl_lines_nbr" ]] \ && return for i in `seq 1 ${#gsl_lines_nbr[@]}` do gsl__make_bcode done } #======================================================================= # 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 } #======================================================================= # ----------------------------------------------- # Convert To HTML in duplicated CONTENT Post File # ----------------------------------------------- #======================================================================= #======================================================================= # Find and convert Titles #1-6 #======================================================================= gsl__make_titles() { echo -ne ": Searching and converting Titles..." for t in `seq 1 6` do while read -r "h" "content" do gsl_html_title="$content" sed -i "s^$h $content^$gsl_html_title^" \ "$gsl_tmp_post" done < <(grep "#$t" "$gsl_tmp_post") done } #----------------------------------------------------------------------- # #======================================================================= # Open DIVs after titles for css #======================================================================= gsl__make_titles_div_open() { echo -ne "\r\033[2K: Searching Titles and Open DIVs..." gsl_ct=$(( gsl_ct + 1 )) gsl_content_title=` grep -n "" '{print $1}'` gsl_html_div="
" sed -i "$(( $gsl_content_line_nbr + 1 ))i$gsl_html_div" \ "$gsl_tmp_post" gsl_content_same_title="$gsl_content_title" gsl__make_titles_div_open } #======================================================================= # Close DIVs before titles for css #======================================================================= gsl__make_titles_div_close() { echo -ne "\r\033[2K: Searching Titles and Open DIVs..." gsl_test_line="
" >> "$gsl_tmp_post" \ && return ! [[ "$gsl_content_title" ]] && return gsl_content_line_nbr=` awk -F: '{print $1}' \ <<< $gsl_content_title` while read -r "gsl_search_line_nbr" "gsl_search_line" do case "$gsl_search_line" in "" "$gsl_tmp_post" break ;; *) continue ;; esac done < <(awk -v l="$gsl_content_line_nbr" \ 'NR > l {print NR,$0}' \ "$gsl_tmp_post") gsl_content_same_title="$gsl_content_title" gsl__make_titles_div_close } # #----------------------------------------------------------------------- #======================================================================= # Find and convert paragraphs (3 different css styles) #======================================================================= gsl__make_paragraphs() { gsl_html_par_o1="

" gsl_html_par_o2="

" gsl_html_par_o3="

" gsl_html_par_c="

" while read -r "gsl_content_line_nbr" "gsl_content_line" do case "$gsl_content_line" in ")") sed -i "${gsl_content_line_nbr}s,.*,$gsl_html_par_c," \ "$gsl_tmp_post" ;; "("|"( 1") sed -i "${gsl_content_line_nbr}s,.*,$gsl_html_par_o1," \ "$gsl_tmp_post" ;; "( 2") sed -i "${gsl_content_line_nbr}s,.*,$gsl_html_par_o2," \ "$gsl_tmp_post" ;; "( 3") sed -i "${gsl_content_line_nbr}s,.*,$gsl_html_par_o3," \ "$gsl_tmp_post" ;; *) continue ;; esac done < <(cat -n "$gsl_tmp_post") } #======================================================================= # Replace gsl_mark_code #======================================================================= gsl__make_bcode() { # Get mark line nbr gsl_line_nbr=` gsl__get_mark_content_line \ "$gsl_mark_code" \ "$gsl_tmp_post" | head -1` #--------- # Convert #--------- gsl_css_class="${gsl_site_css}_block-code" gsl_header_content_line=`gsl__get_header "$gsl_marker_code" "$gsl_post"` gsl_file_tmp_code=`mktemp` # Set gsl_post_header_field_1 gsl_post_header_field_2 gsl__get_header_fields "$gsl_marker_code" # Create tmp file from block-code, adding span to get number lines 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_post_header_field_2") printf '%s %s\n%b\n%s\n' \ "
" \
       "$(cat "$gsl_file_bcode")" \
       "
" \ > "$gsl_file_tmp_code" sed -i "${gsl_line_nbr}r $gsl_file_tmp_code" "$gsl_tmp_post" sed -i "${gsl_line_nbr}d" "$gsl_tmp_post" rm -f "$gsl_file_tmp_code" rm -f "$gsl_file_bcode" } #----------------------------------------------------------------------- #======================================================================= # 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_images() { ! [[ "$gsl_header_images" ]] \ && return } #----------------------------------------------------------------------- # Convert HTML: Files #----------------------------------------------------------------------- gsl__make_files() { ! [[ "$gsl_header_files" ]] \ && return while read -r "gsl_this_file" do gsl_filename=` awk -F" : " \ -v s="$gsl_marker_file$gsl_this_file" \ 'match($0,s) {print $2}' \ "$gsl_post"` gsl_filealt=` awk -F" : " \ -v s="$gsl_marker_file$gsl_this_file" \ 'match($0,s) {print $3}' \ "$gsl_post"` [[ "$gsl_filealt" ]] \ && gsl_HTML_file_title=" title=\"$gsl_filealt\"" # Set HTML Link case "$gsl_post_type" in post) gsl_HTML_file_url="./files/$gsl_filename" ;; page) gsl_HTML_file_url="../files/$gsl_filename" ;; esac # Convert file to link gsl_mark_file="$gsl_mo_file$gsl_this_file$gsl_mc_file" gsl_HTML_file_link=` printf '%s%s%s%s%s%s' \ "" \ "$gsl_this_file" \ ""` sed -i "s|$gsl_mark_file|$gsl_HTML_file_link|g" \ "$gsl_tmp_post" done < <(gsl__get_content_finder \ -o "$gsl_mo_file" \ -c "$gsl_mc_file" \ -f "$gsl_tmp_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 break fi case "$gsl_line" in "> "$gsl_a11y_post" ;; esac done < <(cat -n "$gsl_tmp_post") }