summaryrefslogtreecommitdiff
path: root/www/aws-demos/files/templates.tads
diff options
context:
space:
mode:
Diffstat (limited to 'www/aws-demos/files/templates.tads')
-rw-r--r--www/aws-demos/files/templates.tads264
1 files changed, 264 insertions, 0 deletions
diff --git a/www/aws-demos/files/templates.tads b/www/aws-demos/files/templates.tads
new file mode 100644
index 000000000000..6691d4b43161
--- /dev/null
+++ b/www/aws-demos/files/templates.tads
@@ -0,0 +1,264 @@
+@@-- This template is intended as a model of how to generate an Ada package
+@@-- describing all the variables used in a set of AWS templates.
+@@-- These Ada packages can then be used in your application to avoid
+@@-- hard-coded strings, and help maintain the templates and the code to
+@@-- parse them in sync.
+@@--
+@@-- This template contains two possible behaviors, chosen through the
+@@-- following variable:
+@@SET@@ SINGLE_FILE = False
+@@-- If you set it to True, then a single Ada package with its nested
+@@-- packages is generated. If you set it to False, then the file generated
+@@-- should be further processed through gnatchop, to generate several
+@@-- Ada files organized into several files. This latter organization
+@@-- avoids recompiling all your source files every time at least one
+@@-- template changes.
+@@--
+@@-- The following variable should be changed to set the name of the
+@@-- generated packages.
+@@SET@@ PACKAGE = Templates
+@@--
+@@--
+@@-- When designing your own template for Ada packages, you should take
+@@-- into account that the variables in your templates might not necessarily
+@@-- be valid Ada identifier names, and you should therefore update the calls
+@@-- to @_REPLACE:..._@ below.
+@@--
+@@-- This template example also assumes a convention for Lazy_Tags. If you
+@@-- are using such types, they are generally shared among templates, and
+@@-- the Ada package should reflect that fact. Assuming all such tags start
+@@-- with the prefix LAZY_, we generate one special package for them, and
+@@-- omit them in all the other packages.
+@@--
+@@-- Likewise, the templates2ada tool will not generate tag entries for tags
+@@-- that are set through a @@SET@@ statement, since these are purely internal
+@@-- to your template file and have no impact on your source code.
+@@--
+@@-- For the best use of this tool, it is recommended that your template not
+@@-- use @@INCLUDE@@ statements, but instead use a tag, set in the Ada code
+@@-- to the preprocessed result of the same template file. This allows you to
+@@-- better control unset tags. For instance, instead of using:
+@@-- @@INCLUDE@@ foo.thtml
+@@-- use something like:
+@@-- @_BLOCK_FOO_@
+@@-- and in your Ada code set BLOCK_FOO to the result of Parse ("foo.thtml").
+@@--
+@@-- The templates2ada tool is able to generate constants for the HTTP
+@@-- parameters set in your page, so that you can process them in your Ada
+@@-- code. A few conventions must be followed, however:
+@@-- - The name should be on a single line, preceded by "name=", as in
+@@-- name="FOO"
+@@-- - The name should use only letters, underscores and digits, unless you
+@@-- enhance the regular expressions below to also remove other special
+@@-- characters.
+@@-- - In some cases, you must use a AWS tag in the name of an HTTP param,
+@@-- for instance for checkboxes for which names should be unique (or you
+@@-- won't know when the parameter is set to false). In this case, the
+@@-- tag must be at the beginning or end of the name, not in the middle.
+@@-- If there are multiple tags, they should be separated by non-letters,
+@@-- as in:
+@@-- name="PN_@_TAG1_@:@_TAG2_"
+@@-- In this case, the following constant is generated:
+@@-- PN_Prefix : constant String := "PN";
+@@-- - The name mustn't be only an AWS tag. The following is invalid:
+@@-- name="@_TAG_@"
+@@-- To avoid generating constants for <a name=..>, you must put the name
+@@-- attribute right after the "<a". templates2ada doesn't try to parse the
+@@-- HTML file, and doesn't know anything about HTML structure.
+@@--
+@@-- Some HTTP parameters can be specified as GET parameters. These can be
+@@-- documented directly in the templates with the following format:
+@@-- @@-- HTTP_GET(name): documentation
+@@-- and an entry will be generated for it.
+@@-- One additional special kind of comment that is recognized by this tool is
+@@-- @@-- HTTP_URL(url): documentation
+@@-- This indicates the typical URL(s) associated with that template, and will
+@@-- result in an additional string constant in the generated package, which
+@@-- can for instance be used when registering the URLs, or when redirecting
+@@-- the user to another URL.
+@@--
+@@-- If you combine the use of HTTP_GET and HTTP_URL, this can help ensure
+@@-- that any URL redirection you do through AWS.Response.URL is valid, if you
+@@-- use the generated constants. In addition, you could generate a
+@@-- template file (for instance using all_urls.thtml in this distribution)
+@@-- that can be included in other templates.
+@@--
+@@-- When a variable is removed from a template, your source code will no
+@@-- longer compile. When a variable is added, you get no compilation error.
+@@-- However, running "gnat xref -u" on your application will help detect
+@@-- unreferenced variables, and thus tags that are used in templates but
+@@-- never set in the code. For instance:
+@@-- gnat xref -Pproject -u main.adb | grep templates
+@@-- will list all unused template variables from the template packages that
+@@-- are currently in use by your application. Template packages that are not
+@@-- even withed will not appear in this listing, but can generally be found
+@@-- through appropriate grep commands.
+@@--
+@@-- The following tags are available in this template:
+@@-- @_VARIABLE_@: Matrix of variable names for the current template,
+@@-- sorted alphabetically
+@@-- @_FILENAME_@: Vector of template file names. The name contains
+@@-- directories relative to the directory given to
+@@-- templates2ada
+@@-- @_BASENAME_@: Same as @_FILENAME_@, but contains only the base
+@@-- names of files, with no extension.
+@@-- @_VARIABLE_LIST_@: List of all variables defined in all templates,
+@@-- sorted alphabetically
+@@-- @_INCLUDE_@: List of templates included by the current template.
+@@-- Names are the base name.
+@@-- @_HTTP_@: List of http parameters that can be returned by the
+@@-- current template, sorted alphabetically.
+@@-- @_FROM_GET_@: For each of the HTTP parameters above, this boolean
+@@-- indicates whether it was defined in a HTTP_GET
+@@-- comment as explained above.
+@@-- @_URL_@: List of urls that are associated with the current
+@@-- template, sorted alphabetically.
+@@-- @_AJAX_EVENT_@: Event name (onclick, onchange...), corresponding
+@@-- action in AJAX_ACTION.
+@@-- @_AJAX_ACTION_@ Action for the given AJAX_EVENT above.
+@@-- @_AJAX_FILE_@ File in which the corresponding action has been
+@@-- found.
+@@-- @_SET_VAR_@ Name of SET constants in the template
+@@-- Only variables with prefix SET_ are exported.
+@@-- @_SET_VAL@ Values of the above constants.
+@@--
+@@-- This templates is processed through the tool templates2ada
+@@--
+@@-- Possible enhancements:
+@@-- - Take into account @@IF@@ statements, and make sure that all
+@@-- needed variable in each branch is properly set. Hard to do.
+@@-- - Have a way to specify comments for the variable, probably as a
+@@-- special comment in the template files themselves.
+@@-- - Handling of @@INCLUDE@@: the tags defined in the included file
+@@-- be also included in the generated package for the template, so
+@@-- that we can detect missing definitions. However, this means that
+@@-- such tags will be duplicated in several places... It is generally
+@@-- simpler to avoid using @@INCLUDE@@ statements.
+@@-- We could also use child packages to represent them
+@@--
+-- DO NOT EDIT, THIS FILE HAS BEEN GENERATED
+package @_PACKAGE_@ is
+ pragma Style_Checks (Off);
+
+ package Lazy is
+ @@TABLE@@
+ @@IF@@ @_UPPER:SLICE(1..5):VARIABLE_LIST_@ = "LAZY_"
+ @_CAPITALIZE:REPLACE_ALL(__/_):VARIABLE_LIST_@ : constant String := "@_VARIABLE_LIST_@";
+ @@END_IF@@
+ @@END_TABLE@@
+ end Lazy;
+
+@@IF@@ @_SINGLE_FILE_@ = True
+@@TABLE@@
+ package @_CAPITALIZE:REPLACE_ALL(\./_):BASENAME_@ is
+ Template : constant String := "@_FILENAME_@";
+ @@TABLE@@@
+ @@IF@@ not @_IS_EMPTY:URL_@
+ @@IF@@ @_TABLE_LINE_@ = 1
+ URL : constant String := "@_URL_@";
+ @@ELSE@@
+ URL@_TABLE_LINE_@ : constant String := "@_URL_@";
+ @@END_IF@@
+ @@END_IF@@
+ @@END_TABLE@@
+
+ @@TABLE@@
+ @@IF@@ not @_IS_EMPTY:VARIABLE_@ and @_UPPER:SLICE(1..5):VARIABLE_@ /= "LAZY_"
+ @_CAPITALIZE:REPLACE_ALL(__/_):VARIABLE_@ : constant String := "@_VARIABLE_@";
+ @@END_IF@@
+ @@END_TABLE@@
+
+@@IF@@ @_EXIST:HTTP_@
+
+ package HTTP is
+ @@TABLE@@
+ @@IF@@ not @_IS_EMPTY:HTTP_@
+ @_CAPITALIZE:REPLACE_ALL(__/_):HTTP_@ : constant String := "@_HTTP_@";
+ @@END_IF@@
+ @@END_TABLE@@
+ end HTTP;
+@@END_IF@@
+@@IF@@ @_EXIST:SET_VAR_@
+
+ package Set is
+ @@TABLE@@
+ @_CAPITALIZE:REPLACE_ALL(__/_):SET_VAR_@ : constant String := "@_SET_VAL_@";
+ @@END_TABLE@@
+ end Set;
+@@END_IF@@
+@@IF@@ @_EXIST:AJAX_EVENT_@
+
+ package Ajax is
+ @@TABLE@@
+ @@IF@@ not @_IS_EMPTY:AJAX_EVENT_@
+ @_CAPITALIZE:AJAX_EVENT_@_@_CAPITALIZE:AJAX_ACTION_@ : constant String := "/@_AJAX_EVENT_@$@_AJAX_ACTION_@";
+ @@END_IF@@
+ @@END_TABLE@@
+ end Ajax;
+@@END_IF@@
+
+ end @_CAPITALIZE:REPLACE_ALL(\./_):BASENAME_@;
+
+@@END_TABLE@@
+@@END_IF@@
+end @_PACKAGE_@;
+
+@@IF@@ @_SINGLE_FILE_@ /= True
+@@TABLE@@
+@@-- @@TABLE@@
+@@-- @@IF@@ @_EXIST:INCLUDE_@
+@@-- with @_PACKAGE_@.@_CAPITALIZE:REPLACE_ALL(\./_):INCLUDE_@;
+@@-- @@END_IF@@
+@@-- @@END_TABLE@@
+-- DO NOT EDIT, THIS FILE HAS BEEN GENERATED
+package @_PACKAGE_@.@_CAPITALIZE:REPLACE_ALL(\./_):BASENAME_@ is
+ pragma Style_Checks (Off);
+
+ Template : constant String := "@_FILENAME_@";
+ @@TABLE@@@
+ @@IF@@ not @_IS_EMPTY:URL_@
+ @@IF@@ @_TABLE_LINE_@ = 1
+ URL : constant String := "@_URL_@";
+ @@ELSE@@
+ URL@_TABLE_LINE_@ : constant String := "@_URL_@";
+ @@END_IF@@
+ @@END_IF@@
+ @@END_TABLE@@
+
+ @@TABLE@@
+ @@IF@@ not @_IS_EMPTY:VARIABLE_@ and @_UPPER:SLICE(1..5):VARIABLE_@ /= "LAZY_"
+ @_CAPITALIZE:REPLACE_ALL(__/_):VARIABLE_@ : constant String := "@_VARIABLE_@";
+ @@END_IF@@
+ @@END_TABLE@@
+@@IF@@ @_EXIST:HTTP_@
+
+ package HTTP is
+ @@TABLE@@
+ @@IF@@ not @_IS_EMPTY:HTTP_@
+ @_CAPITALIZE:REPLACE_ALL(__/_):HTTP_@ : constant String := "@_HTTP_@";
+ @@END_IF@@
+ @@END_TABLE@@
+ end HTTP;
+@@END_IF@@
+@@IF@@ @_EXIST:SET_VAR_@
+
+ package Set is
+ @@TABLE@@
+ @_CAPITALIZE:REPLACE_ALL(__/_):SET_VAR_@ : constant String := "@_SET_VAL_@";
+ @@END_TABLE@@
+ end Set;
+@@END_IF@@
+@@IF@@ @_EXIST:AJAX_EVENT_@
+
+ package Ajax is
+ @@TABLE@@
+ @@IF@@ not @_IS_EMPTY:AJAX_EVENT_@
+ @_CAPITALIZE:AJAX_EVENT_@_@_CAPITALIZE:AJAX_ACTION_@ : constant String := "/@_AJAX_EVENT_@$@_AJAX_ACTION_@";
+ @@END_IF@@
+ @@END_TABLE@@
+ end Ajax;
+@@END_IF@@
+
+end @_PACKAGE_@.@_CAPITALIZE:REPLACE_ALL(\./_):BASENAME_@;
+@@END_TABLE@@
+@@END_IF@@