#!/usr/bin/env perl ##### # asy-list.pl # # Build asy-keywords.el from list of asy global functions and variables # ##### open(keywords, "> asy-keywords.el") || die("Couldn't open asy-keywords.el for writing."); print keywords <<END; ;; ;; This file is automatically generated by asy-list.pl. ;; Changes will be overwritten. ;; (defvar asy-keywords-version "$ARGV[1]") END sub add { print keywords $_[0]." "; } sub openlist { open(asylist, $ARGV[0]) || die("Couldn't open $ARGV[0]"); } print keywords <<END; (defvar asy-keyword-name '( END open(camp, "camp.l") || die("Couldn't open camp.l"); # Search for the %% separator, after which the definitions start. while (<camp>) { if (/^%%\s*$/) { last; # Break out of the loop. } } while (<camp>) { if (/^%%\s*$/) { last; # A second %% indicates the end of definitions. } if (/^(\w+)\s*\{/) { add($1); } } openlist(); while (<asylist>) { if (/^(\w*)[^ ]* (\w*)\(.*/) { push @types, $1; push @functions, $2; } if (/^([^ ]*) (\w*);/) { push @variables, $2; } } @saw{@types} = (); @types = sort keys %saw; undef %saw; @saw{@functions} = (); @functions = sort keys %saw; undef %saw; @saw{@variables} = (); @variables = sort keys %saw; undef %saw; print keywords <<END; )) (defvar asy-type-name '( END foreach(@types) { print keywords $_ . " "; } print keywords <<END; )) (defvar asy-function-name '( END foreach(@functions) { print keywords $_ . " "; } print keywords <<END; )) (defvar asy-variable-name '( END foreach(@variables) { print keywords $_ . " "; } print keywords "))\n";