I'd like to submit the following for Gnu m4 documentation since it uses
regexp(), ifelse(),
and substr() recursively in an instructive fashion. This came up in the
PigIron Project <http://pigiron.sourceforge.net>
in autogenerating Java source code from strings cut-and-pasted from API
documentation.
---
The following example converts a string representing a programming
construct such as a function
from another programming language's conventional member_name class_name etc.
representation and makes it Java-conventional, e.g., ClassName or
memberName.
Recursion handles the "how many underscore-separated components?" problem.
# Uppercase a character
define(`upcase', `translit(`$*', `a-z', `A-Z')')
# lowercase a character
define(`lowcase', `translit(`$*', `A-Z', `a-z')')
# upcase first char
define(`upcase_initial',`upcase(substr(`$1',0,1))`'substr(`$1',1)')
# lowcase first char
define(`lowcase_initial',`lowcase(substr(`$1',0,1))`'substr(`$1',1)')
# Convert an xcc_xcc.. (etc.) to XccXcc...
define(`javaize_regexp',`^\(\w*\)_\(.*\)')
define(`javaize',`ifelse(regexp(`$1', javaize_regexp), `-1',
upcase_initial(`$1'), `regexp($1, javaize_regexp,
`javaize(`\1')`'upcase_initial(`\2')')')')
# Convert an xcc_xcc.. (etc.) to xccXcc...
define(`javaize_lc',`lowcase_initial(javaize(`$1'))')
javaize(`a_b_c')
=>ABC
javaize_lc(`a_b_c')
=>aBC
javaize(`imported_type_name_from_the_API')
=>ImportedTypeNameFromTheAPI
javaize_lc(`imported_member_name')
=>importedMemberName
--
Jack J. Woehr # "Self-delusion is
http://www.well.com/~jax # half the battle!"
http://www.softwoehr.com # - Zippy the Pinhead
_______________________________________________
m4-discuss mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/m4-discuss