2014-09-15 23:24:10 -05:00
#!/usr/bin/env bash
# Author: Zhang Huangbin <zhb _at_ iredmail.org>
# Purpose: Convert markdown articles to HTML files.
2014-09-15 22:05:36 -05:00
2016-04-21 23:33:25 -05:00
export ROOTDIR = " $( pwd ) "
export OUTPUT_DIR = " ${ ROOTDIR } /html "
2014-12-06 07:11:37 -06:00
2016-04-21 23:33:25 -05:00
# A temporary directory used to copy and modify markdown files, will be removed
# after all files were converted.
export TMP_DIR = " ${ OUTPUT_DIR } /tmp "
export CONVERTER = " ${ ROOTDIR } /tools/markdown2html.py "
export CMD_CONVERT = " python ${ CONVERTER } "
2017-05-24 21:40:20 -05:00
export CMD_CHECK_CHANGE = "hg st"
export CHANGED_FILES = " $( ${ CMD_CHECK_CHANGE } | grep '\.md$' ) "
2016-04-21 23:33:25 -05:00
export TODAY = " $( date +%Y-%m-%d) "
[ -d ${ OUTPUT_DIR } ] || mkdir -p ${ OUTPUT_DIR }
[ -d ${ TMP_DIR } ] || mkdir -p ${ TMP_DIR }
2014-09-15 23:34:01 -05:00
2014-09-15 22:05:36 -05:00
strip_name_prefix( )
{
name = " ${ 1 } "
name = " $( echo ${ name /# \. \/ / } ) " # ./filename
name = " $( echo ${ name /#[0-9][0-9][0-9]-/ } ) " # nnn-
name = " $( echo ${ name /#[0-9][0-9]-/ } ) " # nn-
name = " $( echo ${ name /#[0-9]-/ } ) " # n-
echo " ${ name } "
}
2015-07-12 00:51:26 -05:00
# Available translations
2016-05-11 08:45:55 -05:00
export all_languages = 'en_US it_IT lv_LV zh_CN'
2015-07-12 00:51:26 -05:00
2014-10-07 04:07:05 -05:00
# Chapter directories in specified order
2016-04-21 23:33:25 -05:00
export all_chapter_dirs = " overview \
installation \
mua \
upgrade \
migrations \
howto \
integrations \
cluster \
2016-12-17 09:39:20 -06:00
iredadmin \
2016-04-21 23:33:25 -05:00
troubleshooting \
faq"
2014-09-30 09:59:20 -05:00
2015-10-11 10:46:40 -05:00
# Additional directories which stores scripts or other non-Markdown files.
additional_dirs = ""
2015-03-25 06:36:46 -06:00
# Compile all Markdown files.
if echo " $@ " | grep -q -- '--all' & >/dev/null; then
compile_all = 'YES'
fi
2015-01-12 07:25:58 -06:00
article_counter = 0
2015-07-12 00:51:26 -05:00
for lang in ${ all_languages } ; do
2015-07-12 08:10:46 -05:00
src_dir = " ${ ROOTDIR } / ${ lang } "
2015-07-12 00:51:26 -05:00
if [ ! -d ${ src_dir } ] ; then
2017-05-24 21:40:20 -05:00
echo " * [SKIP] No translation for language: ${ lang } . "
2015-07-12 00:51:26 -05:00
break
2014-09-15 22:05:36 -05:00
fi
2017-07-03 08:24:02 -05:00
if [ X" ${ compile_all } " != X'YES' ] ; then
if ${ CMD_CHECK_CHANGE } | grep " ${ lang } / " & >/dev/null; then
echo " * Change found for language: ${ lang } . "
else
echo " * [SKIP] No change found for language: ${ lang } . "
continue
fi
2017-05-24 21:40:20 -05:00
fi
2016-10-21 10:53:31 -05:00
# Generate a Markdown file used to store index of chapters/articles.
2016-04-21 23:33:25 -05:00
if [ X" ${ lang } " = = X'en_US' ] ; then
2016-10-21 10:53:31 -05:00
INDEX_MD = " ${ OUTPUT_DIR } /index.md "
else
INDEX_MD = " ${ OUTPUT_DIR } /index- ${ lang } .md "
2016-04-21 23:33:25 -05:00
fi
cd ${ src_dir }
2014-12-03 21:11:39 -06:00
2016-10-21 10:53:31 -05:00
# Show different languages
2016-11-11 02:56:08 -06:00
echo -e '!!! note "Some tutorials have been translated to different languages. [Help translate more](https://bitbucket.org/zhb/iredmail-docs/src)"' > ${ INDEX_MD }
2016-10-21 10:53:31 -05:00
_md_lang = ''
for l in ${ all_languages } ; do
# Latvian has only one tutorial which is hidden due to file name starts
# with '0-'. So we hide this language temporarily.
if [ X" ${ l } " = = X'lv_LV' ] ; then
continue
2016-04-21 23:33:25 -05:00
fi
2016-10-21 10:53:31 -05:00
if [ X" ${ l } " != X" ${ lang } " ] ; then
if [ X" ${ l } " = = X'en_US' ] ; then
_md_lang = " ${ _md_lang } [ $( cat ${ ROOTDIR } /${ l } /_lang.md) ](./index.html) / "
else
_md_lang = " ${ _md_lang } [ $( cat ${ ROOTDIR } /${ l } /_lang.md) ](./index- ${ l } .html) / "
fi
fi
done
echo -e " \t ${ _md_lang } \n " >> ${ INDEX_MD }
2016-10-21 11:07:17 -05:00
unset _md_lang
2016-10-21 10:53:31 -05:00
# Initial index file.
if [ -f ${ src_dir } /_title.md ] ; then
cat ${ src_dir } /_title.md >> ${ INDEX_MD }
2015-07-12 00:51:26 -05:00
fi
2014-12-04 07:05:29 -06:00
2015-07-12 01:13:08 -05:00
# Used for prettier printing
break_line = 'NO'
2015-07-12 00:51:26 -05:00
# Get chapter info
# - chapter summary: _summary.md
# - article title: _title.md
for chapter_dir in ${ all_chapter_dirs } ; do
2015-07-12 01:13:08 -05:00
if [ ! -d ${ chapter_dir } ] ; then
2015-08-13 10:08:13 -05:00
continue
2015-07-12 01:13:08 -05:00
fi
2015-07-12 00:51:26 -05:00
# Get articles
2016-06-14 09:49:19 -05:00
all_chapter_articles = " $( find ${ chapter_dir } -type f -iname '[0-9a-z]*.md' ) "
2015-07-12 00:51:26 -05:00
# Output directory.
# Remove prefix '[number]-' in chapter directory name.
#chapter_dir_in_article="$(strip_name_prefix ${chapter_dir})"
#_output_chapter_dir="${OUTPUT_DIR}/${chapter_dir_in_article}"
# Get chapter title.
_title_md = " ${ chapter_dir } /_title.md "
_summary_md = " ${ chapter_dir } /_summary.md "
2016-10-21 10:53:31 -05:00
if [ -f ${ _title_md } ] ; then
# generate index info of chapter
_chapter_title = " $( cat ${ _title_md } ) "
echo -e " ### ${ _chapter_title } " >> ${ INDEX_MD }
2015-07-12 00:51:26 -05:00
2016-10-21 10:53:31 -05:00
if [ -f ${ _summary_md } ] ; then
echo '' >> ${ INDEX_MD }
cat ${ _summary_md } >> ${ INDEX_MD }
2015-07-12 00:51:26 -05:00
2016-10-21 10:53:31 -05:00
# Insert an empty line to not mess up other formats like list.
echo '' >> ${ INDEX_MD }
2015-07-12 00:51:26 -05:00
fi
2014-12-03 08:11:32 -06:00
fi
2014-09-15 22:05:36 -05:00
2015-07-12 00:51:26 -05:00
for article_file in ${ all_chapter_articles } ; do
article_counter = " $(( article_counter+1)) "
article_file_basename = " $( basename ${ article_file } ) "
2016-04-21 23:33:25 -05:00
article_html_file_orig = " $( strip_name_prefix ${ article_file_basename } ) "
2016-10-21 11:07:17 -05:00
# Replace '.md' suffix by '-<lang>.html'
2016-04-21 23:33:25 -05:00
if [ X" ${ lang } " = = X'en_US' ] ; then
article_html_file = " $( echo ${ article_html_file_orig /%.md/.html } ) "
else
article_html_file = " $( echo ${ article_html_file_orig /%.md/- ${ lang } .html } ) "
fi
2015-07-12 00:51:26 -05:00
hide_article_in_index = 'NO'
if echo " ${ article_file_basename } " | grep '^0-' & >/dev/null; then
hide_article_in_index = 'YES'
fi
2016-10-21 11:07:17 -05:00
# Get first line (without the leading '# ') as article title
2015-07-12 00:51:26 -05:00
_article_title = " $( head -1 ${ article_file } | awk -F'# ' '{print $2}' ) "
2016-02-25 20:47:45 -06:00
2015-12-13 08:10:41 -06:00
#
# Get title in markdown file: 'Title: title'
#_article_title="$(grep '^Title: ' ${article_file} | head -1 | awk -F'Title: ' '{print $2}')"
#
# Get title in markdown file: '<h1>title</h1>'
#_article_title="$(head -1 ${article_file} | awk -F'[<|>]' '{print $3}')"
2015-07-12 00:51:26 -05:00
2016-10-21 10:53:31 -05:00
if [ X" ${ hide_article_in_index } " = = X'NO' ] ; then
2015-07-12 00:51:26 -05:00
echo " * [ ${ _article_title } ]( ${ article_html_file } ) " >> ${ INDEX_MD }
fi
# Convert modified file
echo ${ CHANGED_FILES } | grep ${ article_file } & > /dev/null
compile_this_file = " $? "
if [ X" ${ compile_this_file } " = = X'0' -o X" ${ compile_all } " = = X'YES' ] ; then
if [ X" ${ break_line } " = = X'YES' ] ; then
echo -en " * Converting (# ${ article_counter } ): ${ lang } / ${ article_file } "
else
echo -en " \n* Converting (# ${ article_counter } ): ${ lang } / ${ article_file } "
fi
2016-04-21 23:33:25 -05:00
# * Detect same file in different languages
# * Modify markdown file to append a note paragraph to remind
# reader that current document has different language version.
translations = ''
for tlang in ${ all_languages } ; do
if [ X" ${ tlang } " != X" ${ lang } " ] ; then
if [ -f ${ ROOTDIR } /${ tlang } /${ chapter_dir } /${ article_file_basename } ] ; then
translations = " ${ translations } ${ tlang } "
fi
fi
done
# Has translation(s).
md_src = " ${ article_file } "
if echo ${ translations } | grep '_' & >/dev/null; then
tmp_md_orig = " ${ TMP_DIR } / ${ article_file_basename } - ${ lang } "
tmp_md = " ${ TMP_DIR } / ${ article_file_basename } "
cp -f ${ article_file } ${ tmp_md_orig }
# Generate new markdown file
# Get title line
_title_line = " $( head -1 ${ tmp_md_orig } ) "
# Remove title line
perl -pi -e 's#${_title_line}##' ${ tmp_md_orig }
echo -e " ${ title_line } \n\n " > ${ tmp_md }
2016-11-11 02:56:08 -06:00
echo -e '!!! note "This tutorial is available in other languages. [Help translate more](https://bitbucket.org/zhb/iredmail-docs/src)"\n\n' >> ${ tmp_md }
2016-04-21 23:33:25 -05:00
2016-04-22 00:13:31 -05:00
_md_l = '\t'
2016-04-21 23:33:25 -05:00
for l in ${ translations } ; do
2016-04-22 00:13:31 -05:00
if [ X" ${ l } " = = X'en_US' ] ; then
tmp_article_html_file = " $( echo ${ article_html_file_orig /%.md/.html } ) "
else
tmp_article_html_file = " $( echo ${ article_html_file_orig /%.md/- ${ l } .html } ) "
fi
2016-04-23 08:57:42 -05:00
_md_l = " ${ _md_l } [ $( cat ${ ROOTDIR } /${ l } /_lang.md) ](./ ${ tmp_article_html_file } ) / "
2016-04-21 23:33:25 -05:00
done
2016-04-22 00:13:31 -05:00
echo -e " ${ _md_l } \n " >> ${ tmp_md }
2016-04-21 23:33:25 -05:00
cat ${ tmp_md_orig } >> ${ tmp_md }
md_src = " ${ tmp_md } "
rm -f ${ tmp_md_orig }
fi
2015-07-12 00:51:26 -05:00
# Convert
2016-04-21 23:33:25 -05:00
${ CMD_CONVERT } ${ md_src } \
2015-07-12 00:51:26 -05:00
${ OUTPUT_DIR } \
output_filename = " ${ article_html_file } " \
title = " ${ _article_title } " \
2016-04-21 23:33:25 -05:00
add_index_link = 'yes'
2015-07-12 00:51:26 -05:00
if [ X" $? " = = X'0' ] ; then
echo -e ' [DONE]'
else
echo -e ' <<< FAILED >>>'
fi
break_line = 'YES'
else
echo -n '.'
break_line = 'NO'
fi
done
# Append addition links at the chapter bottom on index page.
2016-10-21 10:53:31 -05:00
_links_md = " ${ chapter_dir } /_links.md "
if [ -f ${ _links_md } ] ; then
echo '' >> ${ INDEX_MD }
cat ${ _links_md } >> ${ INDEX_MD }
echo '' >> ${ INDEX_MD }
2015-02-01 02:15:03 -06:00
fi
2014-09-15 22:05:36 -05:00
done
2015-10-11 10:46:40 -05:00
# Copy additional directories.
for d in ${ additional_dirs } ; do
cp -rf ${ d } ${ OUTPUT_DIR } & >/dev/null
done
2015-07-12 01:13:08 -05:00
echo ''
echo " * ${ article_counter } files total for ${ lang } . "
2014-09-15 22:05:36 -05:00
2016-10-21 10:53:31 -05:00
echo " * Converting ${ INDEX_MD } for index page. "
${ CMD_CONVERT } ${ INDEX_MD } ${ OUTPUT_DIR } title = "iRedMail Documentations"
2016-04-21 23:33:25 -05:00
2016-10-21 10:53:31 -05:00
# Cleanup and reset variables
rm -f ${ INDEX_MD }
2014-09-15 22:05:36 -05:00
2015-07-12 01:13:08 -05:00
article_counter = 0
done
2014-09-30 10:13:21 -05:00
2016-04-21 23:33:25 -05:00
rm -rf ${ TMP_DIR } & >/dev/null
2014-10-07 05:19:13 -05:00
# Sync newly generated HTML files to local diretories.
if echo " $@ " | grep -q -- '--sync-local' ; then
# Copy to local hg repo of http://www.iredmail.org/docs/
2014-12-03 21:11:39 -06:00
echo "* Syncing converted HTML files."
2014-10-07 05:19:13 -05:00
rm -rf ../web/docs/*
2015-07-12 00:51:26 -05:00
cp -rf ${ ROOTDIR } /html/* ${ ROOTDIR } /../web/docs/
2016-05-15 21:18:14 -05:00
cp -rf ${ ROOTDIR } /html/images/* ${ ROOTDIR } /../web/docs/images/
2014-10-07 05:19:13 -05:00
fi
2015-07-29 21:16:31 -05:00
# Show changed files.
echo "* Changed files:"
2015-08-12 20:10:35 -05:00
echo "---------------"
2017-05-24 21:40:20 -05:00
${ CMD_CHECK_CHANGE }
2015-08-12 20:10:35 -05:00
echo "---------------"