#!/bin/bash


function ucase
{
    echo "$1" | tr '[:lower:]' '[:upper:]'
}


function lcase
{
    echo "$1" | tr '[:upper:]' '[:lower:]'
}


function alphaindex
{
    alpha="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
    TMPFILE=$(mktemp -t $(basename $0).XXXXXX) || exit 1
    sort -d -f >> $TMPFILE
    for a in $alpha; do
        echo -n "[$a](#$(lcase "$a")) "
    done
    echo
    echo
    for a in $alpha; do
        links=$(cat $TMPFILE | grep -i "^- .[$(lcase "$a")]")
        if [ "$links" != "" ]; then
            echo "### $(ucase "$a")"
            echo "$links"
            echo
        fi
    done
    rm -f $TMPFILE
}


function constlist
{
    sed 's/([^)]*)//g' | sed 's/[^a-zA-Z0-9_.:$]//g' | awk -F ':' '{printf "- [%s](%s#%s) (in %s)\n", $3, $1, $3, $1}'
}
 
function constlist2
{
    sed 's/ *=.*$//' | sed 's/[^a-zA-Z0-9_.:$]//g' | awk -F ':' '{printf "- [%s](%s#%s) (in %s)\n", $2, $1, $2, $1}'
}
 

function funclist
{
    sed 's/([^)]*)//g' | sed 's/[^a-zA-Z0-9_.:$]//g' | awk -F ':' '{printf "- [%s()](%s#%s) (in %s)\n", $3, $1, $3, $1}'
}


(
    echo "## Belfry OpenScad Library Index"
    (
    	(
	    grep 'Constant: ' *.scad | constlist
	    grep '^[A-Z]* *=.*//' *.scad | constlist2
	) | sort -u
        egrep 'Function: |Function&Module: |Module: ' *.scad | sort -u | funclist
    ) | sort | alphaindex
) > BOSL2.wiki/Index.md