API for fine-tuning audit report
(latest update: 2022-02-02 15:58)

This API describes which variables in the graph gxsl you may use to tweak your audit trail.

Download this sample model and copy the gxsl graph to your own model to get started, or use the gxsl library instead.

To use the audit trail as an output document in your model, use one of the provided audit trails.

πŸ”—linkgxsl.exclude.empty_answers

if '0' (the default), output all questions. If '1', skip questions that have not been answered. NOTE: To skip single, unchecked, checkboxes, use gxsl.exclude.unchecked_single_checkboxes.

πŸ”—linkgxsl.exclude.graphs

newline ('\n') separated list of graphs to be excluded.

Example: 'main\ng_exclude_a\ng_exclude_b' will exclude the following graphs:

NOTE: available since 4.5 release.

Newline (\n) separated list of link interfaces to be excluded.

Example: 'main.exclude.link1\nmain.exclude.link2 will exclude the following texts:

πŸ”—linkgxsl.exclude.nodes

newline ('\n') separated list of nodes to be excluded.

Example: 'main.exclude_a\nmain.g_exclude_b\nmain.g_exclude_c' will exclude the following nodes:

πŸ”—linkgxsl.exclude.questions

newline ('\n') separated list of questions to be excluded.

Example: 'main.exclude.question1\nmain.exclude.question2\nmain.exclude.question3' will exclude the following questions:

πŸ”—linkgxsl.exclude.texts

NOTE: available since 4.5 release.

Newline (\n) separated list of text interfaces to be excluded.

Example: 'main.exclude.text1\nmain.exclude.text2\nmain.exclude.text3' will exclude the following texts:

πŸ”—linkgxsl.exclude.unchecked_single_checkboxes

if not '0' (the default), skip single unchecked checkboxes.

πŸ”—linkgxsl.include.currentgroup

If '1', include current group: the node currently shown (default = '0' = off).

May still be overriden by gxsl.exclude.* settings.

If '1', include links

May be overriden by gxsl.exclude.links settings.

πŸ”—linkgxsl.tables.factorodt

An author may use fixed width columns, by specifying for at
least one of the columns a width that is not 100px, thereby
deviating from the default.

Depending on things like font size, the specific width may be
inappropriate in the ODT output. When using fixed widths, the
actual table and column width will be scaled by this
factor.

πŸ”—linkgxsl.tables.insert_generated_graphs

Insert generated graphs (SVGs) in the document, after the table
they are based upon, when showasgraph is on for the table in question.

NOTE: This only works when converted to PDF, since the images
are referenced relatively, and the images are only accessible in
that way from the same file system (read: not over HTTP/another
machine).

Depends upon a plugin uploading these generated graphs.

Defaults to not using it.

πŸ”—linkgxsl.tables.max_widthodt

An author may use fixed width columns, by specifying for at
least one of the columns a width that is not 100px, thereby
deviating from the default.

Depending on things like font size, the width of the table may
exceed that of the page. This variable sets a max width in inches.

πŸ”—linkgxsl.titles.policy

All 'font-style headings' (see below for an explanation) are rendered
according to their intended level, but demoted with 1, in order to be
lower than the document title, with a max of 6. Anything that would be
lower remains at 6. This is in line with what is done in newer
presentation layers on the web, where all headings are demoted
according to the context of the rest of the web page, in order to
always get a proper (web) document hierarchy.

So, in your audit trail:

MarkDown headings are demoted the same way when occurring inside a
'node context', that is, when the MarkDown appears inside screen text.

When occurring outside of a 'node context' β€” such as in front
matter or closing words, MarkDown headings are not demoted.

Legacy

Setting the variable gxsl.titles.policy to 'legacy' allows authors to
revert to the old, blunt, rendering, which was as follows:

Font-style headings

With the term 'font-style headings' we understand headings that are
headings because they use one of the following styles defined in the
Studio:

Note that the 'shoehorning' to level 6 will cause an initially
deep hierarchy to flatten out from level 5 onwards for documents, and
from perhaps higher levels (4 or even 3) on the web. For this reason
we advise not to use levels 4 through 6 in your model, but to
stick to Heading 1, Heading 2 and Heading 3 and the equivalent mark-up
in MarkDown: # Heading 1, ## Heading 2, ### Heading 3).
This warning of course does not apply to gxsl.vars.front_matter and
gxsl.vars.closing_words where demotion never takes place.

