summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/keywords.pl
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/keywords.pl
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/keywords.pl')
-rwxr-xr-xBuild/source/utils/asymptote/keywords.pl60
1 files changed, 60 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/keywords.pl b/Build/source/utils/asymptote/keywords.pl
new file mode 100755
index 00000000000..d3b48c5220c
--- /dev/null
+++ b/Build/source/utils/asymptote/keywords.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/env perl
+#####
+# keywords.pl
+# Andy Hammerlindl 2006/07/31
+#
+# Extract keywords from camp.l and list them in a keywords file. These
+# keywords are used in autocompletion at the interactive prompt.
+#####
+
+# Extra keywords to add that aren't automatically extracted, currently none.
+@extrawords = ();
+
+
+open(keywords, ">keywords.cc") ||
+ die("Couldn't open keywords.out for writing.");
+
+print keywords <<END;
+/*****
+ * This file is automatically generated by keywords.pl.
+ * Changes will be overwritten.
+ *****/
+
+END
+
+sub add {
+ print keywords "ADD(".$_[0].");\n";
+}
+
+foreach $word (@extrawords) {
+ add($word);
+}
+
+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.
+ }
+}
+
+# Grab simple keyword definitions from camp.l
+while (<camp>) {
+ if (/^%%\s*$/) {
+ last; # A second %% indicates the end of definitions.
+ }
+ if (/^([A-Za-z_][A-Za-z0-9_]*)\s*\{/) {
+ add($1);
+ }
+}
+
+# Grab the special commands from the interactive prompt.
+open(process, "process.cc") || dir("Couldn't open process.cc");
+
+while (<process>) {
+ if (/^\s*ADDCOMMAND\(\s*([A-Za-z_][A-Za-z0-9_]*),/) {
+ add($1);
+ }
+}
+