diff --git a/bob.sh b/bob.sh deleted file mode 100755 index 1768d97..0000000 --- a/bob.sh +++ /dev/null @@ -1,474 +0,0 @@ -#!/usr/bin/env bash - -_get_blog_name() -{ - # Extract the configuration file - conf=`cat .blog.conf` - #echo $conf - name_regex="blog\:([a-zA-Z ]+)" - - # Echo the name of the blog, if any was given - if [[ $conf =~ $name_regex ]]; then - echo ${BASH_REMATCH[1]} - fi -} - -_get_dark_param() -{ - conf=`cat .blog.conf` - dark_regex="dark:(y|n|N)" - - if [[ $conf =~ $dark_regex ]]; then - echo ${BASH_REMATCH[1]} - fi -} - -_get_blog_lang() -{ - conf=`cat .blog.conf` - lang_regex="lang:([a-z]+)" - - if [[ $conf =~ $lang_regex ]]; then - echo ${BASH_REMATCH[1]} - fi -} - -_add_header() -{ - - post_name=$1 - lang=$2 - dark=$3 - - css="../css/poststyle.css" - if [[ $dark =~ "y" ]]; then - css="../css/poststyle.dark.css" - fi - - cat > ./posts/$post_name.html << EOF - - - - - $post_name - - - - - -
-EOF -} - -_add_footer() -{ - post_name=$1 - cat >> ./posts/$post_name.html << EOF -
- - - -EOF - -} - - -_get_last_modif_date() -{ - # Extract the date of the last modification of the file $1 - # and echo it with format dd/mm/yyyy - date=`stat -f "%Sm" -t "%d/%m/%Y" $1` - echo $date -} - -publish() -{ - delete_posts - - # Collect all configuration parameters so that the regex are only evaluted - # once per publication. Done to improve the speed of the publication - dark=$(_get_dark_param) - lang=$(_get_blog_lang) - blog_name=$(_get_blog_name) - - # list all the drafts stored as most recently modified to - # least recently modified, as it should appear on a blog - drafts=`ls -t ./drafts/` - # echo $drafts - - # Tranform the string into an array - list=($(echo "$drafts" | tr ' ' '\n')) - - # date=$(_get_last_modif_date "./drafts/${list[0]}") - - # Regex to extract the name without the extension - name_regex="([a-zA-Z]+)\.(md|markdown)" - - # Array to story only the names of the posts - posts_names=() - - for (( i=0; i<${#list[@]}; i++ )); - do - if [[ ${list[i]} =~ $name_regex ]]; then - # Append the names to the array - posts_names+=(${BASH_REMATCH[1]}) - fi - _create_posts "./drafts/${list[i]}" "$lang" "$dark" - done - - # function to update the index.html - # Passing the drafts as argument since it's sorted - _update_index "$drafts" "$blog_name" "$lang" "$dark" -} - -_create_posts() -{ - draft=$1 - lang=$2 - dark=$3 - - # Convert the markdown file $draft into html - # and store the result in $content - content=`multimarkdown --nolabels $draft` - - # Regex to extract the simple post name - md_regex="([a-zA-Z]+)\.(md|markdown)" - - if [[ $draft =~ $md_regex ]]; then - # If the file have md or markdown extension, cut it - post_name=${BASH_REMATCH[1]} - else - # if not and it has no extension, keep it this way - post_name=$draft - fi - - # Integrate the html converted content into a proper html file - _build_post "$post_name" "$content" "$lang" "$dark" -} - -_build_post() -{ - # Create the html file of the post $post_name with the - # previsouly converted markdown to html $content - post_name=$1 - content=$2 - lang=$3 - dark=$4 - - _add_header "$post_name" "$lang" "$dark" - echo $content >> ./posts/$post_name.html - _add_footer "$post_name" -} - -_update_index() -{ - title=$2 - lang=$3 - dark=$4 - - css="./css/indexstyle.css" - if [[ $dark =~ "y" ]]; then - css="./css/indexstyle.dark.css" - fi - - cat > index.html << EOF - - - - - $title - - - - - -

$title

-EOF - -# Retrieve the string containing all drafts names and splitting it -# into an array -drafts=$1 -drafts_list=($(echo "$drafts" | tr ' ' '\n')) - -# Number of posts in the draft list, needed for the for loop -nbposts=${#drafts_list[@]} - -# If there are posts to post, begin the list -if [ $nbposts -gt 0 ] -then - echo "" >> index.html -fi - -cat >> index.html << EOF - - -EOF -} - -_add_post_link() -{ - url=$1 - post_name=$2 - date=$3 - echo "
  • " >> index.html - echo "$post_name" >> index.html - echo "$date" >> index.html - echo "
  • " >> index.html -} - -init() -{ - echo Name of the author of the blog : - read author - echo "author:$author" > .blog.conf - echo Name of the blog : - read blog - echo "blog:$blog" >> .blog.conf - echo "Language of the blog : (en)" - read lang - if [ -z $lang ]; then - lang=en - fi - echo "lang:$lang" >> .blog.conf - echo "Activate dark mode : (y/N)" - read dark - if [ -z $lang ]; then - dark=N - fi - echo "dark:$dark" >> .blog.conf - mkdir drafts - mkdir posts - mkdir css - _init_css - _index "$blog" "$lang" -} - -_init_css() -{ - # Initiate css files for both the index and the posts, - # both dark and light themes - cat > ./css/indexstyle.css << EOF - .wrap { - width: 40vw; - margin-right: auto; - margin-left: auto; - } - .title { - margin-top: 5vh; - margin-bottom: 7vh; - text-align: center; - font-family: 'IBM Plex Mono', monospace; - } - .posts_list { - text-align: center; - padding-left: 0px; - list-style: none; - } - .post { - margin-bottom: 3vh; - font-family: 'IBM Plex Mono', monospace; - } - .post a:link { - text-decoration: none; - } - .post a:hover { - text-decoration: underline; - color: #AAA; - } - .post a { - color: black; - } - .date { - color: #777; - font-family: 'Cutive Mono', monospace; - } -EOF - -cat > ./css/indexstyle.dark.css << EOF -body { - background: #222; -} -.wrap { - width: 40vw; - margin-right: auto; - margin-left: auto; -} -.title { - margin-top: 5vh; - margin-bottom: 7vh; - color: #e1e1e1; - text-align: center; - font-family: 'IBM Plex Mono', monospace; -} -.posts_list { - text-align: center; - padding-left: 0px; - list-style: none; -} -.post { - margin-bottom: 3vh; - color: #e1e1e1; - font-family: 'IBM Plex Mono', monospace; -} -.post a:link { - color: #e1e1e1; - text-decoration: none; -} -.post a:hover { - text-decoration: underline; - color: #AAA; -} -.post a { - color: #e1e1e1; -} -.date { - color: #777; - font-family: 'Cutive Mono', monospace; -} -EOF - -cat > ./css/poststyle.css << EOF -body { - font-family: 'IBM Plex Mono', monospace; -} -.post { - width: 70vw; - margin-right: auto; - margin-left: auto; -} -EOF - -cat > ./css/poststyle.dark.css << EOF -body { - font-family: 'IBM Plex Mono', monospace; - background: #222; - color: #e1e1e1; -} -.post { - width: 70vw; - margin-right: auto; - margin-left: auto; -} -EOF - -} - -_index() -{ - title=$1 - lang=$2 - # Create the first index file, empty of any posts - cat > index.html << EOF - - - - - $title - - - - - -

    $title

    - - -EOF -} - -change_mode() -{ - # READ FILE LINE BY LINE SO THAT THE NEW CONF FILE IS NOT ON ONE LINE - echo "Activate dark mode : (y/N)" - read dark - if [ -z $lang ]; then - dark=N - fi - conf=`cat .blog.conf` - echo ${conf//dark:(y|n|N)/dark:$dark} > .blog.conf -} - -delete_posts() -{ - rm ./posts/*.html -} - -usage() -{ - echo - echo "This script is made for those who want to blog and are also addicted - to the command line" - echo - echo "Run the initiation for a start. After that, place all your future blog - posts, written in markdown (.md or .markdown), in the draft folder." - echo - echo "Once you publish your blog, all the drafts in the said folder will be - converted to html, added to the posts folder and append to the index.html" - echo - echo "To remove a post, just remove it from the draft folder and republish - your blog" - echo - echo "blog usage :" - echo " -h Display this help" - echo " -i initiate the blog" - echo " -p publish the blog" - echo " -d delete the posts" - echo " -m change mode of the blog (dark or light)" - echo " -n change the name of the blog (not implemented yet)" - echo " -l change the language of the blog (not implemented yet)" -} - -while getopts ":ihpdm" opt; do - case ${opt} in - i ) - init - ;; - p ) - publish - ;; - h ) - usage - ;; - m ) - change_mode - ;; - d ) - delete_posts - ;; - \? ) - usage - ;; - : ) - usage - ;; - esac -done