πŸ”—linkgxsl.titles.skip_repeated

Skip recurring titles. 'Recurring titles' means any title that
has the same style and text. A 'title' is any text with
something with 'Title' or 'Heading' in its style name.

Defaults to 0 (= off).

πŸ”—linkgxsl.urls.after

Text to use after the URL when gxsl.urls.show is on (1).

Defaults to ')'.

If you want to insert nothing after the URL, use 0 (zero).

πŸ”—linkgxsl.urls.before

Text to use before the URL when gxsl.urls.show is on (1).

Defaults to ' (' (including the space).

If you want to insert nothing before the URL, use 0 (zero).

πŸ”—linkgxsl.urls.show

Write out the URL of a link after its text, but only if they differ.

Defaults to 0 (= off).

πŸ”—linkgxsl.userfieldsodt

User fields in the node gxsl.userfields can be quoted in an ODT-style audit trail.

The ODT template used (see gxsl.vars.template) needs to define them first.

In a header we might for instance want to show a version
number. Define and set it in LibreOffice via Insert > Field >
More fields (Ctrl+F2) > User Field.

The Name that you use should be a valid single variable
identifier in the Berkeley Studio software.

The Value can be set in which case it serves as a fallback in
the template.

Make sure to choose the Text format, as we do not yet see any
use to make it more complex than that.

The variables inside gxsl.userfields will be used fill in the
blanks in the template when generating a document.

πŸ”—linkgxsl.vars.closing_wordsΒ (text fragment)

Closing words, such as a disclaimer, that we do not want in the interactive model. It will be inserted after all other questions. Markdown may be used within.

See also gxsl.vars.front_matter and gxsl.vars.order_by.

Note this one is defined as a text fragment.

It is advised to (only) output this text fragment
inside the node gxsl.vars, but
see below for the situation since version 4.5 of the
Berkeley Server.

From version 4.5 onwards, it does not matter where in the model
you output this text fragment; The last text fragment with this
name along with its namesakes in the same node will be used for
this.

Note that ^{variables} in text fragments are resolved the moment
text fragments are declared.


My fragment does not show up (?!! grumble grumble…)

If your fragment does not show up, this may mean you have a variable
of the same name, i.e. gxsl.vars.closing_words. This can be
the case with older sample models and libraries. If this is so, please
remove the variable gxsl.vars.closing_words from your
model
.

πŸ”—linkgxsl.vars.creator

The author of the document

πŸ”—linkgxsl.vars.decimal_format

The decimal format to use (choose from european or us).

'european': period as radix point, comma as thousands separator
'us': comma as radix point, period as thousands separator

πŸ”—linkgxsl.vars.front_matterΒ (text fragment)

Front matter, such as an introductory text, that we do
not want in the interactive model. Will be inserted after the
title, and before the questions and answers. Markdown may be used
within.

See also gxsl.vars.closing_words and gxsl.vars.order_by.

Note this one is defined as a text fragment.

It is advised to (only) output this text fragment
inside the node gxsl.vars, but
see below for the situation since version 4.5 of the
Berkeley Server.

From version 4.5 onwards, it does not matter where in the model
you output this text fragment; The last text fragment with this
name along with its namesakes in the same node will be used for
this.

Note that ^{variables} in text fragments are resolved the moment
text fragments are declared.


My fragment does not show up (?!! grumble grumble…)

If your fragment does not show up, this may mean you have a variable
of the same name, i.e. gxsl.vars.front_matter. This can be
the case with older sample models and libraries. If this is so, please
remove the variable gxsl.vars.front_matter from your
model
.

πŸ”—linkgxsl.vars.just_chosen_checkboxes

if '0' (the default), output all options alongside the chosen ones, if '1', output just the chosen ones. NOTE this does not apply to single checkboxes, only to check lists. To skip single, unchecked, checkboxes, use gxsl.exclude.unchecked_single_checkboxes.

πŸ”—linkgxsl.vars.lang

lang overrides the model's default language.

πŸ”—linkgxsl.vars.markdown

