summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.awk97
-rw-r--r--render.awk115
2 files changed, 212 insertions, 0 deletions
diff --git a/parse.awk b/parse.awk
new file mode 100644
index 0000000..fd6e3e7
--- /dev/null
+++ b/parse.awk
@@ -0,0 +1,97 @@
+BEGIN{
+ lnum=0;
+ cnum=0;
+ type="";
+ FS=":";
+ # category is an array of category data
+ delete category;
+ # link is an array of link data
+ delete link;
+
+ ### configurable variables
+ BASEDIR="./";
+ ROOTFILE="./lawn/index.gph";
+ ROOTSEL="/lawn/index.gph";
+ HOST="localhost";
+ PORT="1500";
+}
+
+function is_empty(a){
+ for (i in a)
+ return 0;
+ return 1;
+}
+
+function add_link(c){
+ lnum+=1;
+ for (k in c){
+ link[lnum,k]=c[k];
+ }
+}
+
+function add_category(c){
+ cnum+=1;
+ for (k in c){
+ category[cnum,k]=c[k];
+ }
+}
+
+
+function get_cur(cur){
+ #print "cur[Type]:", cur["Type"];
+ switch (cur["Type"]) {
+ case "": {
+ print "empty type -- skipping record";
+ return;
+ }
+ case "link": {
+ add_link(cur);
+ return;
+ }
+ case "category":{
+ add_category(cur);
+ return;
+ }
+ default: {
+ printf("invalid type: %s -- skipping\n", cur["Type"]) ;
+ return;
+ }
+ }
+}
+
+
+/^[A-Z][-a-zA-Z]+:/{
+
+ #print "Field:",$1,"-","Value:",$2
+ gsub(/^ +/,"",$2);
+ gsub(/ *$/,"",$2);
+ cur[$1]=$2;
+}
+
+/^[[:blank:]]*$/{
+ if (!is_empty(cur)){
+ get_cur(cur);
+ delete cur;
+ }
+ else{
+ print "cur is empty" > /dev/stderr
+ }
+}
+
+END{
+## for (i=1;i<=cnum;i++){
+## printf("[1%s|%s|%s|%s]\r\n", category[i,"LinkName"], category[i,"Selector"], \
+## category[i,"Host"], category[i,"Port"]);
+## }
+
+ render_init();
+ render_categories(category, cnum);
+ render_post_categories(category, cnum);
+ render_links(category, cnum, link, lnum);
+ render_finalise(category, cnum, link, lnum);
+ ##render_links(link, lnum, cfiles);
+ #for (k in cnames)
+ # print k, cnames[k];
+
+
+}
diff --git a/render.awk b/render.awk
new file mode 100644
index 0000000..db97f47
--- /dev/null
+++ b/render.awk
@@ -0,0 +1,115 @@
+
+function info_line(name, sel, host, port, dst){
+ printf("[i|%s|%s|%s|%s]\r\n", name, sel, host, port) > dst;
+}
+
+function show_link(l, i, dst){
+
+ if(l[i,"Category"] == "")
+ print "Uncategorised link:", l[i,"Selector"] > /dev/stderr;
+ else{
+ printf("[1|%s|%s|%s|%s]\r\n", l[i,"LinkName"], l[i,"Selector"], l[i,"Host"], l[i,"Port"] ) > dst;
+ info_line(l[i,"Description"],"Err", HOST, PORT, dst);
+ info_line("", "Err", HOST, PORT, dst);
+ }
+
+}
+
+
+function show_category_link(category, i, dst){
+ printf("[1|%s|%s|%s|%s]\r\n", category[i,"LinkName"], category[i,"Selector"], category[i,"Host"], category[i,"Port"]) > dst;
+}
+
+
+
+function get_parents(a){
+ delete pars;
+ split(a, pars, /[:blank:]*,[:blank:]*/);
+ for (k in pars){
+ gsub(/ +/, "", pars[k]);
+ #printf("%d: %s\n", k, pars[k]);
+ }
+
+}
+
+function category_in_parents(category, i){
+
+ get_parents(category[i,"Parent"]);
+ for (p in pars){
+ #printf("pars[%d]: %s\n", p, pars[p]);
+ if (pars[p]!="none"){### this is the root page
+ f = pars[p];
+ ##print "cfiles[pars[p]]:", cfiles[f];
+ show_category_link(category, i, cfiles[f]);
+ }
+ }
+}
+
+function category_header(category, i, dst){
+ info_line(category[i,"Title"], "Err", HOST, PORT, dst);
+ info_line("", "Err", HOST, PORT, dst);
+ info_line("Categories:", "Err", HOST, PORT, dst);
+}
+
+function get_link_categories(a){
+ delete cats;
+ split(a, cats, /[:blank:]*,[:blank:]*/);
+ for (k in cats){
+ gsub(/ +/, "", cats[k]);
+ }
+}
+
+########################################
+
+
+function render_init(){
+
+}
+
+
+function render_categories(category, cnum, link, lnum){
+ for (i=1; i<=cnum; i++){
+ cname=category[i,"Name"];
+ #print "'" cname "'";
+ cfiles[cname]=BASEDIR category[i,"Selector"];
+ #print cname ":" cfiles[cname];
+ cmd=sprintf("rm -f %s", cfiles[cname]);
+ system(cmd);
+ category_header(category, i, cfiles[cname]);
+ category_in_parents(category, i);
+ }
+}
+
+function render_post_categories(category, cnum){
+
+ for(i=1;i<=cnum; i++){
+ info_line("_______________", "Err", HOST, PORT, cfiles[category[i,"Name"]]);
+ info_line("Links:", "Err", HOST, PORT, cfiles[category[i,"Name"]]);
+ }
+
+}
+
+
+function render_links(category, cnum, link, lnum){
+
+ for (i=1;i<=lnum;i++){
+ get_link_categories(link[i,"Category"]);
+ for (c in cats){
+ if (cfiles[cats[c]]!=""){
+ show_link(link, i, cfiles[cats[c]]);
+ }
+ }
+ }
+}
+
+
+function render_finalise(category, cnum, link, lnum){
+
+ for(i=1;i<=cnum; i++){
+ info_line("_______________", "Err", HOST, PORT, cfiles[category[i,"Name"]]);
+ printf("[1|%s|%s|%s|%s]\r\n", "Back to the lawn", ROOTSEL, HOST, PORT ) > cfiles[category[i,"Name"]];
+ info_line("Links:", "Err", HOST, PORT, cfiles[category[i,"Name"]]);
+ }
+
+
+}