File: [local] / OpenXM_contrib / pari / src / Attic / make_emacs_tags (download)
Revision 1.1.1.1 (vendor branch), Sun Jan 9 17:35:30 2000 UTC (24 years, 8 months ago) by maekawa
Branch: PARI_GP
CVS Tags: maekawa-ipv6, VERSION_2_0_17_BETA, RELEASE_20000124, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2 Changes since 1.1: +0 -0
lines
Import PARI/GP 2.0.17 beta.
|
#!/bin/sh
# Generate a tags file which contains PARI functions, and allows going
# to help-message for a PARI functions and to a PARI function of C function
# by repeated C-u M-.
# If you are reading this, you may enjoy imenu-go.el from
# ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs/
# Skip language/init.c, gp/gp_init.c and language/helpmessages.c:
messages='language/helpmsg.c'
gp_init='gp/gp_init.c'
init_c='language/init.c'
excluded=`perl -e 'print join "\n",
grep { $_ ne "'$init_c'"
and $_ ne "'$messages'"
and $_ ne "'$gp_init'" }
<*/*.[chs]>, <*/*/*.[chs]>'`
etags $excluded
# Process declarations like
# {"polredord",1,(void*)ordred,6,"Gp"},
# => an entry for polredord, and an entry for ordred as well
# (so that one may find which PARI function is implemented by the C one)
re='[ \t]*{[ \t]*"\([a-zA-Z_0-9]+\)"[ \t]*,[ \t]*[0-9]+[ \t]*,[ \t]*([ \t]*void[ \t]*\*[ \t]*)[ \t]*\([a-zA-Z0-9+]+\)[ \t]*,'
etags -a -l c -o TAGS.tmp -r "/$re/\\1/" -r "/$re/\\2/" $init_c
# Process helpmessages too:
# "printtex(a): outputs a in TeX format",
helpre='[ \t]*"\([a-zA-Z_0-9]+\)[=(]'
etags -a -l c -o TAGS.tmp -r "/$re/\\1/" -r "/$re/\\2/" \
-r "/$helpre/\\1/" $gp_init
etags -a -l c -o TAGS.tmp -r "/$helpre/\\1/" $messages
# This would produces a wrong entry size - though AFAIK, nobody uses it
# uniq TAGS.tm >> TAGS
perl -w014pe 'if (s/^(.*\n)\1+/$1/mg) { # Remove duplicate lines
$chars = chomp;
s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e;
$_ .= ("\f" x $chars);
}' TAGS.tmp > TAGS.tm2
# Since we generate *specific* definitions for the functions in the table,
# they will be prefered by Emacs over non-specific ones for the code, so we
# convert non-specific definitions into specific ones (with \x1):
perl -w014pe 'if (s/^( [^\n\x7F\x01]*\b # 1: TAG group
(\w+) # 2: word
[^\w\x7F\x01\n]* # Most anything
\x7F # End of description
)
(\d+,\d+\n) # 3: TAGS Trail
/$1$2\x01$3/mgx) { # Add specific marking
$chars = chomp;
s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e;
$_ .= ("\f" x $chars);
}' TAGS > TAGS.tm1 && mv TAGS.tm1 TAGS
cat TAGS.tm2 >> TAGS
rm TAGS.tm*