diff --git a/bin/controller.rc b/bin/controller.rc index 63c38b7..4dd6778 100755 --- a/bin/controller.rc +++ b/bin/controller.rc @@ -1,9 +1,10 @@ #!/usr/local/plan9/bin/rc - path=(. ./bin $PLAN9/bin /bin/ /usr/bin) -ifs='/' { args = `{ echo -n $REQUEST_URI | sed -e 's/[^a-zA-Z0-9_+\-\/]//g' -e 's/\?.*//' } } -args=`{echo $args | tr -d ' -'} + +uri = `{echo -n $REQUEST_URI | sed 's/\?.*//; s/[^a-zA-Z0-9_+\-\/]//g'} +ifs='/' { + args = `{echo -n $uri} +} cd .. @@ -21,83 +22,80 @@ sidebar=sidebar # Title fn gentitle { -echo '

'$"siteTitle' '$"siteSubTitle'

' + echo '

' ^ $"siteTitle ^ '' ^ $"siteSubTitle ^ '

' } +dirfilter = '/\/./d; /\/_[^\/]*$/d; s,^\./,,; s,\.md$,,;' + # Sidebar fn menu { - ls -F $1 | grep -v '/_[^/]*' | sed -e 's,^./,,' -e 's,\.md$,,' | awk ' + ls -F $1 | sed $dirfilter | awk -F/ ' BEGIN { print "" } - /^([a-zA-Z0-9+_\-]+[\/*]?)+$/ && ! /index$/ { + /^([a-zA-Z0-9+_\-]+[\/*]?)+$/ && $NF != "index" { isdir = match($0, "/$") - sub("[*/]$", "") # The '*' makes no sense to me - - d = "" - if(isdir) - d = "/" + + sub("[*/]$", "") + bname = $0 sub("^(.*/)?([0-9]+_)?", "", bname) gsub("_", " ", bname) - bname = bname d + if(isdir) { + bname = bname "/" + path = $0 "/" + } - if(index(ENVIRON["REQUEST_URI"], "/" $0) == 1) { + if(index(ENVIRON["REQUEST_URI"], "/" path) == 1) { if(isdir) { - print "
  • » " bname "" - system("rc -c ''menu " $0 "''") + print "
  • » " bname "" + system("rc -c ''menu " path "''") } else { - print "
  • » " bname "" + print "
  • » " bname "" } } else - print "
  • › " bname "" + print "
  • › " bname "" print "
  • " - }' - } fn gensidebar { - d=`{pwd} - cd $sitedir - menu . - cd $d + @{ + cd $sitedir + menu . + } } fn sortedBlogPostList { + # the /./ is added so we can sort -t. and order only the file name ls $*^'/./' | grep '[0-9]+.*\.md$'| sort -r -t. +1 } # Body fn genbody { - if ( test -f $"body^'.md' ) { - cat $"body^'.md' | markdown.pl - } - if not if ( test -f $"body^'.tpl' ) - template.awk $"body^'.tpl' | rc - if not { - if ( ~ $#blogDirs 0 ) { - if ( ~ $body */index ) { - echo '

    ' `{basename `{basename -d $body}}'

    ' - echo '' - } - if not { template.awk inc/404.tpl | rc } - } + if ( test -f $body.md ) + markdown.pl < $body.md + if not if ( test -f $body.tpl ) + template.awk $body.tpl | rc + if not if(~ $body */index && ~ $#blogDirs 0) { + echo '

    ' `{basename `{basename -d $body}}'

    ' + echo '' } - - if (! ~ $#blogDirs 0 && ~ $body */index ) { - if ( ! ~ $#blogTitle 0 ) + if not + template.awk inc/404.tpl | rc + + # Technically wrong. Will spit out blog entries after 404 for /blog/foo, for instance. + if(! ~ $#blogDirs 0) { + if ( ! ~ $blogTitle '' ) echo '

    '$"blogTitle'

    ' - # the /./ is added so we can sort -t. and order only the file name - for ( i in `{ sortedBlogPostList $blogDirs } ) { - t=`{basename $i|sed -e 's/^[0-9\-]*_(.*)\.md$/\1/' -e 's/_/ /g' } - du=`{ls -l $i } - #echo '

    ' $"t 'by '$"$du(4)' (Last mod: '$du(7) $du(8) $du(9)')

    ' - echo '## ' $"t '*(By '$du(4)' Last mod: ' ( $du(7 8 9) ) ')*' - cat $i + for ( f in `{ sortedBlogPostList $blogDirs } ) { + title=`{basename $f | sed 's/^[0-9\-]*_(.*)\.md$/\1/; s/_/ /g' } + du=`{ls -l $f} + echo '##' $title '*('By $du(4) Last mod: $du(7 8 9) ')*' + cat $f echo } | markdown.pl } @@ -106,33 +104,27 @@ fn genbody { . etc/initrc -if (! ~ $#args 0 && ! ~ $args '') { +if (! ~ $args '') { title=$args($#args) title=`{echo $title | sed 's/_/ /g' } - body=`{ echo -n $"args |sed 's, ,/,g' } + body=$uri } -l=$sitedir -for ( i in / $args ) { - l = $l'/'$i - if ( test -f $l/_config ) { - . $l/_config - } -} +fpath=$sitedir +for ( i in '' $args ) { + fpath = $fpath/$i + if ( test -f $fpath/_config ) + . $fpath/_config +} template=$sitedir/$template.tpl -if (! ~ $#sidebar 0) { sidebar=tpl/_inc/$sidebar.tpl } -if (test -d $sitedir/$body) { +echo body: $body; echo body: $sitedir/$body; ls $sitedir/$body +body=$sitedir/$body +if (! ~ $#sidebar 0) + sidebar=tpl/_inc/$sidebar.tpl +if (test -d $body) body=$body/index -} -body=`{echo $sitedir/^$"body | sed 's, ,/,' } +cat $headers $template | template.awk | rc -template.awk $headers | rc -template.awk $template | rc - - -# Debug junk -#echo '
    '
    -#env