"Fossies" - the Fresh Open Source Software Archive

Member "dacs-1.4.46/man/dacs_transform.8.man" (8 Jun 2021, 33826 Bytes) of package /linux/www/dacs-1.4.46.txz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "dacs_transform.8.man": 1.4.45_vs_1.4.46.

    1 DACS_TRANSFORM(8)          DACS Web Services Manual          DACS_TRANSFORM(8)
    2 
    3 
    4 
    5 NAME
    6        dacs_transform - rule-based document transformation
    7 
    8 SYNOPSIS
    9        dacs_transform [dacsoptions[1]]
   10 
   11 DESCRIPTION
   12        This web service is part of the DACS suite.
   13 
   14        dacs_transform can perform a variety of transformations on an original
   15        document to produce a new document. Transformations such as redaction,
   16        insertion, and replacement are available. What makes the program
   17        interesting is that any transformation can depend on a rule that is
   18        evaluated at run-time, allowing a new document to be tailored for a
   19        specific user or context.
   20 
   21        The program looks for embedded markup (meta-information) called
   22        directives in the input document. A directive specifies a conditional
   23        (rule-based) or unconditional operation that is evaluated at that point
   24        in the document to determine the output text that is to be interpolated
   25        into the program´s output. Text outside of a directive is copied
   26        verbatim to the program´s output.
   27 
   28        One application of this software is to produce different versions of
   29        documentation from the same input. For example, consider a requirement
   30        to produce technical documentation for a series of printers where the
   31        printers are substantially the same (their documentation shares a lot
   32        of the same text and graphics) but each model has unique features or
   33        capabilities. Instead of producing a single manual that describes all
   34        models, which makes the manual larger and more complicated than
   35        necessary, this software provides a convenient way to create
   36        model-specific documentation from the same input. This means that the
   37        documentation common to all printers is shared by all of the manuals,
   38        yet the manual for each printer is easily customized for the particular
   39        printer.
   40 
   41            Note
   42            •   dacs_transform is similar in concept or purpose to the Apache
   43                modules mod_include[2] and mod_rewrite[3]. It is not an Apache
   44                module, however, and can therefore be used with any web server,
   45                and provides rich, rule-based selection of regions for
   46                processing. It can be used in conjunction with
   47                mod_ext_filter[4]. It is also conceptually similar to languages
   48                like PHP[5] where ordinary content and special processing
   49                directives can be combined within a document.
   50 
   51            •   The dacstransform(1)[6] command provides similar functionality
   52                from the command line. The transform()[7] function is also
   53                available.
   54 
   55            •   dacs_transform and dacstransform can be particularly useful
   56                tools for generating both static and dynamic web pages from
   57                template files.
   58 
   59            •   For security reasons, access to dacs_transform is disabled by
   60                default. Some configuration capabilities and features expected
   61                in a production version have not been implemented. If there are
   62                multiple identities, only one identity (REMOTE_USER) is
   63                available during rule processing.
   64 
   65    Regions
   66        A directive delimits a region within the source document. A directive
   67        that is enabled processes its region in some way, otherwise the
   68        directive and its region are disabled and produce no output. Whether a
   69        directive is enabled or disabled depends on the DACS rule that is named
   70        in the directive. Zero-length regions (i.e., regions with no content)
   71        are allowed.
   72 
   73        The output that is produced by dacs_transform depends on input that is
   74        copied verbatim, the selection of regions in the original document, the
   75        document´s rules, region evaluation, and the context in which the rules
   76        are evaluated. Rules can not only inspect the requesting user´s
   77        identity (based on the environment variable REMOTE_USER), including
   78        roles (obtained from DACS_ROLES), they can employ C-like expressions
   79        and a variety of built-in functions (see dacs.exprs(5)[8]). Directives
   80        are not emitted as part of the transformed document.
   81 
   82        Every conditional region is given a name. With the exception of
   83        reserved names, region names have no particular significance to
   84        dacs_transform; they are simply attributes to which rules may refer.
   85        Each document will usually have one or more rules associated with it.
   86 
   87        For example, an author might assign a name representing a security
   88        level to each region in a document: public, secret, top-secret, and so
   89        on. For each of these security levels, a specified set of rules would
   90        be examined by dacs_transform to decide which identities are granted
   91        (or denied) access to the corresponding region. In this way, different
   92        users may be given different versions of the same source document; some
   93        users might not be able to view secret and top-secret content, other
   94        might be able to view all content.
   95 
   96        A document that combined text written in different languages might name
   97        regions English, French, Russian, and so on; the English regions might
   98        be enabled by dacs_transform based on the user´s DACS role or the
   99        user´s stored preference for that language. Another document might
  100        contain region names corresponding to time zones: PST, MST, EST, and so
  101        on. A rule might then require the time zone associated with the
  102        location corresponding to the user´s apparent IP address to match that
  103        of the region being tested. Or an audio stream or speech synthesis
  104        content might be automatically enabled if a user has a role that
  105        indicates she is visually impaired.
  106 
  107        At present, no facility is available to assist with working with
  108        meta-information. It must either be added manually or generated by an
  109        application that understands how to insert meta-information in its
  110        output.
  111 
  112        Directive and Attribute Syntax
  113            In an HTML document served by dacs_transform, a region consists of
  114            a single directive or is delimited by a pair of directives. All
  115            other document content is ignored with respect to transformation.
  116            By default, directives are contained within HTML-style comments and
  117            the start of a directive is indicated by a line having the initial
  118            nine characters "<!--DACS " and ending with the normal HTML
  119            end-of-comment syntax, "-->". Such a line is unlikely to occur in a
  120            document by accident, but the syntax is configurable[9].
  121 
  122                Note
  123                •   Whitespace is not ignored at the beginning or end of an
  124                    input line.
  125 
  126                •   Because the syntax for comments defined for HTML is also
  127                    acceptable in SGML and XML (and any similar markup language
  128                    that is based on SGML), dacs_transform can also work with
  129                    those documents.
  130 
  131                •   A directive cannot be "commented out" except by modifying
  132                    the line on which it occurs so that the directive will not
  133                    be recognized as such. That is, the context in which a
  134                    directive occurs with respect to the original document is
  135                    not considered by dacs_transform.
  136 
  137            A directive contains one or more attribute="value" pairs. Exactly
  138            one attribute name must be a directive name that indicates the
  139            operation to be performed. An attribute name must be a
  140            syntactically valid variable name[10]. The value must be enclosed
  141            in matching double quotes, single quotes, or backticks (decimal
  142            ASCII code 96). Backtick quotes are treated differently in that the
  143            enclosed string is evaluated as an expression[11]. Variables from
  144            the Env and Conf namespaces[12] are instantiated. The current
  145            directive´s attributes are accessible in the Attr namespace; these
  146            attribute values are unevaluated and quoted.
  147 
  148            This example input contains two regions:
  149 
  150                <!--DACS begin="English" -->
  151                Hello!
  152                <!--DACS end="English" -->
  153                <!--DACS begin="French" -->
  154                Bonjour!
  155                <!--DACS end="French" -->
  156 
  157 
  158                Note
  159                •   For all directives, the region name "*" is reserved and
  160                    indicates that the region should be enabled without
  161                    evaluating any rule. If an author wants to always insert
  162                    some text or an identification string, for instance, this
  163                    feature eliminates the need to create a rule that does
  164                    nothing other than return True.
  165 
  166                •   For all directives, a region name prefixed by the negation
  167                    operator[13] inverts the selection test.
  168 
  169                •   For all directives, regardless of the region name, an
  170                    attribute named "cond" may be provided. Its value is an
  171                    expression that must evaluate to True for the region to be
  172                    processed. If a rule also applies to the directive, both
  173                    the rule and the expression must grant access.
  174 
  175            Directive names, which are described below, are reserved and have
  176            special meaning to dacs_transform. Unrecognized attributes are
  177            ignored but can be referenced as arguments by rules. A given
  178            attribute cannot appear more than once within a directive. All
  179            attribute names are case-insensitive.
  180 
  181        Negation
  182            A region name prefixed by the negation operator ("!") indicates
  183            that the region should be enabled if the rule returns False and
  184            should be disabled if it returns True. Note that the negation
  185            character is not part of the region name. This syntax eliminates
  186            the need to write separate "if-true" and "if-false" versions of the
  187            same rule, although it is an inefficient substitute for an if/else
  188            construct.
  189 
  190            For example, if a document only has public and secret regions,
  191            instead of defining one rule for public regions and another for
  192            secret regions, an author might simply define a single rule to
  193            identify secret regions and use negation:
  194 
  195                <!--DACS begin="!secret" -->
  196                This is public stuff, not secret stuff.
  197                <!--DACS end="!secret" -->
  198 
  199 
  200        Recursion
  201            By default, content that is included during processing of an
  202            insert, insertv, or expand directive is recursively processed for
  203            directives. Recursion may be disabled on a case-by-case basis by
  204            specifying the recurse attribute with a value of "no" (case
  205            insensitively). It may also be explicitly enabled by specifying the
  206            attribute value "yes" (case insensitively).
  207 
  208            A maximum stack depth is imposed, primarily to guard against
  209            infinite recursion. This limit is currently set to 100 at compile
  210            time.
  211 
  212            Variables set by outer levels can be referenced by inner levels. If
  213            variables at different levels have the same name, however, only the
  214            innermost value is accessible.
  215 
  216        Directives
  217            Directive Index:
  218 
  219             1. begin: start a region
  220 
  221             2. debug: emit variables for debugging
  222 
  223             3. end: end a region
  224 
  225             4. expand: insert content and interpolate variables
  226 
  227             5. filter: transform content
  228 
  229             6. filterv: transform content, verbatim
  230 
  231             7. id: insert an identification string
  232 
  233             8. insert: insert content
  234 
  235             9. insertv: insert content, verbatim
  236 
  237            10. set: set or reset variables
  238 
  239            begin
  240                The begin directive starts a region with the specified name:
  241 
  242                    <!--DACS begin="secret" -->
  243 
  244                If the region above named secret is enabled, its content is
  245                included in the program´s output. Directives that appear in the
  246                region, including other begin directives, are processed.
  247                Variable references are not expanded; use the expand[14]
  248                directive to interpolate variable references. Every begin
  249                directive must have a matching end[15] directive.
  250 
  251                The region name (the value of the begin attribute) is
  252                accessible in rules using ${Args::region}.
  253 
  254            debug
  255                The debug directive can be helpful for understanding or
  256                debugging processing. It emits variables that exist at the
  257                point where an enabled debug directive is processed. This
  258                directive has no matching end directive; it is essentially a
  259                region with no content.
  260 
  261                By default, all variables in the Attrs, Conf, and DACS
  262                namespaces are emitted. The attribute name show can be set to
  263                Attrs, Conf, or DACS to restrict output to the particular
  264                namespace. The value all is equivalent to the default.
  265                Alternatively, the attribute name Attrs can be set to "yes" (or
  266                "no") to select (or deselect) the Attrs namespace. The same
  267                applies for the Conf and DACS attributes. These attribute names
  268                are case sensitive but their values are not.
  269 
  270                The emitted output is preceded by the directive prefix string
  271                in effect and followed by the directive suffix string in
  272                effect. It is assumed that no text is emitted in the debugging
  273                output that might accidentally be recognized as the suffix
  274                string.
  275 
  276            end
  277                The end of a region started by a begin[16], filter[17],
  278                filterv[18] or expand[14] directive is indicated using the end
  279                directive:
  280 
  281                    <!--DACS begin="secret" -->
  282                    This is some secret text.
  283                    <!--DACS end="secret" -->
  284 
  285                When properly balanced, regions can be nested.
  286 
  287            expand
  288                This directive expands variable references in inserted content.
  289                Also, text containing variable references may appear in the
  290                original content, delimited by an end directive.
  291 
  292                An expr, uri, or filename attribute may be used to specify the
  293                source of the input as with the insert[19] directive. Variable
  294                references in the text from these sources are expanded. If one
  295                of these attributes is not specified, the directive must be
  296                terminated by an end directive.
  297 
  298                Directives in the expanded text are recursively processed,
  299                modulo the recurse attribute (see Recursion[20]).
  300 
  301 
  302 
  303                    % cat inputfile
  304                    <!--DACS expand="*" -->
  305                    Nice dog, ${DACS::dog1}.
  306                    <!--DACS end="*" -->
  307                    Meow!
  308                    <!--DACS expand="*" cond="${DACS::dog3} eq:i ´bandito´" -->
  309                    Good boy, ${DACS::dog2}.
  310                    <!--DACS end="*" -->
  311                    % dacstransform -Ddog1=Auggie -Ddog2=Harley -Ddog3=Bandito < inputfile
  312                    Nice dog, Auggie.
  313                    Meow!
  314                    Good boy, Harley.
  315 
  316 
  317            filter
  318 
  319                    Note
  320                    This feature is only partially implemented. In the current
  321                    implementation, a filter directive must use the expr
  322                    operation and may not include another filter region.
  323                Original document content within a delimited region, if any, is
  324                replaced by new material using the filter directive. This
  325                directive must have a corresponding end directive. A newline is
  326                appended to the result; if this behaviour is undesirable, use
  327                filterv[18].
  328 
  329                Either the expr or uri operations must be specified.
  330 
  331                If an expr attribute is present, the original document content,
  332                including its final newline character, is passed to the given
  333                expression[11] as the value of the variable ${DACS::stdin}. The
  334                value of the expression (a string) replaces the region´s
  335                original content. An evaluation error causes the program to
  336                terminate.
  337 
  338                If the uri attribute is present, it specifies a web service to
  339                which the region should be passed as input and the output of
  340                which should replace the original document content. By default,
  341                the URI is invoked using the POST method but if a method
  342                attribute is present it specifies the HTTP method to use. The
  343                http and https schemes are supported. The input is passed as an
  344                argument named CONTENT.
  345 
  346                If no operation attribute is provided, the original content is
  347                evaluated as an expression[11] and its value becomes the new
  348                content of the region.
  349 
  350                To interpolate the current date you might use:
  351 
  352                    <!--DACS filter="public" expr="strftime(´%v´)" -->
  353                    <!--DACS end="public" -->
  354 
  355                Or equivalently:
  356 
  357                    <!--DACS filter="public" -->
  358                    strftime("%v")
  359                    <!--DACS end="public" -->
  360 
  361 
  362                    Tip
  363                    To simply substitute variable values into the original
  364                    content, use the expand[14] directive or the expand()[21]
  365                    function. For example:
  366 
  367                        <!--DACS filter="*" expr="expand(${DACS::stdin})" section="Hello, world" -->
  368                        <h1>${Attr::section}</h1>
  369                        <!--DACS end="*" -->
  370 
  371                    Or, alternatively:
  372 
  373                        <!--DACS filter="*" section="Hello, world" -->
  374                        expand("<h1>${Attr::section}</h1>")
  375                        <!--DACS end="*" -->
  376 
  377                    In either variation, the three lines in the document are
  378                    replaced by a single line:
  379 
  380                        <h1>Hello, world</h1>
  381 
  382                    Tip
  383                    A filter directive with an expr or uri attribute and an
  384                    empty region can be written more simply using an insert
  385                    directive.
  386 
  387            filterv
  388                This directive is identical to filter[17] except that no
  389                newline is appended.
  390 
  391            id
  392                If the region is enabled, the directive is replaced by the
  393                current time and date, and a DACS version identification
  394                string. This directive has no matching end directive; it is
  395                essentially a region with no content.
  396 
  397                For example, the directive:
  398 
  399                    <!--DACS id="*" -->
  400 
  401                will be replaced by a line similar to this:
  402 
  403 
  404                    <--DACS Generated 6-Sep-2007@11:37:43 by dacstransform DACS 1.4.20
  405                     Release date 13-Aug-07 09:39:03 (revid 2034) on example.com -->
  406 
  407                Note that the replacement line appears as a comment in the
  408                emitted document and will pass through dacs_transform
  409                unaltered.
  410 
  411            insert
  412                Document text is read from a specified source using the insert
  413                directive. Exactly one filename, uri, or expr attribute must be
  414                provided. Variable references in the inserted content are not
  415                expanded - if that is required, use the expand[14] directive.
  416                Directives in the inserted content are not processed if
  417                recursion[20] has been disabled.
  418 
  419 
  420 
  421                    <!--DACS Interpolate browser-specific JavaScript -->
  422                    <!--DACS insert="mozilla" filename="/dacs/dacs_transform/js/js1.html" -->
  423                    <!--DACS insert="ie" filename="/dacs/dacs_transform/js/js2.html" -->
  424                    <!--DACS insert="netscape" filename="/dacs/dacs_transform/js/js3.html" -->
  425 
  426                    <!--DACS insert="*" uri="http://example.com/data" -->
  427                    <!--DACS insert="*" expr="strftime(´%v´)" -->
  428                    <!--DACS insert="*" expr="exec(´/bin/date´)" -->
  429                    <!--DACS insert="*" expr="${Attr::arg1} + ${Attr::arg2}" arg1="10" arg2="20" -->
  430 
  431                The region name (the value of the insert attribute) is
  432                accessible to rules as the value of ${Args::region}. This
  433                directive has no matching end directive; it is essentially a
  434                region with no content. Like the begin and end directives, the
  435                insert directive names the region so that an appropriate rule
  436                can be applied.
  437 
  438                The filename attribute gives the pathname of a file to be
  439                inserted into the document at the current location. When
  440                invoked as dacs_transform, the pathname must be absolute (i.e.,
  441                it must begin with a slash character).
  442 
  443                The uri attribute gives a URI that is invoked to obtain the
  444                document to be inserted. The GET method is used by default, but
  445                if a method attribute is present it specifies the HTTP method
  446                to use. The returned document is inserted at the current
  447                location. If the URI´s scheme is file, it is equivalent to the
  448                filename attribute. The http and https schemes are also
  449                recognized.
  450 
  451                A third choice is the expr attribute. The expression[11] is
  452                evaluated and its result is inserted into the document; an
  453                evaluation error causes the program to terminate.
  454 
  455                Because it is needed in many cases and harmless in many others,
  456                a newline character is emitted after the inserted text. If this
  457                behaviour is undesirable, use insertv[22].
  458 
  459                These directives demonstrates how to expand a variable
  460                reference found in a template file into the current document:
  461 
  462                    <!--DACS insert="*" expr="expand(get(´/tmp/h1_template´))" s="Section 1"-->
  463                    <!--DACS insert="*" expr="expand(get(´/tmp/h1_template´))" s="Section 2"-->
  464 
  465                If the file /tmp/h1_template looks like:
  466 
  467                    <h1>${Attr::s}</h1>
  468 
  469                then these two lines would be inserted in the program´s output:
  470 
  471                    <h1>Section 1</h1>
  472                    <h1>Section 2</h1>
  473 
  474                Equivalent but slightly simpler directives can be used for this
  475                example:
  476 
  477                    <!--DACS expand="*" filename="/tmp/h1_template" s="Section 1"-->
  478                    <!--DACS expand="*" filename="/tmp/h1_template" s="Section 2"-->
  479 
  480 
  481            insertv
  482                This directive is identical to insert[19] except that no
  483                newline is appended.
  484 
  485            set
  486                This directive is used to set variables that will exist for the
  487                remainder of the current scope (the document being processed)
  488                and any documents that are recursively processed. Setting a
  489                variable creates it or overrides its existing value. Any
  490                occurrences of the variable in an outer scope are unaffected,
  491                as are variables that are created from attributes associated
  492                with a directive.
  493 
  494                This directive is useful to set a variable to a string that
  495                will be used more than once during document processing, or to
  496                establish configuration-related variables in a single location.
  497                This directive can prevent having to repeatedly pass the same
  498                string argument as an attribute in multiple directives.
  499 
  500                If gfile looks like:
  501 
  502                    <!--DACS set="*" foo="1" bar="2" -->
  503                    <!--DACS debug="*" show="attrs" -->
  504                    <!--DACS set="*" foo="3" bar="4" -->
  505                    <!--DACS debug="*" show="attrs" -->
  506                    <!--DACS insert="*" filename="gfile2" -->
  507                    <!--DACS debug="*" show="attrs" -->
  508 
  509                and gfile2 looks like:
  510 
  511                    <!--DACS debug="*" show="attrs" -->
  512                    <!--DACS set="*" foo="5" bar="6" bazz="7" -->
  513                    <!--DACS debug="*" show="attrs" -->
  514 
  515                then processing gfile will emit this output:
  516 
  517                    <!--DACS Debug:
  518                    Attrs:
  519                    debug="*"
  520                    show="attrs"
  521                    set="*"
  522                    foo="1"
  523                    bar="2"
  524                    -->
  525 
  526                    <!--DACS Debug:
  527                    Attrs:
  528                    debug="*"
  529                    show="attrs"
  530                    set="*"
  531                    foo="3"
  532                    bar="4"
  533                    -->
  534 
  535                    <!--DACS Debug:
  536                    Attrs:
  537                    debug="*"
  538                    show="attrs"
  539                    insert="*"
  540                    filename="gfile2"
  541                    set="*"
  542                    foo="3"
  543                    bar="4"
  544                    -->
  545 
  546                    <!--DACS Debug:
  547                    Attrs:
  548                    debug="*"
  549                    show="attrs"
  550                    set="*"
  551                    foo="5"
  552                    bar="6"
  553                    bazz="7"
  554                    insert="*"
  555                    filename="gfile2"
  556                    -->
  557 
  558                    <!--DACS Debug:
  559                    Attrs:
  560                    debug="*"
  561                    show="attrs"
  562                    set="*"
  563                    foo="3"
  564                    bar="4"
  565                    -->
  566 
  567 
  568        Configuration
  569            Configuration variables can be set to change some of the program´s
  570            defaults:
  571 
  572            •   transform_docs: This is the full pathname of the root directory
  573                in which original documents are kept. By default, the program
  574                will use a subdirectory ${Conf::DACS_HOME}dacs_transform/docs.
  575                (default: /usr/local/dacs/dacs_transform/docs)
  576 
  577                    Security
  578                    Change the default with care. In the absence of an
  579                    appropriate access control rule, setting the pathname to
  580                    "/" or the empty string, would provide access to any file
  581                    on the server that can be read by this web service.
  582 
  583            •   transform_acls: This is the VFS specification for the rules. By
  584                default, the program will use
  585                ${Conf::DACS_HOME}dacs_transform/acls. (default:
  586                [transform-acls]dacs-fs:/usr/local/dacs/dacs_transform/acls)
  587 
  588            •   transform_annotation: This is the annotation to interpolate in
  589                redacted text instead of the default.
  590 
  591            •   transform_prefix: Instead of the default prefix used to
  592                introduce a directive, the value of this variable is used. It
  593                must appear at the beginning of a line.
  594 
  595            •   transform_suffix: Instead of the default prefix used to end a
  596                directive, the value of this variable is used.
  597 
  598            •   transform_rprefix: A line whose beginning matches the specified
  599                regular expression introduces a directive.
  600 
  601            •   transform_rsuffix: The end of a directive is found by matching
  602                the specified regular expression.
  603 
  604 
  605        IEEE Std 1003.2 ("POSIX.2") "extended" regular expressions are
  606        supported (regex(3)[23]).
  607 
  608    Web Service Arguments
  609        In addition to the standard CGI arguments[24], dacs_transform
  610        understands the following CGI arguments:
  611 
  612        DOC
  613            This value of this argument specifies the document to be
  614            transformed as a file on the server running dacs_transform. It is
  615            an absolute path that is remapped within a segregated area of the
  616            web server.
  617 
  618        DOCURI
  619            This argument specifies the document to be transformed as a URI.
  620            The URI must use the http or https scheme. The HTTP GET method is
  621            used to fetch the document and the URI may include query arguments.
  622            The URI must be properly URL-encoded.
  623 
  624        ANNOTATE
  625            If this argument is present and its value is "yes", each deleted
  626            region of text is denoted in the retrieved document; contiguous
  627            deleted regions are denoted only once. The default annotation
  628            assumes a document Content-Type of text/html.
  629 
  630        CONTENT_TYPE
  631            If this argument is present, this will be the MIME Content-Type of
  632            the returned document. If this argument is omitted, the program
  633            will try to guess the type based on the suffix of the name of the
  634            original document, or default to text/html.
  635 
  636 DIAGNOSTICS
  637        The program exits 0 if everything was fine, 1 if an error occurred.
  638 
  639 SEE ALSO
  640        dacstransform(1)[6], dacs.exprs(5)[11], dacs.acls(5)[25]
  641 
  642 BUGS
  643        There is a lot of room for improvement and new features. Directive
  644        syntax slants towards the arcane; that may get worse before it gets
  645        better.
  646 
  647 AUTHOR
  648        Distributed Systems Software (www.dss.ca[26])
  649 
  650 
  651 
  652 
  653 COPYING
  654        Copyright © 2003-2021 Distributed Systems Software. See the LICENSE[27]
  655        file that accompanies the distribution for licensing information.
  656 
  657 
  658 
  659 
  660 NOTES
  661         1. dacsoptions
  662            http://dacs.dss.ca/man/dacs.1.html#dacsoptions
  663 
  664         2. mod_include
  665            https://httpd.apache.org/docs/2.4/mod/mod_include.html
  666 
  667         3. mod_rewrite
  668            https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
  669 
  670         4. mod_ext_filter
  671            https://httpd.apache.org/docs/2.4/mod/mod_ext_filter.html
  672 
  673         5. PHP
  674            http://www.php.net/
  675 
  676         6. dacstransform(1)
  677            http://dacs.dss.ca/man/dacstransform.1.html
  678 
  679         7. transform()
  680            http://dacs.dss.ca/man/dacs.exprs.5.html#transform
  681 
  682         8. dacs.exprs(5)
  683            http://dacs.dss.ca/man//dacs/man/dacs.exprs.5.html
  684 
  685         9. configurable
  686            http://dacs.dss.ca/man/#configuration
  687 
  688        10. syntactically valid variable name
  689            http://dacs.dss.ca/man/dacs.exprs.5.html#variable_syntax
  690 
  691        11. expression
  692            http://dacs.dss.ca/man/dacs.exprs.5.html
  693 
  694        12. namespaces
  695            http://dacs.dss.ca/man/dacs.exprs.5.html#reserved_namespaces
  696 
  697        13. negation operator
  698            http://dacs.dss.ca/man/#negation
  699 
  700        14. expand
  701            http://dacs.dss.ca/man/#EXPAND
  702 
  703        15. end
  704            http://dacs.dss.ca/man/#END
  705 
  706        16. begin
  707            http://dacs.dss.ca/man/#BEGIN
  708 
  709        17. filter
  710            http://dacs.dss.ca/man/#FILTER
  711 
  712        18. filterv
  713            http://dacs.dss.ca/man/#FILTERV
  714 
  715        19. insert
  716            http://dacs.dss.ca/man/#INSERT
  717 
  718        20. Recursion
  719            http://dacs.dss.ca/man/#recursion
  720 
  721        21. expand()
  722            http://dacs.dss.ca/man/dacs.exprs.5.html#expand
  723 
  724        22. insertv
  725            http://dacs.dss.ca/man/#INSERTV
  726 
  727        23. regex(3)
  728            https://www.freebsd.org/cgi/man.cgi?query=regex&apropos=0&esektion=3&emanpath=FreeBSD+12.0-RELEASE&format=html
  729 
  730        24. standard CGI arguments
  731            http://dacs.dss.ca/man/dacs.services.8.html#standard_cgi_args
  732 
  733        25. dacs.acls(5)
  734            http://dacs.dss.ca/man/dacs.acls.5.html
  735 
  736        26. www.dss.ca
  737            https://www.dss.ca
  738 
  739        27. LICENSE
  740            http://dacs.dss.ca/man/../misc/LICENSE
  741 
  742 
  743 
  744 DACS 1.4.46                       06/08/2021                 DACS_TRANSFORM(8)