Annotation of OpenXM_contrib/pari-2.2/src/make_emacs_tags, Revision 1.1
1.1 ! noro 1: #!/bin/sh
! 2:
! 3: # Generate a tags file which contains PARI functions, and allows going
! 4: # to help-message for a PARI functions and to a PARI function of C function
! 5: # by repeated C-u M-.
! 6:
! 7: # If you are reading this, you may enjoy imenu-go.el from
! 8: # ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs/
! 9:
! 10: # Skip language/init.c, gp/gp_init.c and language/helpmessages.c:
! 11:
! 12: messages='language/helpmsg.c'
! 13: gp_init='gp/gp_init.c'
! 14: init_c='language/init.c'
! 15:
! 16: excluded=`perl -e 'print join "\n",
! 17: grep { $_ ne "'$init_c'"
! 18: and $_ ne "'$messages'"
! 19: and $_ ne "'$gp_init'" }
! 20: <*/*.[chs]>, <*/*/*.[chs]>'`
! 21:
! 22: etags $excluded
! 23:
! 24: # Process declarations like
! 25:
! 26: # {"polredord",1,(void*)ordred,6,"Gp"},
! 27:
! 28: # => an entry for polredord, and an entry for ordred as well
! 29: # (so that one may find which PARI function is implemented by the C one)
! 30:
! 31: re='[ \t]*{[ \t]*"\([a-zA-Z_0-9]+\)"[ \t]*,[ \t]*[0-9]+[ \t]*,[ \t]*([ \t]*void[ \t]*\*[ \t]*)[ \t]*\([a-zA-Z0-9+]+\)[ \t]*,'
! 32:
! 33: etags -a -l c -o TAGS.tmp -r "/$re/\\1/" -r "/$re/\\2/" $init_c
! 34:
! 35: # Process helpmessages too:
! 36: # "printtex(a): outputs a in TeX format",
! 37:
! 38: helpre='[ \t]*"\([a-zA-Z_0-9]+\)[=(]'
! 39:
! 40: etags -a -l c -o TAGS.tmp -r "/$re/\\1/" -r "/$re/\\2/" \
! 41: -r "/$helpre/\\1/" $gp_init
! 42:
! 43: etags -a -l c -o TAGS.tmp -r "/$helpre/\\1/" $messages
! 44:
! 45: # This would produces a wrong entry size - though AFAIK, nobody uses it
! 46: # uniq TAGS.tm >> TAGS
! 47:
! 48: perl -w014pe 'if (s/^(.*\n)\1+/$1/mg) { # Remove duplicate lines
! 49: $chars = chomp;
! 50: s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e;
! 51: $_ .= ("\f" x $chars);
! 52: }' TAGS.tmp > TAGS.tm2
! 53:
! 54: # Since we generate *specific* definitions for the functions in the table,
! 55: # they will be prefered by Emacs over non-specific ones for the code, so we
! 56: # convert non-specific definitions into specific ones (with \x1):
! 57:
! 58: perl -w014pe 'if (s/^( [^\n\x7F\x01]*\b # 1: TAG group
! 59: (\w+) # 2: word
! 60: [^\w\x7F\x01\n]* # Most anything
! 61: \x7F # End of description
! 62: )
! 63: (\d+,\d+\n) # 3: TAGS Trail
! 64: /$1$2\x01$3/mgx) { # Add specific marking
! 65: $chars = chomp;
! 66: s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e;
! 67: $_ .= ("\f" x $chars);
! 68: }' TAGS > TAGS.tm1 && mv TAGS.tm1 TAGS
! 69:
! 70: cat TAGS.tm2 >> TAGS
! 71: rm TAGS.tm*
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>