perform markdown conversion (beta, defaults to not using it)

πŸ”—linkgxsl.vars.markdown_baseuri

Prefix non-absolute MarkDown images with this baseuri

πŸ”—linkgxsl.vars.markdown_breaks

Insert line breaks within paragraphs if present in
source (defaults to do this). NOTE This behaviour is a breaking
change, but considered very convenient. Set this explitly to '0' (zero)
to opt out.

πŸ”—linkgxsl.vars.order_by

This specifies a variable name which, if used in a node,
indicates the relative order that node should have in regard to
the rest of the nodes.

If for example in node gxsl.vars you have a formula setting order_by to the name 'order_in_doc_a':

order_by := 'order_in_doc_a';

And in some other node, e.g. conclusion you set the variable order_in_doc_a to -1:

order_in_doc_a := -1;

this node conclusion will be output before all others. Likewise, one
may move a node all the way to the back by giving order_in_doc_a a
positive number (1, 2, etc).

NOTE: Nodes that do not contain this very variable default to 0 (so they will be output 'in the middle').

See also gxsl.vars.front_matter and gxsl.vars.closing_words.

πŸ”—linkgxsl.vars.pagebreak_after

This specifies a variable name which, if used in a node,
indicates that a page break needs to be inserted after that node.

If for example in node gxsl.vars you have a formula setting pagebreak_after to the name 'break_after_in_doc_a':

pagebreak_after := 'break_after_in_doc_a';

And in some other node, e.g. end_of_chapter you set the variable break_after_in_doc_a to 1:

break_after_in_doc_a := 1;

this node end_of_chapter will be followed by a page break.

πŸ”—linkgxsl.vars.pagebreak_before

This specifies a variable name which, if used in a node,
indicates that a page break needs to be inserted before that node.

If for example in node gxsl.vars you have a formula setting pagebreak_before to the name 'break_before_in_doc_a':

pagebreak_before := 'break_before_in_doc_a';

And in some other node, e.g. annex_start you set the variable break_before_in_doc_a to 1:

break_before_in_doc_a := 1;

this node annex_start will be preceded by a page break.

πŸ”—linkgxsl.vars.single_radio

if '0', output all options alongside the chosen one, otherwise output just the chosen one (the default)

πŸ”—linkgxsl.vars.stylesheethtml

Stylesheet to use for HTML output

πŸ”—linkgxsl.vars.stylesheet_defaulthtml

if '0', do not use the default stylesheet, (defaults to '1': on)

πŸ”—linkgxsl.vars.templateodt

Name of ODT (OpenDocument) template

πŸ”—linkgxsl.vars.text_after

This specifies a text fragment name which, if used in a node,
indicates that text fragments of that name need to be inserted after that node.

If for example in node gxsl.vars you have a formula setting text_after to the name 'text_after_in_doc_a':

text_after := 'text_after_in_doc_a';

And in some other node, e.g. intro you output the fragment text_after_in_doc_a:

textoutput('text_after_in_doc_a', '**MarkDown** allowed, hurray!')

this node intro will be followed by this text.

Markdown is allowed; headings will not be shoe-horned (so '# Page
title' will output a heading of level 1 - the same as the document
title)

Note the text will come before any trailing pagebreak.

πŸ”—linkgxsl.vars.text_before

This specifies a text fragment name which, if used in a node,
indicates that text fragments of that name need to be inserted before that node.

If for example in node gxsl.vars you have a formula setting text_before to the name 'text_before_in_doc_a':

text_before := 'text_before_in_doc_a';

And in some other node, e.g. annex_start you output the fragment text_before_in_doc_a:

textoutput('text_before_in_doc_a', '**MarkDown** allowed, hurray!')

this node annex_start will be preceded by this text.

Markdown is allowed; headings will not be shoe-horned (so '# Page
title' will output a heading of level 1 - the same as the document
title)

Note the text will come after any leading pagebreak.

πŸ”—linkgxsl.vars.title

if title is not specified, it's taken from model description

πŸ”—linkgxsl.vars.vspaceodt

Extra space, in points, inserted extra after a question;
defaults to 6(pt). The actual space inserted is a bit of black magic it seems, so just try and tweak.