swx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #!/bin/sh
  2. # sw - suckless webframework - 2012 - MIT License - nibble <develsec.org>
  3. # swx - Modified by Thuban - 2016 - MIT License - <thuban@yeuxdelibad.net>
  4. VERSION=0.4
  5. preparebar() {
  6. # $1 - bar length
  7. # $2 - bar char
  8. barlen=$1
  9. barspaces=$(printf "%*s" "$1")
  10. barchars=$(printf "%*s" "$1" | tr ' ' "$2")
  11. }
  12. progressbar() {
  13. # $1 - number (-1 for clearing the bar)
  14. # $2 - max number
  15. if [ $1 -eq -1 ]; then
  16. printf "\r $barspaces\r"
  17. else
  18. barch=$(($1*barlen/$2))
  19. barsp=$((barlen-barch))
  20. printf "\r[%.${barch}s%.${barsp}s]\r" "$barchars" "$barspaces"
  21. fi
  22. }
  23. register() {
  24. echo $1 >> "$LOG"
  25. }
  26. isfresher() {
  27. if [ -z $(uname |grep "BSD") ]; then
  28. if [ ! -f "${2}" ]; then
  29. register "$1"
  30. return 0
  31. elif [ $(stat "${1}" -c %Y) -gt $(stat "${2}" -c %Y) ]; then
  32. return 0
  33. else
  34. return 1
  35. fi
  36. else
  37. if [ ! -f "${2}" ]; then
  38. register "$1"
  39. return 0
  40. elif [ $(stat -f %m "${1}") -gt $(stat -f %m "${2}") ]; then
  41. return 0
  42. else
  43. return 1
  44. fi
  45. fi
  46. }
  47. domenulist() {
  48. echo "<p>Pages présentes dans ce dossier :</p>"
  49. echo "<ul>"
  50. for f in $(ls $(dirname $1)/) ; do
  51. sw_filter $i && continue
  52. [ -n "$(echo $f | grep 'index.$EXT$')" ] && continue
  53. echo "<li><a href=\"$(echo $f | sed -e "s,$EXT$,.html,g") \">$(echo $f | sed -e 's/\..*$//' -e 's/_/ /g')</a></li>"
  54. done
  55. echo "</ul>"
  56. }
  57. sw_filter() {
  58. for b in $BL; do
  59. [ "$b" = "$1" ] && return 0
  60. done
  61. }
  62. sw_main() {
  63. if [ -z $(uname |grep "BSD") ]; then
  64. if [ $(stat "$1" -c %s) -eq 0 ]; then
  65. domenulist $1
  66. else
  67. $CONVERTER $1
  68. fi
  69. else
  70. if [ $(stat -f %z "$1") -eq 0 ]; then
  71. domenulist $1
  72. else
  73. $CONVERTER $1
  74. fi
  75. fi
  76. }
  77. sw_menu() {
  78. echo "<ul>"
  79. if [ "$(dirname $1)" != "$IDIR" ] ; then
  80. echo "<li><a $( [ -n "$(echo $1 | grep index$EXT)" ] && echo "class=\"thisPage\" ") href=\"./index.html\">.</a></li>"
  81. echo "<li><a href=\"../index.html\">..</a></li>"
  82. fi
  83. FILES=$(ls $(dirname $1) | sed -e "s,$EXT$,.html,g")
  84. INAME=$(basename "$(echo $1 | sed -e 's/\..*$//' -e 's/_/ /g')")
  85. for i in $FILES ; do
  86. sw_filter $i && continue
  87. NAME=$(echo $i | sed -e 's/\..*$//' -e 's/_/ /g')
  88. [ -n "$(echo $i | grep 'index.html$')" ] && continue
  89. #[ -z "$(echo $i | grep '\..*$')" ] && i="$i/index.html" # Pas d'extension : dossier
  90. echo "<li><a $( [ "$INAME" = "$NAME" ] && echo "class=\"thisPage\" ") href=\"$i\">$NAME</a></li>"
  91. done
  92. echo "</ul>"
  93. }
  94. sw_page() {
  95. PAGENAME=$(basename "$1" |sed -e 's/\..*$//' -e 's/_/ /g')
  96. DIRNAME=$(basename "$(dirname "$1" |sed -e 's/_/ /g')")
  97. # Header
  98. cat << _header_
  99. <!doctype html>
  100. <html>
  101. <head>
  102. <title>${DIRNAME} - ${PAGENAME} | ${TITLE}</title>
  103. $HEADER
  104. </head>
  105. <body>
  106. _header_
  107. echo "<main>"
  108. echo "$TOPTEMPLATE"
  109. sw_main $1
  110. echo "</main>"
  111. echo "$BOTTOMTEMPLATE"
  112. # Footer
  113. cat << _footer_
  114. <footer>
  115. ${FOOTER}
  116. </footer>
  117. </body>
  118. </html>
  119. _footer_
  120. }
  121. # Set input dir
  122. IDIR="$(echo $1 | sed -e 's,/*$,,')"
  123. if [ -z "$IDIR" ] || [ ! -d $IDIR ]; then
  124. echo "swx - version $VERSION"
  125. echo "Usage: swx [dir]"
  126. exit 1
  127. fi
  128. # Load config file
  129. echo "> Load configuration"
  130. if [ ! -f $PWD/swx.conf ]; then
  131. echo "Cannot find swx.conf in current directory"
  132. exit 1
  133. fi
  134. . $PWD/swx.conf
  135. echo "> Prepare output directory"
  136. # Setup output dir structure
  137. ODIR="$PWD/$(basename $IDIR).static"
  138. mkdir -p $ODIR
  139. # copy only if necessary
  140. echo "> Copying files"
  141. if [ -z $(uname |grep "BSD") ]; then
  142. cp -ur $IDIR/* $ODIR/
  143. else
  144. #rsync -av $IDIR/ $ODIR/
  145. cp -r $IDIR/* $ODIR/
  146. fi
  147. # remove .EXT files
  148. echo "> Removing useless files"
  149. find $ODIR -iname "*$EXT" -exec rm '{}' \;
  150. # Parse files
  151. echo "> Generating html pages"
  152. FILES=$(find $IDIR -iname "*$EXT" | sed -e 's,^\./,,')
  153. NB=$(echo $FILES | wc -w)
  154. COUNT=0
  155. preparebar 50 "#"
  156. for a in $FILES; do
  157. b="$(echo ${a%.*}.html | sed "s;$IDIR;$ODIR;g")"
  158. # process only new files
  159. isfresher "${a}" "${b}"
  160. if [ $? -eq 0 ]; then
  161. sw_page "${a}" > "${b}";
  162. fi
  163. # Progression
  164. #COUNT=$(expr $COUNT + 1)
  165. #PERC=$(expr $COUNT \* 100 / $NB )
  166. #if [ $PERC -eq 0 ]; then
  167. # PERC=1
  168. #fi
  169. progressbar $COUNT $NB
  170. #BAR=$(echo "$FULLBAR" | cut -b -$PERC)
  171. #echo -n "($COUNT/$NB) $PERC% |$BAR| \r"
  172. done
  173. echo "\n\n> Done! :)"
  174. exit 0