summaryrefslogtreecommitdiff
path: root/doc/examples/WWW/m4lib/visions.m4
diff options
context:
space:
mode:
Diffstat (limited to 'doc/examples/WWW/m4lib/visions.m4')
-rw-r--r--doc/examples/WWW/m4lib/visions.m4232
1 files changed, 232 insertions, 0 deletions
diff --git a/doc/examples/WWW/m4lib/visions.m4 b/doc/examples/WWW/m4lib/visions.m4
new file mode 100644
index 00000000..ba238ca9
--- /dev/null
+++ b/doc/examples/WWW/m4lib/visions.m4
@@ -0,0 +1,232 @@
+include(`setup.m4')
+
+\set_author([René Seindal])
+\set_title([The Road Ahead])
+
+\define([originator],
+[\p([Idea contributed by [$1]]\ifelse($#, 2, [ (\mailto([$2]))])[.])])
+
+\define([noone], [\p([There is no-one working on this now. Do you want
+to <A HREF="mailto:m4-feedback@seindal.dk?subject=GNU m4: \defn([_item])" >volunteer</A>?])])
+
+
+\define([done], [\p([Done in version 1.4$1])])
+
+
+\divert(1)
+\h2([Ideas for future versions of GNU m4])
+
+\p([Here are some ideas and suggestion for the future of GNU m4, large
+and small. The order here is fairly random.])
+
+\ul([
+
+\item([guile], [Guile as an extension language],
+
+[\p([\link([http://www.red-bean.com/guile/], [Guile]) can be used as an
+extension language so complicated macros can be written in Scheme while
+still maintaining the m4 interface. It will require some changes to the
+base code, as guile cannot be used from a module.])
+
+\noone <!-- \originator([René Seindal], [rene@seindal]) -->
+])
+
+
+\item([utf8], [UTF-8 or wide characters],
+
+[\p([GNU m4 should be able to handle UTF-8 input or wide characters so
+it can be more usable for different environments.])
+
+\noone <!-- \originator([François Pinard]) -->
+])
+
+
+\item([pquote], [Syntax: persistent quotes],
+
+[\p([Persistent quotes is a way of getting text unharmed through m4's
+processing. While normal quotes are stripped when a quoted string is
+read, the persistent quotes are removed just before being output. This
+will ensure that the quoted text is always output verbatim.])
+
+\p([The bulk of the changes will be in the parser (in input.c function
+next_token). Persistent quotes cannot be nested, they must balance
+within a normally quoted string, but normal quotes need not balance
+within persistent quotes (neither within persistent quotes within normal
+quotes). The quotes should be removed before being shipped out (in
+macro.c).])
+
+\noone <!-- \originator([Keith Bostic]) -->
+])
+
+
+
+
+\item([comment2], [Syntax: removable comments],
+
+[\p([With the syntax table a category for discardable comments can be
+defined, causing that type of comments to be discarded.])
+
+\noone
+])
+
+
+
+
+\item([comment1], [Option: remove comments],
+
+[\p([There should be an option (--discard-comments) to get m4 to discard
+comments instead of passing them to the output.])
+
+\done(n)
+])
+
+
+
+\item([deps], [Option: show dependencies],
+
+[\p([There should be an options to generate makefile dependencies for an
+M4 input file.])
+
+\p([It is not enough to scan the files for includes, as file names can
+be generated and builtins renamed. To make it work, m4 will have to do
+a complete run of the input file, discard the output and print the
+dependencies instead.])
+
+\p([It cannot be made to work in all cases when input file names are
+generated on the fly.])
+
+\noone <!-- \originator([Erick Branderhorst]) -->
+])
+
+
+\item([safer], [Option: render GNU m4 safer],
+
+[\p([There should be a --safer option that disables all functions, that
+could compromise system security if used by root. It will have to
+include various functions, such as file inclusion, sub shells, module
+loading, ...])
+
+\noone <!-- \originator([Santiago Vila]) -->
+])
+
+
+
+\item([import], [Option: import environment],
+
+[\p([An option to defined each environment variable as a macro on
+startup would be useful in many cases.])
+
+\done(n) <!-- \originator([René Seindal]) -->
+])
+
+
+
+\item([m4expand], [Builtin: quote expanded text],
+
+[\p([A builtin to quote expanded text would be useful. Now it is not
+possible to quote the expansion of a macro; the macro itself has to
+provide the quotes. Some builtins return quoted strings, others
+don't.])
+
+\p([A possible solution is a build in macro that takes one argument. It
+expands this argument fully and returns the quoted expansion.])
+
+\p([It will require changes to input handling and macro expansion code.])
+
+\noone <!-- \originator([Axel Boldt]) -->
+])
+
+
+
+\item([perl], [Module: embedded perl],
+
+[\p([Perl could be embedded in m4, giving users a powerful programming
+language for writing macros. A single builtin "perleval" could do the
+job. First argument could be a perl function and the rest arguments.
+The return value of the function as a string would be the expansion.])
+
+\p([The perl interpreter should be set up when the module is loaded and
+closed down before m4 exits, using the appropriate hooks in the module
+interface.])
+
+\p([A perl module could potentially give users access to any facility
+perl has access to, such as databases.])
+
+\p([On systems with perl compiled as a shared library the size penalty
+would be minimal.])
+
+\p([(It might not be workable as a module, as it will need to link with non-shared libraries. Don't know how it can be fixed. (RS))])
+
+\noone <!-- \originator([René Seindal]) -->
+])
+
+
+
+\item([output], [Module: better output control],
+
+[\p([It has been suggested a couple of times that it should be possible
+to divert to named files, in order to create several output files.])
+
+\p([I think this a bit a misunderstanding. Diversion are inteded to be
+brought back later, ie, they are temporary and recoverable. Output
+text, on the other hand, once output it is lost (for m4). Therefore
+better output control should be made in a different way.])
+
+\p([My suggestion is a set of builtins defined by a module:])
+
+\pre([setoutput(file)
+appendoutput(file)
+pipeoutput(command)])
+
+\p([With these output can be directed better, diversion can be sent to
+different files, and groups of files can be built by a single m4 run.
+Calling \tt(setoutput) without arguments should resume output to
+standard output.])
+
+\p([(Admittedly, diversion 0 (standard output) has always been
+different, as it cannot be undiverted.)])
+
+\noone <!-- \originator([René Seindal]) -->
+])
+
+
+
+\item([require], [Module: require/provide functionality],
+
+[\p([Two new builtins \tt(require) and \tt(provide) could provide a
+handy interface to include. It has proven difficult to write these
+robustly as normal macros. As an example, the files \tt(test.m4) and
+\tt(../test.m4) could be the same file or different files depending on
+the search path.])
+
+\noone <!-- \originator([Terry Jones]) -->
+])
+
+
+])
+
+
+
+\p([See also the \link(todo.htm, TODO) file.])
+
+\print_items
+
+
+
+\divert(0)\dnl
+\DO_LAYOUT([\undivert(1)])
+\divert(-1)
+
+\divert(3)saljdfnaskdjfndsa\divert(-1)
+
+
+
+
+\item([], [],
+
+[\p([])
+
+\noone
+])
+
+\undivert