{
   "generated_by" : {
      "oodoc_version" : "3.06",
      "created" : "2026-06-16 10:15:05",
      "program_version" : null,
      "program" : "/home/markov/local/perl-git/OODoc/bin/oodist"
   },
   "version" : "1.46",
   "index" : {
      "id1188-id1066" : {
         "type" : "ci_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "id" : "id1188-id1066",
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "extends" : "id1188",
         "name" : "collectStack"
      },
      "id535-id493" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id535\">Log::Report::Extract::cleanup(keep)</a></p>",
         "type" : "option",
         "id" : "id535-id493",
         "params" : "HASH|ARRAY",
         "extends" : "id535",
         "name" : "keep"
      },
      "id152" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "intro" : "<pre>  use Log::Report::Minimal::Domain;\n  my $domain = Log::Report::Minimal::Domain-&gt;new(name =&gt; $name);\n\n  # normal usage\n  use Log::Report::Optional;       # or Log::Report itself\n  my $domain = textdomain $name;   # find config\n  textdomain $name, %configure;    # set config, only once.\n</pre>\n",
         "id" : "id152",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id1207-id905" : {
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "extends" : "id1207",
         "value" : "8",
         "id" : "id1207-id905",
         "type" : "default"
      },
      "id663" : {
         "options" : [
            [
               "id664",
               "id665"
            ]
         ],
         "type" : "i_method",
         "id" : "id663",
         "diagnostics" : [
            "id666",
            "id667"
         ],
         "call" : "$obj-&gt;<b><a name=\"id663\">toString</a></b>(&nbsp;%options&nbsp;)",
         "name" : "toString",
         "intro" : "<p>Format the object into a multi-lined string.</p>\n"
      },
      "id1041" : {
         "name" : "exceptions",
         "intro" : "<p>Returns all collected <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a> objects.  The last of\nthem may be a fatal one.  The other are non-fatal.</p>\n",
         "id" : "id1041",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1041\">exceptions</a></b>"
      },
      "id363" : {
         "id" : "id363",
         "intro" : "<p>See the DETAILS section below for a detailed explenation.</p>\n",
         "type" : "option",
         "params" : "PREDEFINED|CODE",
         "name" : "pattern"
      },
      "id1208" : {
         "name" : "abstract",
         "intro" : "<p>The higher the abstraction value, the less details are given\nabout the caller.  The minimum abstraction is specified, and\nthen increased internally to make the line fit within the <tt class=\"parameter\">max_line</tt>\nmargin.</p>\n",
         "type" : "option",
         "id" : "id1208",
         "params" : "INTEGER"
      },
      "id257" : {
         "name" : "process",
         "id" : "id257",
         "intro" : "<p><code>process()</code> is an eval, but one which expects and understands exceptions\ngenerated by <a class=\"jump\" href=\"id801\">Log::Report</a>. Any messages will be logged as normal in\naccordance with the dispatchers, but any fatal exceptions will be caught\nand handled gracefully.  This allows much simpler error handling, rather\nthan needing to test for lots of different scenarios.</p>\n\n<p>In a module, it is enough to simply use the <code>error</code> keyword in the event\nof a fatal error.</p>\n\n<p>The return value will be 1 for success or 0 if a fatal exception occurred.</p>\n\n<p>See the <a class=\"jump\" href=\"id276\">DETAILS</a> for an example of how this is expected to be used.</p>\n\n<p>This module is configured only once in your application. The other modules\nwhich make your website do not need to require this plugin, instead they\ncan <code>use Log::Report</code> to get useful functions like error and fault.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id257\">process</a></b>"
      },
      "id864" : {
         "id" : "id864",
         "type" : "function",
         "call" : "<b><a name=\"id864\">__np</a></b>(&nbsp;$msgctxt, $msgid, $plural, count&nbsp;)",
         "name" : "__np"
      },
      "id54" : {
         "params" : "ARRAY",
         "type" : "option",
         "intro" : "<p>Add one or more modifier handlers to power of the formatter.  They will\nget preference over the predefined modifiers, but lower than the modifiers\npassed to <code>print[ip]</code> itself.</p>\n",
         "id" : "id54",
         "name" : "modifiers"
      },
      "id750-id561" : {
         "name" : "only acceptable parameter is 'ACTIVE'",
         "extends" : "id750",
         "subroutine" : "id749",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id749\">Log::Report::Lexicon::Table::translations()</a></p>",
         "id" : "id750-id561",
         "type" : "error"
      },
      "id1044" : {
         "name" : "change the setting of the running block\n",
         "intro" : "<pre>  my $parent_try = dispatcher 'active-try';\n  $parent_try-&gt;hide('ALL');\n</pre>\n",
         "type" : "example",
         "id" : "id1044"
      },
      "id1246" : {
         "name" : "message",
         "intro" : "<p>Change the <tt class=\"parameter\">$message</tt> of the exception, must be a <a class=\"jump\" href=\"id935\">Log::Report::Message</a>\nobject.</p>\n\n<p>When you use a <code>Log::Report::Message</code> object, you will get a new one\nreturned. Therefore, if you want to modify the message in an exception,\nyou have to re-assign the result of the modification.</p>\n",
         "examples" : [
            "id1247"
         ],
         "type" : "i_method",
         "id" : "id1246",
         "call" : "$obj-&gt;<b><a name=\"id1246\">message</a></b>(&nbsp;[$message]&nbsp;)",
         "diagnostics" : [
            "id1248"
         ]
      },
      "id741-id561" : {
         "name" : "new",
         "extends" : "id741",
         "type" : "c_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id741\">Log::Report::Lexicon::Table::new()</a></p>",
         "id" : "id741-id561",
         "call" : "$class-&gt;<b><a name=\"id741\">new</a></b>(&nbsp;%options&nbsp;)"
      },
      "id458" : {
         "name" : "lexicon in module tree\n",
         "intro" : "<p>My module is named <code>Some::Module</code> and installed in\nsome of perl's directories, say <code>~perl5.8.8</code>.  The module is defining\ntextdomain <code>my-domain</code>.  The translation is made into <code>nl-NL.utf-8</code>\n(locale for Dutch spoken in The Netherlands, utf-8 encoded text file).</p>\n\n<p>The default location for the translation table is under</p><pre>\n  ~perl5.8.8/Some/Module/messages/\n</pre>\n\n<p>for instance</p><pre>\n  ~perl5.8.8/Some/Module/messages/nl-NL.utf-8/LC_MESSAGES/my-domain.po\n</pre>\n\n<p>There are alternatives, as described in <a class=\"jump\" href=\"id441\">Log::Report::Lexicon::Index</a>,\nfor instance</p><pre>\n  ~perl5.8.8/Some/Module/messages/my-domain/nl-NL.utf-8.po\n  ~perl5.8.8/Some/Module/messages/my-domain/nl.po\n</pre>\n",
         "type" : "example",
         "id" : "id458"
      },
      "id1197-id905" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "name" : "filename",
         "id" : "id1197-id905",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "extends" : "id1197"
      },
      "id1287" : {
         "type" : "subsection",
         "id" : "id1287",
         "path" : "DETAILS/Processing the message/Filters",
         "level" : 3,
         "name" : "Filters"
      },
      "id755" : {
         "call" : "$obj-&gt;<b><a name=\"id755\">nrPlurals</a></b>",
         "intro" : "<p>Returns the number of plurals, when not known then '2'.</p>\n",
         "id" : "id755",
         "type" : "i_method",
         "name" : "nrPlurals"
      },
      "id1320" : {
         "path" : "DETAILS",
         "name" : "DETAILS",
         "level" : 1,
         "type" : "chapter",
         "id" : "id1320",
         "nest" : [
            "id1321",
            "id1322"
         ]
      },
      "id1198" : {
         "name" : "linenr",
         "id" : "id1198",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id990" : {
         "name" : "tags",
         "call" : "$obj-&gt;<b><a name=\"id990\">tags</a></b>",
         "id" : "id990",
         "intro" : "<p>[1.44] Returns the LIST of tags which are defined for this message; message\ngroup indicators, as often found in exception-based programming.</p>\n",
         "type" : "i_method"
      },
      "id1165-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "type" : "option",
         "id" : "id1165-id1091",
         "params" : "$reasons|\\@reasons",
         "extends" : "id1165",
         "name" : "accept"
      },
      "id1251" : {
         "call" : "$obj-&gt;<b><a name=\"id1251\">inClass</a></b>(&nbsp;$tag|Regexp&nbsp;)",
         "id" : "id1251",
         "intro" : "<p>Deprecated name for <a class=\"jump\" href=\"id1250\">taggedWith()</a>.</p>\n",
         "type" : "i_method",
         "name" : "inClass"
      },
      "id528" : {
         "name" : "charset",
         "call" : "$obj-&gt;<b><a name=\"id528\">charset</a></b>",
         "type" : "i_method",
         "intro" : "<p>Returns the character-set used inside the POT files.</p>\n",
         "id" : "id528"
      },
      "id940" : {
         "call" : "overload <b><a name=\"id940\">'\"\"'</a></b>; stringification",
         "intro" : "<p>When the object is used in string context, it will get translated.\nImplemented as <a class=\"jump\" href=\"id1000\">toString()</a>.</p>\n",
         "id" : "id940",
         "type" : "overload",
         "name" : "'\"\"'"
      },
      "id157" : {
         "params" : "STRING",
         "id" : "id157",
         "intro" : "<p>The name of the textdomain is used in its invocation, but also as (part of) the\ntranslation file names, hence please keep it simple and short.</p>\n",
         "type" : "option",
         "name" : "name"
      },
      "id1166-id1021" : {
         "name" : "accept",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "extends" : "id1166",
         "id" : "id1166-id1021",
         "type" : "default",
         "value" : "<code>depend on mode</code>"
      },
      "id252" : {
         "is_pure_pod" : false,
         "distribution" : "Dancer2-Plugin-LogReport",
         "package" : "Dancer2::Plugin::LogReport",
         "id" : "id252",
         "inheritance" : {
            "extends" : [
               "Dancer2::Plugin"
            ]
         },
         "title" : "logging, exceptions and translations in Dancer2 via Log::Report",
         "chapters" : [
            "id253",
            "id1354",
            "id254",
            "id255",
            "id256",
            "id276"
         ],
         "name" : "Dancer2::Plugin::LogReport",
         "version" : "2.03"
      },
      "id673" : {
         "id" : "id673",
         "type" : "chapter",
         "nest" : [
            "id674",
            "id709",
            "id714"
         ],
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS"
      },
      "id874" : {
         "name" : "message_class",
         "params" : "CLASS",
         "type" : "option",
         "intro" : "<p>[1.08] Use a more powerful message object class, for instance because\nyour messages need extra attributes.  The provided CLASS must extend\n<a class=\"jump\" href=\"id935\">Log::Report::Message</a></p>\n",
         "id" : "id874"
      },
      "id373" : {
         "intro" : "<p>Read the DETAILS section about this.</p>\n",
         "id" : "id373",
         "type" : "option",
         "params" : "PREDEFINED|CODE",
         "name" : "pattern"
      },
      "id308" : {
         "name" : "template_syntax",
         "params" : "'UNKNOWN'|'HTML'",
         "intro" : "<p>Linked to <a class=\"jump\" href=\"id58\">String::Print::new(encode_for)</a>: the output of the translation\nis HTML encoded unless the inserted value name ends on <code>_html</code>.\nRead <a class=\"jump\" href=\"id348\">Translation into HTML</a></p>\n",
         "type" : "option",
         "id" : "id308"
      },
      "id538-id354" : {
         "name" : "write",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id538\">Log::Report::Extract::write()</a></p>",
         "extends" : "id538",
         "call" : "$obj-&gt;<b><a name=\"id538\">write</a></b>(&nbsp;[$domain], %options&nbsp;)",
         "diagnostics" : [
            "id539-id354"
         ],
         "id" : "id538-id354",
         "type" : "i_method"
      },
      "id811" : {
         "name" : "errno",
         "id" : "id811",
         "value" : "<code>$!</code> or <code>1</code>",
         "type" : "default"
      },
      "id608" : {
         "type" : "subsection",
         "intro" : "<p>Above examples are to be specified per message.  You may also\nset a default.  The top of your modules set the text-domain (name\nof the translation table) for all strings found in those files.\nIn this case, for instance \"webpages\"</p>\n<pre>\n  # Log::Report::textdomain()\n  (textdomain 'webpages')-&gt;setContext(%context);\n</pre>\n\n<p>This context is used as defaults, the <code>_context</code> attribute used by\nstrings are overruling these.</p>\n",
         "id" : "id608",
         "path" : "DETAILS/Using context_rules/Specifying the context per Domain",
         "level" : 3,
         "name" : "Specifying the context per Domain"
      },
      "id59" : {
         "name" : "encode_for",
         "id" : "id59",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id1336" : {
         "intro" : "<pre> Log::Report::Util\n   is an Exporter\n</pre>\n",
         "type" : "chapter",
         "id" : "id1336",
         "path" : "INHERITANCE",
         "level" : 1,
         "name" : "INHERITANCE"
      },
      "id951" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id951",
         "name" : "_count"
      },
      "id1056" : {
         "name" : "class",
         "intro" : "<p>Deprecated alternative for <code>tag</code>.</p>\n",
         "type" : "option",
         "id" : "id1056",
         "params" : "$class|REGEX"
      },
      "id1254" : {
         "call" : "$obj-&gt;<b><a name=\"id1254\">toString</a></b>(&nbsp;[$locale]&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Prints the reason and the message.  Differently from <a class=\"jump\" href=\"id1252\">throw()</a>, this\nonly represents the textual content: it does not re-cast the exceptions to\nhigher levels.</p>\n",
         "id" : "id1254",
         "name" : "toString",
         "examples" : [
            "id1255"
         ]
      },
      "id78" : {
         "value" : "<code>undef</code>",
         "id" : "id78",
         "type" : "default",
         "name" : "_count"
      },
      "id225" : {
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS",
         "nest" : [
            "id226",
            "id230",
            "id1274",
            "id234"
         ],
         "type" : "chapter",
         "id" : "id225"
      },
      "id536-id354" : {
         "id" : "id536-id354",
         "type" : "default",
         "value" : "[]",
         "extends" : "id536",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id535\">Log::Report::Extract::cleanup(keep)</a></p>",
         "name" : "keep"
      },
      "id104" : {
         "level" : 3,
         "name" : "Modifier: '=' (show name)",
         "type" : "subsection",
         "intro" : "<p>[0.96] As (always trailing) modifier, this will show the interpolated\nname before the value.  It might simplify debugging statements.</p>\n<pre>\n  \"visitors: {count=}\", count =&gt; 1;      # visitors: count=1\n  \"v: {count %-8,d =}X\", count =&gt; 10000; # v: count=10,000␣␣X\n</pre>\n",
         "id" : "id104",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: '=' (show name)"
      },
      "id306" : {
         "name" : "processing_errors",
         "id" : "id306",
         "intro" : "<p>The Template Toolkit infrastructure handles errors carefully: <code>undef</code> is\nreturned and you need to call <a class=\"jump\" href=\"id340\">error()</a> to collect it.</p>\n",
         "type" : "option",
         "params" : "'NATIVE'|'EXCEPTION'"
      },
      "id1204-id780" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "type" : "option",
         "id" : "id1204-id780",
         "params" : "INTEGER",
         "extends" : "id1204",
         "name" : "max_line"
      },
      "id606" : {
         "name" : "Specifying the context per Message",
         "level" : 3,
         "path" : "DETAILS/Using context_rules/Specifying the context per Message",
         "type" : "subsection",
         "intro" : "<p>You need to specify the context at each message which is influenced by\nthe context.  This can be a comma separated list of words, an ARRAY, or\na HASH:</p>\n<pre>\n  _context =&gt; 'gender=male'\n  _context =&gt; 'gender=male,agegroup=adult,married=yes'\n  _context =&gt; [ 'gender=male', 'agegroup=adult', 'married=yes']\n  _context =&gt; [ qw/gender=male agegroup=adult married=yes/ ]\n\n  my @context = (qw/gender=male agegroup=adult married=yes/);\n  _context =&gt; \\@context;\n</pre>\n\n<p>Probably the</p><pre>\n  my %context = (gender =&gt; 'male', agegroup =&gt; 'adult', married =&gt; 'yes');\n  my %context = qw/gender male  agegroup adult  married yes/;\n  _context =&gt; \\%context;\n</pre>\n\n<p>Standard gettext only allows a single keyword (=string)\n<code>Log::Report</code> permits you to set-up a context for a whole\ntext-domain, which means that multiple context rules may be active at\nany moment.</p>\n",
         "id" : "id606"
      },
      "id960" : {
         "params" : "$text|$message",
         "type" : "option",
         "intro" : "<p>Some <tt class=\"parameter\">$text</tt> or other <tt class=\"parameter\">$message</tt> object which need to be pasted after this\nmessage object.</p>\n",
         "id" : "id960",
         "name" : "_append"
      },
      "id1199-id1021" : {
         "name" : "linenr",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "extends" : "id1199",
         "type" : "default",
         "id" : "id1199-id1021",
         "value" : "&lt;required&gt;"
      },
      "id1191-id780" : {
         "extends" : "id1191",
         "name" : "skipStack",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "id" : "id1191-id780",
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>"
      },
      "id57" : {
         "id" : "id57",
         "value" : "&lt;useful defaults&gt;",
         "type" : "default",
         "name" : "serializers"
      },
      "id693" : {
         "name" : "filename",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id693"
      },
      "id894" : {
         "level" : 3,
         "examples" : [
            "id895",
            "id896",
            "id897"
         ],
         "name" : "Run modes",
         "intro" : "<p>The run-mode change which messages are passed to a dispatcher, the verbosity.\nIt takes a different angle than the dispatch filters: the mode changes\nbehavioral aspects of the messages, which are described in detail in\n<a class=\"jump\" href=\"id1212\">Processing the message</a>.  However, it should\nbehave as you expect: the DEBUG mode shows more than the VERBOSE mode,\nand both show more than the NORMAL mode.</p>\n",
         "type" : "subsection",
         "id" : "id894",
         "path" : "DETAILS/Error handling models/Run modes"
      },
      "id1170" : {
         "name" : "mode",
         "value" : "'NORMAL'",
         "type" : "default",
         "id" : "id1170"
      },
      "id727" : {
         "distribution" : "Log-Report-Lexicon",
         "package" : "Log::Report::Lexicon",
         "is_pure_pod" : false,
         "title" : "translation component of Log::Report",
         "id" : "id727",
         "inheritance" : {},
         "chapters" : [
            "id728",
            "id729",
            "id730",
            "id731"
         ],
         "name" : "Log::Report::Lexicon",
         "version" : "1.16"
      },
      "id1180-id1217" : {
         "extends" : "id1180",
         "name" : "type",
         "id" : "id1180-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>"
      },
      "id1194-id780" : {
         "name" : "package",
         "extends" : "id1194",
         "params" : "CLASS",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "type" : "option",
         "id" : "id1194-id780"
      },
      "id393" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id393",
         "name" : "only_in_directory"
      },
      "id526" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id528",
            "id529",
            "id531",
            "id530",
            "id527"
         ],
         "type" : "section",
         "id" : "id526",
         "path" : "METHODS/Attributes"
      },
      "id1136" : {
         "name" : "native_language",
         "intro" : "<p>This is the language which you have used to write the translatable and\nthe non-translatable messages in.  In case no translation is needed,\nyou still wish the system error messages to be in the same language\nas the report.  Of course, each textdomain can define its own.</p>\n",
         "id" : "id1136",
         "type" : "option",
         "params" : "CODESET"
      },
      "id831" : {
         "type" : "example",
         "intro" : "<pre>  my $x = try { 3/$x };  # mind the ';' !!\n  if($@) {               # signals something went wrong\n\n  if(try {...}) {        # block ended normally, returns bool\n\n  try { ... }            # no comma!!\n     mode =&gt; 'DEBUG', accept =&gt; 'ERROR-';\n\n  try sub { ... },       # with comma, also \\&amp;function\n     mode =&gt; 'DEBUG', accept =&gt; 'ALL';\n\n  my $response = try { $ua-&gt;request($request) };\n  if(my $e = $@-&gt;wasFatal) ...\n</pre>\n",
         "id" : "id831"
      },
      "id1201-id780" : {
         "id" : "id1201-id780",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "extends" : "id1201",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "name" : "call"
      },
      "id1209-id1021" : {
         "extends" : "id1209",
         "id" : "id1209-id1021",
         "value" : "1",
         "type" : "default",
         "name" : "abstract",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>"
      },
      "id1017" : {
         "id" : "id1017",
         "type" : "section",
         "examples" : [
            "id1018"
         ],
         "nest" : [
            "id1019",
            "id1020"
         ],
         "path" : "DETAILS/Automatic parameters",
         "intro" : "<p>Besides the parameters which you specify yourself, <a class=\"jump\" href=\"id801\">Log::Report</a> will add\na few which can also be interpolated.  The all start with an underscore\n(<code>_</code>).  These are collected when this Message object is instantiated,\nsee the <code>%options</code> of <a class=\"jump\" href=\"id945\">new()</a>.  These parameters have a purpose, but\nyou are also permitted tp interpolate them in your message.  This may\nsimplify your coding.</p>\n\n<p>The useful names are:</p>\n\n<ul>\n\n\n<p><li>_msgid<br />\nThe MSGID as provided with <a class=\"jump\" href=\"id845\">Log::Report::__()</a> and <a class=\"jump\" href=\"id847\">Log::Report::__x()</a></p>\n\n\n\n<p><li>_plural, _count<br />\nThe plural (second) msgid, respectively the counter value as used with\n<a class=\"jump\" href=\"id850\">Log::Report::__n()</a> and <a class=\"jump\" href=\"id852\">Log::Report::__nx()</a></p>\n\n\n\n<p><li>_textdomain<br />\nThe label of the textdomain in which the translation takes place.</p>\n\n\n\n<p><li>_join<br />\nThe string which is used between elements of an ARRAY, when it gets\ninterpolated in a single field.</p>\n\n\n\n<p><li>_tags<br />\n[1.44] Tags are to be used to group exceptions, and can be queried with <a class=\"jump\" href=\"id998\">taggedWith()</a>,\n<a class=\"jump\" href=\"id1250\">Log::Report::Exception::taggedWith()</a>, or\n<a class=\"jump\" href=\"id1054\">Log::Report::Dispatcher::Try::wasFatal(tag)</a>.</p>\n\n</ul>\n",
         "name" : "Automatic parameters",
         "level" : 2
      },
      "id709" : {
         "id" : "id709",
         "type" : "section",
         "subroutines" : [
            "id711",
            "id713",
            "id710",
            "id712"
         ],
         "path" : "METHODS/Attributes",
         "level" : 2,
         "name" : "Attributes"
      },
      "id456" : {
         "name" : "DETAILS",
         "level" : 1,
         "path" : "DETAILS",
         "intro" : "<p>It's always complicated to find the lexicon files, because the perl\npackage can be installed on any weird operating system.  Therefore,\nyou may need to specify the lexicon directory or alternative directories\nexplicitly.  However, you may also choose to install the lexicon files\nin between the perl modules.</p>\n",
         "nest" : [
            "id457",
            "id459",
            "id460"
         ],
         "type" : "chapter",
         "id" : "id456"
      },
      "id1183-id1066" : {
         "extends" : "id1183",
         "name" : "needs",
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "id" : "id1183-id1066"
      },
      "id501" : {
         "path" : "METHODS/Constructors",
         "id" : "id501",
         "type" : "section",
         "subroutines" : [
            "id519-id493"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id970" : {
         "intro" : "<p>Specify the <tt class=\"parameter\">$dispatcher</tt> as destination explicitly. Short\nfor  <code>report {to =&gt; NAME}, ...</code>  See <a class=\"jump\" href=\"id993\">to()</a></p>\n",
         "id" : "id970",
         "type" : "option",
         "params" : "$dispatcher",
         "name" : "_to"
      },
      "id125" : {
         "subroutine" : "id123",
         "name" : "unknown reason $which in '$reasons'.",
         "type" : "error",
         "id" : "id125"
      },
      "id1144-id385" : {
         "diagnostics" : [
            "id1145-id385",
            "id1146-id385"
         ],
         "call" : "$any-&gt;<b><a name=\"id1144\">readConfig</a></b>(&nbsp;$filename&nbsp;)",
         "id" : "id1144-id385",
         "type" : "ci_method",
         "extends" : "id1144",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1144\">Log::Report::Domain::readConfig()</a></p>",
         "name" : "readConfig"
      },
      "id643" : {
         "name" : "addComment",
         "call" : "$obj-&gt;<b><a name=\"id643\">addComment</a></b>(&nbsp;@lines|\\@lines|$text&nbsp;)",
         "id" : "id643",
         "intro" : "<p>Add multiple lines to the translator's comment block.  Returns an\nempty string if there are no comments.</p>\n",
         "type" : "i_method"
      },
      "id204" : {
         "type" : "error",
         "id" : "id204",
         "subroutine" : "id203",
         "name" : "even length parameter list for __x at $where"
      },
      "id1267" : {
         "call" : "<b><a name=\"id1267\">exception_decode</a></b>(&nbsp;$exception, %options&nbsp;)",
         "intro" : "<p>[1.23] This function attempts to translate object of other exception frameworks\ninto information to create a <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a>.  It returns the\nsame list of parameters as <a class=\"jump\" href=\"id1264\">die_decode()</a> does.</p>\n\n<p>Currently supported:</p>\n<ul>\n<li>DBIx::Class::Exception<br />\n<li>XML::LibXML::Error<br />\n</ul>\n",
         "id" : "id1267",
         "type" : "function",
         "name" : "exception_decode"
      },
      "id1182-id1091" : {
         "extends" : "id1182",
         "name" : "isDisabled",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "id" : "id1182-id1091",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>"
      },
      "id844" : {
         "name" : "Messages (optionally translatable)",
         "level" : 2,
         "path" : "FUNCTIONS/Messages (optionally translatable)",
         "subroutines" : [
            "id852",
            "id854",
            "id845",
            "id847",
            "id857",
            "id855",
            "id859",
            "id850"
         ],
         "intro" : "<p>Even when you do not support translations (yet) you may want to use\nmessage objects to improve the logging feature. For instance,\nyou get very powerful interpolation from <a class=\"jump\" href=\"id47\">String::Print</a>.</p>\n\n<p>The language translations are initiate by limited set of functions\nwhich contain <b>two under-scores</b> (<code>__</code>) in their name.  Most\nof them return a <a class=\"jump\" href=\"id935\">Log::Report::Message</a> object.</p>\n\n<p><b>Be warned(1)</b> that -in general- its considered very bad practice to\ncombine multiple translations into one message: translating may also\naffect the order of the translated components. Besides, when the person\nwhich translates only sees smaller parts of the text, his (or her) job\nbecomes more complex.  So:</p>\n<pre>\n  print __\"Hello\" . ', ' . __\"World!\";  # works, but to be avoided\n  print __\"Hello, World!\";              # preferred, complete sentence\n</pre>\n\n<p>The the former case, tricks with overloading used by the\n<a class=\"jump\" href=\"id935\">Log::Report::Message</a> objects will still make delayed translations\nwork.</p>\n\n<p>In normal situations, it is not a problem to translate interpolated\nvalues:</p>\n<pre>\n  print __\"the color is {c}\", c =&gt; __\"red\";\n</pre>\n\n<p><b>Be warned(2)</b> that using <code>__'Hello'</code> will produce a syntax error like\n\"String found where operator expected at .... Can't find string terminator\n\"'\" anywhere before EOF\".  The first quote is the cause of the complaint,\nbut the second generates the error.  In the early days of Perl, the single\nquote was used to separate package name from function name, a role which\nwas later replaced by a double-colon.  So <code>__'Hello'</code> gets interpreted\nas <code>__::Hello '</code>.  Then, there is a trailing single quote which has\nno counterpart.</p>\n",
         "id" : "id844",
         "type" : "section"
      },
      "id1203" : {
         "name" : "params",
         "id" : "id1203",
         "value" : "&lt;required&gt;",
         "type" : "default"
      },
      "id56" : {
         "name" : "serializers",
         "id" : "id56",
         "intro" : "<p>How to serialize data elements.</p>\n",
         "type" : "option",
         "params" : "HASH|ARRAY"
      },
      "id343" : {
         "path" : "DETAILS/Textdomains/Integration with Template::Toolkit",
         "intro" : "<p>Instead of Template, from Template::Toolkit, you use its extension\n<a class=\"jump\" href=\"id299\">Log::Report::Template</a>.</p>\n<pre>\n  # during initiation of the webserver, once in your script (before fork)\n  my $lexicons   = 'some-directory-for-translation-tables';\n  my $pots = Log::Report::Translator::POT-&gt;new(lexicons =&gt; $lexicons);\n\n  my $templater  = Log::Report::Template-&gt;new(...);\n  my $domain     = $templater-&gt;addTextdomain(\n      name     =&gt; $domainname,\n      function =&gt; 'loc',\n  );\n  $domain-&gt;configure(translator =&gt; $pots);\n\n  # part of the processing per page\n  $vars{translate_to} = 'nl_NL.utf8';\n  $templater-&gt;process($template, \\%vars, \\$output);\n</pre>\n\n<p>When you use the same domain for both templates as source code, then be\naware that there is only one place where you can configure the domain.\nThis may be in the code.  When you use a separate domain for the templates,\nthen you configure as shown above.</p>\n",
         "id" : "id343",
         "type" : "subsection",
         "name" : "Integration with Template::Toolkit",
         "level" : 3
      },
      "id1000" : {
         "call" : "$obj-&gt;<b><a name=\"id1000\">toString</a></b>(&nbsp;[$locale]&nbsp;)",
         "id" : "id1000",
         "intro" : "<p>Translate a message.  If not specified, the default locale is used.</p>\n",
         "type" : "i_method",
         "name" : "toString"
      },
      "id1141-id385" : {
         "id" : "id1141-id385",
         "type" : "default",
         "value" : "<code>undef</code>",
         "extends" : "id1141",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1140\">Log::Report::Domain::configure(config)</a></p>",
         "name" : "config"
      },
      "id1168-id1066" : {
         "id" : "id1168-id1066",
         "type" : "default",
         "value" : "&lt;system locale&gt;",
         "extends" : "id1168",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "name" : "locale"
      },
      "id621" : {
         "value" : "<code>undef</code>",
         "id" : "id621",
         "type" : "default",
         "name" : "msgid_plural"
      },
      "id1120" : {
         "path" : "SYNOPSIS",
         "id" : "id1120",
         "intro" : "<pre>  use Log::Report::DBIC::Profiler;\n  $schema-&gt;storage-&gt;debugobj(Log::Report::DBIC::Profiler-&gt;new);\n  $schema-&gt;storage-&gt;debug(1);\n\n  # And maybe (if no exceptions expected from DBIC)\n  $schema-&gt;exception_action(sub { panic @_ });\n\n  # Log to syslog\n  use Log::Report;\n  dispatcher SYSLOG =&gt; 'myapp',\n    identity =&gt; 'myapp',\n    facility =&gt; 'local0',\n    flags    =&gt; \"pid ndelay nowait\",\n    mode     =&gt; 'DEBUG';\n</pre>\n",
         "type" : "chapter",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id722" : {
         "type" : "error",
         "id" : "id722",
         "subroutine" : "id721",
         "name" : "no header defined in POT for file $fn."
      },
      "id321" : {
         "intro" : "<p>Create a new <a class=\"jump\" href=\"id385\">Log::Report::Template::Textdomain</a> object.\nSee its <code>new()</code> method for the options.</p>\n\n<p>Additional facts about the options: you may specify <code>only_in_directory</code>\nas a path. Those directories must be in the INCLUDE_PATH as well.\nThe (domain) <code>name</code> must be unique, and the <code>function</code> not yet in use.</p>\n\n<p>When the code also uses this textdomain, then that configuration will\nget extended with this configuration.</p>\n",
         "name" : "addTextdomain",
         "id" : "id321",
         "type" : "i_method",
         "diagnostics" : [
            "id323",
            "id324"
         ],
         "call" : "$obj-&gt;<b><a name=\"id321\">addTextdomain</a></b>(&nbsp;%options&nbsp;)",
         "examples" : [
            "id322"
         ]
      },
      "id1193" : {
         "name" : "stackTraceLine",
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)",
         "id" : "id1193",
         "type" : "ci_method",
         "options" : [
            [
               "id1208",
               "id1209"
            ],
            [
               "id1200",
               "id1201"
            ],
            [
               "id1196",
               "id1197"
            ],
            [
               "id1198",
               "id1199"
            ],
            [
               "id1204",
               "id1205"
            ],
            [
               "id1206",
               "id1207"
            ],
            [
               "id1194",
               "id1195"
            ],
            [
               "id1202",
               "id1203"
            ]
         ]
      },
      "id1151" : {
         "name" : "updateContext",
         "call" : "$obj-&gt;<b><a name=\"id1151\">updateContext</a></b>(&nbsp;STRING|HASH|ARRAY|PAIRS&nbsp;)",
         "intro" : "<p>[1.10] Make changes and additions to the active context (see <a class=\"jump\" href=\"id1148\">setContext()</a>).</p>\n",
         "type" : "i_method",
         "id" : "id1151"
      },
      "id785" : {
         "level" : 2,
         "name" : "Categories",
         "intro" : "<p><code>Log::Report</code> uses text-domains for translation tables.  These are\nalso used as categories for the Log4perl infrastructure.  So, typically\nevery module start with:</p>\n<pre>\n  use Log::Report 'my-text-domain', %more_options;\n</pre>\n\n<p>Now, if there is a logger inside the log4perl configuration which is\nnamed 'my-text-domain', that will be used.  Otherwise, the name of the\ndispatcher is used to select the logger.</p>\n",
         "path" : "DESCRIPTION/Categories",
         "nest" : [
            "id786"
         ],
         "id" : "id785",
         "type" : "section"
      },
      "id518" : {
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id519"
         ],
         "id" : "id518",
         "type" : "section",
         "name" : "Constructors",
         "level" : 2
      },
      "id1189-id1091" : {
         "id" : "id1189-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "type" : "ci_method",
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "name" : "addSkipStack",
         "extends" : "id1189"
      },
      "id344" : {
         "path" : "DETAILS/Textdomains/Template::Toolkit in Dancer2",
         "intro" : "<p>When you use Dancer2, you need to connect the text domain with</p>\n<pre>\n  my $domain = (engine 'template')-&gt;addTextdomain(\n      name       =&gt; 'isaas',\n      function   =&gt; 'loc',\n  );\n</pre>\n\n<p>And in file <code>config.ini</code>:</p>\n<pre>\n  template: \"TTLogReport\"\n  engines:\n    template:\n      TTLogReport:\n</pre>\n\n<p>This \"TTLogReport\" refers to module <a class=\"jump\" href=\"id237\">Dancer2::Template::TTLogReport</a>, which is\npart of distribution <code>Log-Report</code>.</p>\n",
         "type" : "subsection",
         "id" : "id344",
         "name" : "Template::Toolkit in Dancer2",
         "level" : 3
      },
      "id462" : {
         "path" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Log::Report::Lexicon::MOTcompact - use translations from an MO file</p>\n",
         "id" : "id462",
         "name" : "NAME",
         "level" : 1
      },
      "id1078" : {
         "call" : "$obj-&gt;<b><a name=\"id1078\">callback</a></b>",
         "intro" : "<p>Returns the code reference which will handle each logged message.</p>\n",
         "type" : "i_method",
         "id" : "id1078",
         "name" : "callback"
      },
      "id146" : {
         "path" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  # Use Log::Report when already loaded, otherwise Log::Report::Minimal\n  package My::Package;\n  use Log::Report::Optional 'my-domain';\n</pre>\n",
         "id" : "id146",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id843" : {
         "call" : "<b><a name=\"id843\">panic</a></b>(&nbsp;$message&nbsp;)",
         "type" : "function",
         "intro" : "<p>Short for <code>report PANIC =&gt; $message</code></p>\n",
         "id" : "id843",
         "name" : "panic"
      },
      "id1205-id1021" : {
         "extends" : "id1205",
         "id" : "id1205-id1021",
         "value" : "<code>undef</code>",
         "type" : "default",
         "name" : "max_line",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>"
      },
      "id477" : {
         "subroutine" : "id467",
         "name" : "cannot seek to $loc in $fn for translations: $!",
         "type" : "fault",
         "id" : "id477"
      },
      "id644" : {
         "call" : "$obj-&gt;<b><a name=\"id644\">automatic</a></b>(&nbsp;[@lines|\\@lines|$text]&nbsp;)",
         "id" : "id644",
         "intro" : "<p>Returns a STRING which contains the cleaned paragraph of automatically\nadded comments.  If an argument is specified, it will replace the current\ncomment.</p>\n",
         "type" : "i_method",
         "name" : "automatic"
      },
      "id203" : {
         "diagnostics" : [
            "id204"
         ],
         "call" : "<b><a name=\"id203\">__x</a></b>(&nbsp;$msgid, PAIRS&nbsp;)",
         "type" : "function",
         "id" : "id203",
         "name" : "__x"
      },
      "id1206-id1091" : {
         "extends" : "id1206",
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "type" : "option",
         "id" : "id1206-id1091",
         "params" : "INTEGER"
      },
      "id1134-id385" : {
         "params" : "Log::Report::Translator|\\%config",
         "id" : "id1134-id385",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1134\">Log::Report::Domain::configure(translator)</a></p>",
         "type" : "option",
         "name" : "translator",
         "extends" : "id1134"
      },
      "id595" : {
         "id" : "id595",
         "type" : "i_method",
         "diagnostics" : [
            "id596",
            "id597",
            "id598"
         ],
         "call" : "$obj-&gt;<b><a name=\"id595\">ctxtFor</a></b>(&nbsp;$message, $lang, [$context]&nbsp;)",
         "name" : "ctxtFor",
         "intro" : "<p>Returns a pair of the MSGID stripped from context markup, and the\ncontext evaluated into the msgctxt string.  The <tt class=\"parameter\">$message</tt> is a\n<a class=\"jump\" href=\"id935\">Log::Report::Message</a> object.  The <tt class=\"parameter\">$context</tt> is the default context\nfor a certain textdomain.</p>\n<pre>\n  my ($msgid, $msgctxt) = $context-&gt;ctxtFor($msg, $lang, $context);\n</pre>\n"
      },
      "id488" : {
         "call" : "$obj-&gt;<b><a name=\"id488\">filename</a></b>",
         "intro" : "<p>Returns the name of the source file for this data.</p>\n",
         "id" : "id488",
         "type" : "i_method",
         "name" : "filename"
      },
      "id235" : {
         "call" : "$obj-&gt;<b><a name=\"id235\">FREEZE</a></b>(&nbsp;$serializer&nbsp;)",
         "intro" : "<p>JSON (both JSON::XS and JSON::PP) and Sereal should work as\n<tt class=\"parameter\">$serializer</tt>: they both support the CBOR::XS interface.</p>\n",
         "type" : "i_method",
         "id" : "id235",
         "name" : "FREEZE"
      },
      "id287" : {
         "intro" : "<p>If you use <a href=\"https://metacpan.org/dist/DBIx_Class\">manual DBIx::Class</a> in your application, you can easily integrate\nits logging and exceptions. To log SQL queries:</p>\n<pre>\n  # Log all queries and execution time\n  $schema-&gt;storage-&gt;debugobj(new Log::Report::DBIC::Profiler);\n  $schema-&gt;storage-&gt;debug(1);\n</pre>\n\n<p>By default, exceptions from DBIC are classified at the level \"error\". This\nis normally a user level error, and thus may be filtered as normal program\noperation. If you do not expect to receive any DBIC exceptions, then it\nis better to class them at the level \"panic\":</p>\n<pre>\n  # panic() DBIC errors\n  $schema-&gt;exception_action(sub { panic @_ });\n  # Optionally get a stracktrace too\n  $schema-&gt;stacktrace(1);\n</pre>\n\n<p>If you are occasionally running queries where you expect to naturally\nget exceptions (such as not inserting multiple values on a unique constraint),\nthen you can catch these separately:</p>\n<pre>\n  try { $self-&gt;schema-&gt;resultset('Unique')-&gt;create() };\n  # Log any messages from try block, but only as trace\n  $@-&gt;reportAll(reason =&gt; 'TRACE');\n</pre>\n",
         "id" : "id287",
         "type" : "subsection",
         "path" : "DETAILS/In Use/Logging DBIC database queries and errors",
         "level" : 3,
         "name" : "Logging DBIC database queries and errors"
      },
      "id821" : {
         "subroutine" : "id807",
         "name" : "token '$token' not recognized as reason.",
         "id" : "id821",
         "type" : "error"
      },
      "id278" : {
         "level" : 2,
         "name" : "Setup and Configuration",
         "intro" : "<p>To make full use of <a class=\"jump\" href=\"id801\">Log::Report</a>, you'll need to use both\n<a class=\"jump\" href=\"id289\">Dancer2::Logger::LogReport</a> and <a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a>.</p>\n",
         "path" : "DETAILS/Setup and Configuration",
         "nest" : [
            "id279",
            "id280",
            "id281"
         ],
         "id" : "id278",
         "type" : "section"
      },
      "id949" : {
         "name" : "_domain",
         "value" : "&lt;from \"use <a class=\"jump\" href=\"id801\">Log::Report</a>\">",
         "id" : "id949",
         "type" : "default"
      },
      "id1131-id385" : {
         "call" : "$obj-&gt;<b><a name=\"id1131\">translator</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1131\">Log::Report::Domain::translator()</a></p>",
         "id" : "id1131-id385",
         "type" : "i_method",
         "name" : "translator",
         "extends" : "id1131"
      },
      "id536" : {
         "type" : "default",
         "value" : "[]",
         "id" : "id536",
         "name" : "keep"
      },
      "id168" : {
         "params" : "CODE|\\%config|'PRINTI'",
         "intro" : "<p>Selects the formatter used for the errors messages.  The default is the\nstring <code>PRINTI</code>, which will use <a class=\"jump\" href=\"id85\">String::Print::printi()</a>: interpolation\nwith curly braces around the variable names.</p>\n",
         "id" : "id168",
         "type" : "option",
         "name" : "formatter"
      },
      "id737" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "id" : "id737",
         "intro" : "<pre>  # use one of the extensions, for instance:\n  my $pot = Log::Report::Lexicon::POT-&gt;read('po/nl.po', charset =&gt; 'utf-8')\n         or panic;\n</pre>\n",
         "type" : "chapter"
      },
      "id1195-id1021" : {
         "extends" : "id1195",
         "type" : "default",
         "id" : "id1195-id1021",
         "value" : "&lt;required&gt;",
         "name" : "package",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>"
      },
      "id1154" : {
         "name" : "DETAILS",
         "level" : 1,
         "path" : "DETAILS",
         "nest" : [
            "id1155"
         ],
         "id" : "id1154",
         "type" : "chapter"
      },
      "id1196-id1091" : {
         "params" : "STRING",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id1091",
         "name" : "filename",
         "extends" : "id1196"
      },
      "id182" : {
         "value" : "<code>$!</code> or <code>1</code>",
         "type" : "default",
         "id" : "id182",
         "name" : "errno"
      },
      "id75" : {
         "type" : "example",
         "intro" : "<pre>  use String::Print;           # all\n  use String::Print 'sprinti'; # only sprinti\n\n  use String::Print 'printi',   # only printi\n    modifiers   =&gt; [ EUR   =&gt; sub {sprintf \"%5.2f e\", $_[0]} ],\n    serializers =&gt; [ UNDEF =&gt; sub {'-'} ],\n    defaults    =&gt; [ DT =&gt; { standard =&gt; 'ISO' } ];\n\n  printi \"price: {p EUR}\", p =&gt; 3.1415; # price: ␣␣3.14 e\n  printi \"count: {c}\", c =&gt; undef;      # count: -\n  my $s = sprinti \"price: {p EUR}\", p =&gt; 7;  # output in $s\n</pre>\n",
         "id" : "id75"
      },
      "id246" : {
         "name" : "addTextDomain",
         "examples" : [
            "id247"
         ],
         "call" : "$obj-&gt;<b><a name=\"id246\">addTextDomain</a></b>(&nbsp;%options&nbsp;)",
         "intro" : "<p>Forwards the <tt class=\"parameter\">%options</tt> to <a class=\"jump\" href=\"id321\">Log::Report::Template::addTextdomain()</a>.</p>\n",
         "type" : "i_method",
         "id" : "id246"
      },
      "id1303" : {
         "path" : "METHODS/Managing PO's/Administration",
         "id" : "id1303",
         "type" : "subsection",
         "subroutines" : [
            "id751-id669",
            "id719",
            "id755-id669",
            "id753-id669",
            "id717",
            "id721"
         ],
         "name" : "Administration",
         "level" : 3
      },
      "id981" : {
         "intro" : "<pre>  my $s = __x \"found {nr} files\", nr =&gt; 5;\n  my $t = $s-&gt;clone(nr =&gt; 3);\n  my $t = $s-&gt;(nr =&gt; 3);      # equivalent\n  print $s;     # found 5 files\n  print $t;     # found 3 files\n</pre>\n",
         "id" : "id981",
         "type" : "example",
         "name" : "use of clone()\n"
      },
      "id1197-id1066" : {
         "name" : "filename",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "extends" : "id1197",
         "value" : "&lt;required&gt;",
         "id" : "id1197-id1066",
         "type" : "default"
      },
      "id103" : {
         "level" : 3,
         "name" : "Modifier: //word, //\"string\", //'string'",
         "intro" : "<p>[0.91] By default, an undefined value is shown as text '<code>undef</code>'.  Empty\nstrings are shown as nothing.  This may not be nice.  You may want to\nbe more specific when a value is missing.</p>\n<pre>\n  \"visitors: {count //0}\"\n  \"published: {date DT//'not yet'}\"\n  \"copyright: {year//2017 YEAR}\n</pre>\n\n<p>Modifiers will usually return <code>undef</code> when they are called with an\nundefined or empty value.  By the right order of '//', you may product\ndifferent kinds of output:</p>\n<pre>\n  \"price: {price//5 EUR}\"\n  \"price: {price EUR//unknown}\"\n</pre>\n",
         "type" : "subsection",
         "id" : "id103",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: //word, //\"string\", //'string'"
      },
      "id135" : {
         "name" : "must_show_stack",
         "call" : "<b><a name=\"id135\">must_show_stack</a></b>(&nbsp;$mode, $reason&nbsp;)",
         "id" : "id135",
         "type" : "function"
      },
      "id1192-id1021" : {
         "id" : "id1192-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "type" : "ci_method",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>",
         "extends" : "id1192",
         "name" : "collectLocation"
      },
      "id806" : {
         "path" : "FUNCTIONS/Report production and configuration",
         "subroutines" : [
            "id807",
            "id825",
            "id830"
         ],
         "id" : "id806",
         "type" : "section",
         "name" : "Report production and configuration",
         "level" : 2
      },
      "id472" : {
         "type" : "fault",
         "id" : "id472",
         "name" : "cannot read magic from $fn: $!",
         "subroutine" : "id467"
      },
      "id999" : {
         "call" : "$obj-&gt;<b><a name=\"id999\">inClass</a></b>(&nbsp;$tag|Regexp&nbsp;)",
         "id" : "id999",
         "intro" : "<p>Deprecated alternative for <a class=\"jump\" href=\"id998\">taggedWith()</a>.</p>\n",
         "type" : "i_method",
         "name" : "inClass"
      },
      "id1108" : {
         "intro" : "<p>Returns the name of the opened file, or <code>undef</code> in case this dispatcher\nwas started from a file-handle or file-object.</p>\n",
         "type" : "i_method",
         "id" : "id1108",
         "call" : "$obj-&gt;<b><a name=\"id1108\">filename</a></b>",
         "name" : "filename"
      },
      "id467" : {
         "intro" : "<p>Read the MOT table information from <tt class=\"parameter\">$filename</tt>.</p>\n",
         "name" : "read",
         "call" : "$class-&gt;<b><a name=\"id467\">read</a></b>(&nbsp;$filename, %options&nbsp;)",
         "diagnostics" : [
            "id470",
            "id471",
            "id472",
            "id473",
            "id474",
            "id475",
            "id476",
            "id477",
            "id478",
            "id479",
            "id480",
            "id481",
            "id482",
            "id483",
            "id484",
            "id485"
         ],
         "id" : "id467",
         "type" : "c_method",
         "options" : [
            [
               "id468",
               "id469"
            ]
         ]
      },
      "id1028" : {
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS",
         "type" : "chapter",
         "id" : "id1028",
         "nest" : [
            "id1029",
            "id1039",
            "id1046",
            "id1050"
         ]
      },
      "id268" : {
         "type" : "i_method",
         "id" : "id268",
         "call" : "$obj-&gt;<b><a name=\"id268\">mistake</a></b>",
         "name" : "mistake"
      },
      "id196" : {
         "id" : "id196",
         "type" : "function",
         "call" : "<b><a name=\"id196\">error</a></b>(&nbsp;$message&nbsp;)",
         "name" : "error"
      },
      "id1171-id1091" : {
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "id" : "id1171-id1091",
         "name" : "format_reason",
         "extends" : "id1171"
      },
      "id394" : {
         "name" : "translation_function",
         "params" : "STRING",
         "id" : "id394",
         "intro" : "<p>The name of the function as used in the template to call for translation.\nSee <a class=\"jump\" href=\"id406\">function()</a>.  It must be unique over all text-domains used.</p>\n",
         "type" : "option"
      },
      "id1146" : {
         "subroutine" : "id1144",
         "name" : "unsupported context file type for $fn",
         "id" : "id1146",
         "type" : "error"
      },
      "id893" : {
         "path" : "DETAILS/Error handling models/The Reason for the report/Report level comparison",
         "intro" : "<p>Various frameworks used with perl programs define different labels\nto indicate the reason for the message to be produced.</p>\n<pre>\n  Perl5 Log::Dispatch Syslog Log4Perl Log::Report\n  print   0,debug     debug  debug    trace\n  print   0,debug     debug  debug    assert\n  print   1,info      info   info     info\n  warn\\n  2,notice    notice info     notice\n  warn    3,warning   warn   warn     mistake\n  carp    3,warning   warn   warn     warning\n  die\\n   4,error     err    error    error\n  die     5,critical  crit   fatal    fault\n  croak   6,alert     alert  fatal    alert\n  croak   7,emergency emerg  fatal    failure\n  confess 7,emergency emerg  fatal    panic\n</pre>\n",
         "id" : "id893",
         "type" : "subsubsection",
         "name" : "Report level comparison",
         "level" : 4
      },
      "id1188-id905" : {
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "type" : "ci_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "id" : "id1188-id905",
         "extends" : "id1188",
         "name" : "collectStack"
      },
      "id1207-id1066" : {
         "extends" : "id1207",
         "type" : "default",
         "id" : "id1207-id1066",
         "value" : "8",
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>"
      },
      "id694" : {
         "subroutine" : "id675",
         "name" : "textdomain parameter is required.",
         "id" : "id694",
         "type" : "error"
      },
      "id1202-id1021" : {
         "name" : "params",
         "extends" : "id1202",
         "params" : "ARRAY",
         "id" : "id1202-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "type" : "option"
      },
      "id282" : {
         "path" : "DETAILS/In Use",
         "name" : "In Use",
         "level" : 2,
         "id" : "id282",
         "type" : "section",
         "nest" : [
            "id283",
            "id284",
            "id285",
            "id286",
            "id287",
            "id288"
         ]
      },
      "id545" : {
         "path" : "DESCRIPTION",
         "id" : "id545",
         "intro" : "<p>UNTESTED!!!  PLEASE CONTRIBUTE!!!\nTranslate a message using the GNU gettext infrastructure.</p>\n\n<p>Guido Flohr reports:\nbe aware that Locale::gettext is only a binding for the C library\nlibintl and depends on its features.  That means that your module will\neffectively only run on GNU systems and maybe on Solaris (depending\non the exact version), because only these systems provide the plural\nhandling functions ngettext(), dngettext() and dcngettext().  Sooner or\nlater you will probably also need bind_textdomain_codeset() which is\nalso only available on certain systems.</p>\n",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1177-id1217" : {
         "subroutine" : "id1164",
         "name" : "Perl does not support charset $cs",
         "extends" : "id1177",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1164\">Log::Report::Dispatcher::new()</a></p>",
         "type" : "error",
         "id" : "id1177-id1217"
      },
      "id187" : {
         "call" : "<b><a name=\"id187\">dispatcher</a></b>(&nbsp;&lt;$type, $name, %options&gt;|&lt;$command, @names>&nbsp;)",
         "type" : "function",
         "intro" : "<p>Not supported.</p>\n",
         "id" : "id187",
         "name" : "dispatcher"
      },
      "id1187" : {
         "name" : "translate",
         "intro" : "<p>See <a class=\"jump\" href=\"id1212\">Processing the message</a>, which describes the actions taken by\nthis method.  A string is returned, which ends on a new-line, and\nmay be multi-line (in case a stack trace is produced).</p>\n",
         "type" : "i_method",
         "id" : "id1187",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)"
      },
      "id331" : {
         "name" : "write_tables",
         "type" : "default",
         "value" : "&lt;<code>true</code>>",
         "id" : "id331"
      },
      "id178" : {
         "name" : "textdomain",
         "call" : "<b><a name=\"id178\">textdomain</a></b>(&nbsp;&lt;[$name],$config&gt;|&lt;$name, 'DELETE'|'EXISTS'>|$domain&nbsp;)",
         "type" : "function",
         "id" : "id178"
      },
      "id631" : {
         "value" : "\"\"",
         "id" : "id631",
         "type" : "default",
         "name" : "automatic"
      },
      "id995-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id995\">valueOf</a></b>(&nbsp;$parameter&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id995\">Log::Report::Message::valueOf()</a></p>",
         "type" : "i_method",
         "id" : "id995-id221",
         "name" : "valueOf",
         "extends" : "id995"
      },
      "id732" : {
         "id" : "id732",
         "type" : "section",
         "subroutines" : [
            "id733"
         ],
         "path" : "METHODS/Constructors",
         "level" : 2,
         "name" : "Constructors"
      },
      "id1298" : {
         "level" : 2,
         "name" : "Available back-ends",
         "id" : "id1298",
         "type" : "section",
         "path" : "DETAILS/Available back-ends"
      },
      "id1168-id905" : {
         "name" : "locale",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "extends" : "id1168",
         "value" : "&lt;system locale&gt;",
         "id" : "id1168-id905",
         "type" : "default"
      },
      "id1090" : {
         "call" : "$obj-&gt;<b><a name=\"id1090\">load</a></b>(&nbsp;$domain, $locale&nbsp;)",
         "intro" : "<p>Load the translation information in the text <tt class=\"parameter\">$domain</tt> for the indicated <tt class=\"parameter\">$locale</tt>.\nMultiple calls to <a class=\"jump\" href=\"id1090\">load()</a> should not cost significant performance: the\ndata must be cached.</p>\n",
         "id" : "id1090",
         "type" : "i_method",
         "name" : "load"
      },
      "id266" : {
         "type" : "i_method",
         "id" : "id266",
         "call" : "$obj-&gt;<b><a name=\"id266\">notice</a></b>",
         "name" : "notice"
      },
      "id198" : {
         "name" : "alert",
         "id" : "id198",
         "type" : "function",
         "call" : "<b><a name=\"id198\">alert</a></b>(&nbsp;$message&nbsp;)"
      },
      "id1308" : {
         "path" : "DETAILS/Processing the message",
         "level" : 2,
         "name" : "Processing the message",
         "type" : "section",
         "id" : "id1308",
         "nest" : [
            "id1309",
            "id1310"
         ]
      },
      "id975-id221" : {
         "extends" : "id975",
         "id" : "id975-id221",
         "value" : "&lt;from locale&gt;",
         "type" : "default",
         "name" : "_lang",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id974\">Log::Report::Message::new(_lang)</a></p>"
      },
      "id1194-id760" : {
         "params" : "CLASS",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "type" : "option",
         "id" : "id1194-id760",
         "name" : "package",
         "extends" : "id1194"
      },
      "id374" : {
         "name" : "pattern",
         "id" : "id374",
         "value" : "&lt;from new(pattern)&gt;",
         "type" : "default"
      },
      "id176" : {
         "id" : "id176",
         "intro" : "<p>This module implements the functions provided by <a class=\"jump\" href=\"id801\">Log::Report</a>, but then\nas simple as possible: no support for translations, no dispatchers, no\nsmart exceptions.  The package uses <code>Log::Report</code> in an <code>::Optional</code>\nway, the main script determines whether it wants the <code>::Minimal</code> or\nfull-blown feature set.</p>\n",
         "type" : "chapter",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id873" : {
         "name" : "import",
         "id" : "id873",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id1167" : {
         "name" : "locale",
         "params" : "LOCALE",
         "intro" : "<p>Overrules the global locale setting.  Can be overruled itself by\n<a class=\"jump\" href=\"id816\">Log::Report::report(locale)</a>.</p>\n",
         "id" : "id1167",
         "type" : "option"
      },
      "id1103" : {
         "params" : "CODE|'LONG'",
         "intro" : "<p>[1.00] process each printed line.  By default, this adds a timestamp,\nbut you may want to add hostname, process number, or more.</p>\n<pre>\n  format =&gt; sub { '['.localtime().'] '.$_[0] }\n  format =&gt; sub { shift }   # no timestamp\n  format =&gt; 'LONG'\n</pre>\n\n<p>The first parameter to format is the string to print; it is already\ntranslated and trailed by a newline.  The second parameter is the\ntext-domain (if known).</p>\n\n<p>[1.10] As third parameter, you get the message raw object as well (maybe\nyou want to use the message context?)</p>\n\n<p>[1.19] After the three positional parameters, there may be a list\nof pairs providing additional facts about the exception.  It may\ncontain <code>location</code> information.</p>\n\n<p>The \"LONG\" format is equivalent to:</p>\n<pre>\n  my $t = strftime \"%FT%T\", gmtime;\n  \"[$t $$] $_[1] $_[0]\"\n</pre>\n\n<p>Use of context:</p>\n<pre>\n  format =&gt; sub { my ($msgstr, $domain, $msg, %more) = @_;\n     my $host = $msg-&gt;context-&gt;{host};\n     \"$host $msgstr\";\n  }\n</pre>\n",
         "id" : "id1103",
         "type" : "option",
         "name" : "format"
      },
      "id1201-id760" : {
         "extends" : "id1201",
         "type" : "default",
         "id" : "id1201-id760",
         "value" : "&lt;required&gt;",
         "name" : "call",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>"
      },
      "id447" : {
         "name" : "new",
         "id" : "id447",
         "intro" : "<p>Create an index for a certain directory.  If the directory does not\nexist or is empty, then the object will still be created.</p>\n\n<p>All files the <tt class=\"parameter\">$directory</tt> tree which are recognized as an translation table\nformat which is understood will be listed.  Momentarily, those are:</p>\n\n<ul>\n<li>. files with extension \"po\", see <a class=\"jump\" href=\"id561\">Log::Report::Lexicon::POTcompact</a><br />\n<li>. [0.993] files with extension \"mo\", see <a class=\"jump\" href=\"id461\">Log::Report::Lexicon::MOTcompact</a><br />\n</ul>\n\n<p>[0.99] Files which are in directories which start with a dot (hidden\ndirectories) and files which start with a dot (hidden files) are skipped.</p>\n",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id447\">new</a></b>(&nbsp;$directory, %options&nbsp;)"
      },
      "id674" : {
         "name" : "Constructors",
         "level" : 2,
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id675",
            "id695",
            "id703"
         ],
         "type" : "section",
         "id" : "id674"
      },
      "id1010-id221" : {
         "extends" : "id1010",
         "name" : "thaw",
         "id" : "id1010-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1010\">Log::Report::Message::thaw()</a></p>",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id1010\">thaw</a></b>(&nbsp;\\%data, %options&nbsp;)"
      },
      "id1023" : {
         "intro" : "<pre>  try { ... };       # mind the ';' !!\n  if($@) {           # signals something went wrong\n\n  if(try {...}) {    # block ended normally\n\n  my $x = try { read_temperature() };\n  my @x = try { read_lines_from_file() };\n\n  try { ... }        # no comma!!\n     mode =&gt; 'DEBUG', accept =&gt; 'ERROR-';\n\n  try sub { ... },   # with comma\n     mode =&gt; 'DEBUG', accept =&gt; 'ALL';\n\n  try \\&amp;myhandler, accept =&gt; 'ERROR-';\n  try { ... } hide =&gt; 'TRACE';\n\n  print ref $@;      # Log::Report::Dispatcher::Try\n\n  $@-&gt;reportFatal;   # re-dispatch result of try block\n  $@-&gt;reportAll;     # ... also warnings etc\n  if($@) {...}       # if errors\n  if($@-&gt;failed) {   # same       # }\n  if($@-&gt;success) {  # no errors  # }\n\n  try { # something causes an error report, which is caught\n        failure 'no network';\n      };\n  $@-&gt;reportFatal(to =&gt; 'syslog');  # overrule destination\n\n  print $@-&gt;exceptions; # no re-cast, just print\n</pre>\n",
         "type" : "chapter",
         "id" : "id1023",
         "path" : "SYNOPSIS",
         "level" : 1,
         "name" : "SYNOPSIS"
      },
      "id525-id493" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id519\">Log::Report::Extract::new()</a></p>",
         "type" : "fault",
         "id" : "id525-id493",
         "name" : "cannot create lexicon directory $dir: $!",
         "extends" : "id525",
         "subroutine" : "id519"
      },
      "id700" : {
         "subroutine" : "id695",
         "name" : "cannot detect charset in $fn.",
         "id" : "id700",
         "type" : "error"
      },
      "id1220" : {
         "path" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>Ventilate the problem reports via the standard Perl error mechanisms:\n<code>die()</code>, <code>warn()</code>, and <code>print()</code>.  There can be only one such dispatcher\n(per thread), because once <code>die()</code> is called, we are not able to return.\nTherefore, this dispatcher will always be called last.</p>\n\n<p>In the early releases of <a class=\"jump\" href=\"id801\">Log::Report</a>, it tried to simulate the behavior\nof warn and die using STDERR and exit; however: that is not possible.</p>\n",
         "id" : "id1220",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1183-id905" : {
         "id" : "id1183-id905",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)",
         "name" : "needs",
         "extends" : "id1183"
      },
      "id712" : {
         "name" : "filename",
         "intro" : "<p>Returns the filename, as derived from <a class=\"jump\" href=\"id695\">read()</a> or specified during\ninitiation with <a class=\"jump\" href=\"id692\">new(filename)</a>.</p>\n",
         "id" : "id712",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id712\">filename</a></b>"
      },
      "id492" : {
         "intro" : "<p>Returns the translated string for <tt class=\"parameter\">$msgid</tt>.  When not specified, <tt class=\"parameter\">$count</tt> is 1\n(the singular form).</p>\n",
         "type" : "i_method",
         "id" : "id492",
         "call" : "$obj-&gt;<b><a name=\"id492\">msgstr</a></b>(&nbsp;$msgid, [$count, $msgctxt]&nbsp;)",
         "name" : "msgstr"
      },
      "id611" : {
         "chapters" : [
            "id612",
            "id613",
            "id614",
            "id615"
         ],
         "name" : "Log::Report::Lexicon::PO",
         "version" : "1.16",
         "is_pure_pod" : false,
         "package" : "Log::Report::Lexicon::PO",
         "distribution" : "Log-Report-Lexicon",
         "id" : "id611",
         "inheritance" : {},
         "title" : "one translation definition"
      },
      "id248" : {
         "call" : "$obj-&gt;<b><a name=\"id248\">render</a></b>(&nbsp;$template, \\%tokens&nbsp;)",
         "id" : "id248",
         "intro" : "<p>Renders the template.  The first arg is a filename for the template file\nor a reference to a string that contains the template. The second arg\nis a hashref for the tokens that you wish to pass to\n<a href=\"https://metacpan.org/dist/Template_Toolkit\">manual Template::Toolkit</a> for rendering.</p>\n\n<p>When a translation language is set, then this renderer adds the following\nvariables: <code>language</code> (like \"nl\"), <code>language_territory</code> (like \"nl_BE\"),\nand <code>locale</code> (like \"nl_BE.utf8\").</p>\n",
         "type" : "i_method",
         "name" : "render"
      },
      "id808" : {
         "params" : "$name|\\@names",
         "intro" : "<p>Sent the <tt class=\"parameter\">$message</tt> only to the named dispatchers.  Ignore unknown <tt class=\"parameter\">@names</tt>.\nStill, the dispatcher needs to be enabled and accept the <tt class=\"parameter\">$reason</tt>.</p>\n",
         "id" : "id808",
         "type" : "option",
         "name" : "to"
      },
      "id565" : {
         "id" : "id565",
         "type" : "chapter",
         "nest" : [
            "id566",
            "id576",
            "id579"
         ],
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS"
      },
      "id979" : {
         "value" : "<code>undef</code>",
         "id" : "id979",
         "type" : "default",
         "name" : "_msgctxt"
      },
      "id1204-id760" : {
         "extends" : "id1204",
         "name" : "max_line",
         "id" : "id1204-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id311" : {
         "name" : "modifiers",
         "id" : "id311",
         "value" : "[]",
         "type" : "default"
      },
      "id1191-id760" : {
         "name" : "skipStack",
         "extends" : "id1191",
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "id" : "id1191-id760",
         "type" : "i_method"
      },
      "id1293" : {
         "path" : "DETAILS/Available back-ends",
         "id" : "id1293",
         "type" : "section",
         "name" : "Available back-ends",
         "level" : 2
      },
      "id1346" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Minimal::Domain is extended by\n   <a class=\"jump\" href=\"id1122\">Log::Report::Domain</a>\n</pre>\n",
         "id" : "id1346",
         "path" : "INHERITANCE"
      },
      "id276" : {
         "level" : 1,
         "name" : "DETAILS",
         "intro" : "<p>This chapter will guide you through the myriad of ways that you can use\n<a class=\"jump\" href=\"id801\">Log::Report</a> in your Dancer2 application.</p>\n\n<p>We will set up our application to do the following:</p>\n\n<ul>\n\n\n\n<p><li>Messages to the user<br />\nWe'll look at an easy way to output messages to the user's web page, whether\nthey be informational messages, warnings or errors.</p>\n\n\n\n<p><li>Debug information<br />\nWe'll look at an easy way to log debug information, at different levels.</p>\n\n\n\n<p><li>Manage unexpected exceptions<br />\nWe'll handle unexpected exceptions cleanly, in the unfortunate event that\nthey happen in your production application.</p>\n\n\n\n<p><li>Email alerts of significant errors<br />\nIf we do get unexpected errors then we want to be notified them.</p>\n\n\n\n<p><li>Log DBIC information and errors<br />\nWe'll specifically look at nice ways to log SQL queries and errors when\nusing DBIx::Class.</p>\n\n</ul>\n",
         "path" : "DETAILS",
         "nest" : [
            "id277",
            "id278",
            "id282"
         ],
         "id" : "id276",
         "type" : "chapter"
      },
      "id1007-id221" : {
         "extends" : "id1007",
         "name" : "serializer",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1007\">Log::Report::Message::freeze(serializer)</a></p>",
         "id" : "id1007-id221",
         "params" : "'JSON'|'Serial'|..."
      },
      "id965-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id964\">Log::Report::Message::new(_tags)</a></p>",
         "name" : "_tags",
         "id" : "id965-id221",
         "type" : "default",
         "value" : "[]",
         "extends" : "id965"
      },
      "id1073" : {
         "call" : "$class-&gt;<b><a name=\"id1073\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "diagnostics" : [
            "id1076"
         ],
         "type" : "c_method",
         "id" : "id1073",
         "options" : [
            [
               "id1165-id1066",
               "id1166-id1066"
            ],
            [
               "id1074",
               "id1075"
            ],
            [
               "id1173-id1066",
               "id1174-id1066"
            ],
            [
               "id1171-id1066",
               "id1172-id1066"
            ],
            [
               "id1167-id1066",
               "id1168-id1066"
            ],
            [
               "id1169-id1066",
               "id1170-id1066"
            ]
         ],
         "name" : "new"
      },
      "id863" : {
         "call" : "<b><a name=\"id863\">__px</a></b>(&nbsp;$msgctxt, $msgid, PAIRS&nbsp;)",
         "type" : "function",
         "id" : "id863",
         "name" : "__px"
      },
      "id442" : {
         "level" : 1,
         "name" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Log::Report::Lexicon::Index - search through available translation files</p>\n",
         "id" : "id442",
         "path" : "NAME"
      },
      "id538" : {
         "name" : "write",
         "intro" : "<p>Update the information of the files related to <tt class=\"parameter\">$domain</tt>, by default all\nprocessed DOMAINS.</p>\n\n<p>All information known about the written <tt class=\"parameter\">$domain</tt> is removed from the cache.\nThe <tt class=\"parameter\">%options</tt> are passed to the <code>write()</code> of the specific lexicon\nmanager.</p>\n",
         "id" : "id538",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id538\">write</a></b>(&nbsp;[$domain], %options&nbsp;)",
         "diagnostics" : [
            "id539"
         ]
      },
      "id166" : {
         "name" : "where",
         "id" : "id166",
         "intro" : "<p>Specifies the location of the configuration.  It is not allowed to\nconfigure a domain on more than one location.</p>\n",
         "type" : "option",
         "params" : "ARRAY"
      },
      "id364" : {
         "value" : "&lt;<code>undef</code>>",
         "type" : "default",
         "id" : "id364",
         "name" : "pattern"
      },
      "id1351" : {
         "path" : "INHERITANCE",
         "intro" : "<pre> Dancer2::Logger::LogReport\n   is a Moo::Object\n</pre>\n",
         "id" : "id1351",
         "type" : "chapter",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id664" : {
         "name" : "nr_plurals",
         "id" : "id664",
         "intro" : "<p>If the number of plurals is specified, then the plural translation\nlist can be checked for the correct length.  Otherwise, no smart\nbehavior is attempted.</p>\n",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id1031" : {
         "id" : "id1031",
         "intro" : "<p>ARRAY of <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a> objects.</p>\n",
         "type" : "option",
         "params" : "\\@objects",
         "name" : "exceptions"
      },
      "id1354" : {
         "path" : "INHERITANCE",
         "intro" : "<pre> Dancer2::Plugin::LogReport\n   is a Dancer2::Plugin\n</pre>\n",
         "type" : "chapter",
         "id" : "id1354",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id497" : {
         "nest" : [
            "id498",
            "id499"
         ],
         "id" : "id497",
         "type" : "section",
         "name" : "The extraction process",
         "level" : 2,
         "path" : "DESCRIPTION/The extraction process",
         "intro" : "<p>All pm-files need to be processed in one go: no incremental processing!</p>\n\n<p>The Perl source is parsed using PPI, which does understand Perl syntax\nquite well, but does not support all features.</p>\n\n<p>Automatically, the textdomain of the translations is discovered, as\nfirst parameter of <code>use Log::Report</code>.  You may switch textdomain inside\none pm-file.</p>\n\n<p>When all files have been processed, during the <a class=\"jump\" href=\"id538\">write()</a>, all existing\npo-files for all discovered textdomains will get updated.  Not only the\n<code>$lexicon/$domain.po</code> template, but also all <code>$lexicon/$domain/$lang.po</code>\nwill be replaced.  When a msgid has disappeared, existing translations\nwill get disabled, not removed.  New msgids will be added and flagged\n\"fuzzy\".</p>\n"
      },
      "id1270" : {
         "path" : "DETAILS/Processing the message",
         "level" : 2,
         "name" : "Processing the message",
         "type" : "section",
         "id" : "id1270",
         "nest" : [
            "id1271",
            "id1272"
         ]
      },
      "id1169-id1091" : {
         "id" : "id1169-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "type" : "option",
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3",
         "extends" : "id1169",
         "name" : "mode"
      },
      "id717" : {
         "call" : "$obj-&gt;<b><a name=\"id717\">add</a></b>(&nbsp;$po&nbsp;)",
         "diagnostics" : [
            "id718"
         ],
         "type" : "i_method",
         "id" : "id717",
         "name" : "add",
         "intro" : "<p>Add the information from a <tt class=\"parameter\">$po</tt> into this POT.  If the msgid of the <tt class=\"parameter\">$po</tt>\nis already known, that is an error.</p>\n"
      },
      "id969" : {
         "name" : "_class",
         "value" : "<code>undef</code>",
         "id" : "id969",
         "type" : "default"
      },
      "id1034" : {
         "name" : "died",
         "id" : "id1034",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id575" : {
         "type" : "error",
         "id" : "id575",
         "name" : "unsupported charset $charset in $fn.",
         "subroutine" : "id567"
      },
      "id516" : {
         "path" : "DESCRIPTION",
         "intro" : "<p>This module helps maintaining the POT files, updating the list of\nmessage-ids which are kept in them.  After initiation, the <a class=\"jump\" href=\"id533\">process()</a>\nmethod needs to be called with all files which changed since last\nprocessing and the existing PO files will get updated accordingly.  If no\ntranslations exist yet, one <code>textdomain/xx.po</code> file will be created.</p>\n",
         "id" : "id516",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1236" : {
         "id" : "id1236",
         "value" : "+{ }",
         "type" : "default",
         "name" : "report_opts"
      },
      "id148" : {
         "level" : 1,
         "name" : "METHODS",
         "subroutines" : [
            "id149"
         ],
         "type" : "chapter",
         "id" : "id148",
         "path" : "METHODS"
      },
      "id528-id354" : {
         "id" : "id528-id354",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id528\">Log::Report::Extract::charset()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id528\">charset</a></b>",
         "extends" : "id528",
         "name" : "charset"
      },
      "id486" : {
         "level" : 2,
         "name" : "Attributes",
         "type" : "section",
         "id" : "id486",
         "subroutines" : [
            "id489",
            "id488",
            "id487"
         ],
         "path" : "METHODS/Attributes"
      },
      "id301" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  use Log::Report::Template;\n  my $templater = Log::Report::Template-&gt;new(%config);\n  $templater-&gt;addTextdomain(name =&gt; \"Tic\", lexicons =&gt; ...);\n  $templater-&gt;process('template_file.tt', \\%vars, \\$output);\n</pre>\n",
         "type" : "chapter",
         "id" : "id301",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id531-id354" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id531\">Log::Report::Extract::addPot()</a></p>",
         "id" : "id531-id354",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id531\">addPot</a></b>(&nbsp;$domain, $pot, %options&nbsp;)",
         "name" : "addPot",
         "extends" : "id531"
      },
      "id818" : {
         "name" : "is_fatal",
         "params" : "BOOLEAN",
         "intro" : "<p>Some logged exceptions are fatal, other aren't.  The default usually\nis correct. However, you may want an error to be caught (usually with\n<a class=\"jump\" href=\"id830\">try()</a>), redispatch it to syslog, but without it killing the main\nprogram.</p>\n",
         "id" : "id818",
         "type" : "option"
      },
      "id601" : {
         "intro" : "<p>Expand the context settings into all possible combinations which need\ntranslations in the PO file.  This may depend on the <tt class=\"parameter\">$language</tt>.\nThe <tt class=\"parameter\">$msgid</tt> is used in error messages.</p>\n",
         "name" : "expand",
         "call" : "$obj-&gt;<b><a name=\"id601\">expand</a></b>(&nbsp;$msgid, $language, %options&nbsp;)",
         "diagnostics" : [
            "id602"
         ],
         "type" : "i_method",
         "id" : "id601"
      },
      "id702" : {
         "name" : "failed reading from file $fn: $!",
         "subroutine" : "id695",
         "type" : "fault",
         "id" : "id702"
      },
      "id710" : {
         "name" : "charset",
         "call" : "$obj-&gt;<b><a name=\"id710\">charset</a></b>",
         "intro" : "<p>The character-set to be used for reading and writing.  You do not need\nto be aware of Perl's internal encoding for the characters.</p>\n",
         "id" : "id710",
         "type" : "i_method"
      },
      "id993-id221" : {
         "name" : "to",
         "extends" : "id993",
         "id" : "id993-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id993\">Log::Report::Message::to()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id993\">to</a></b>(&nbsp;[$name]&nbsp;)"
      },
      "id1200" : {
         "name" : "call",
         "type" : "option",
         "id" : "id1200",
         "params" : "STRING"
      },
      "id490" : {
         "level" : 2,
         "name" : "Managing PO's",
         "path" : "METHODS/Managing PO's",
         "nest" : [
            "id1304",
            "id1305"
         ],
         "type" : "section",
         "id" : "id490"
      },
      "id895" : {
         "intro" : "<p>The <code>GetOptions()</code> function will count the number of <code>v</code> options\non the command-line when a <code>+</code> is after the option name.</p>\n<pre>\n  use Log::Report;\n  use Getopt::Long qw(:config no_ignore_case bundling);\n\n  my $mode;    # defaults to NORMAL\n  GetOptions 'v+'        =&gt; \\$mode,\n             'verbose=i' =&gt; \\$mode,\n             'mode=s'    =&gt; \\$mode\n      or exit 1;\n\n  dispatcher 'PERL', 'default', mode =&gt; $mode;\n</pre>\n\n<p>Now, <code>-vv</code> will set <code>$mode</code> to <code>2</code>, as will <code>--verbose 2</code> and\n<code>--verbose=2</code> and <code>--mode=ASSERT</code>.  Of course, you do not need to\nprovide all these options to the user: make a choice.</p>\n",
         "id" : "id895",
         "type" : "example",
         "name" : "extract run mode from Getopt::Long\n"
      },
      "id958" : {
         "params" : "$text|$message",
         "intro" : "<p>Some <tt class=\"parameter\">$text</tt> or other <tt class=\"parameter\">$message</tt> object which need to be glued before this\nmessage object.</p>\n",
         "type" : "option",
         "id" : "id958",
         "name" : "_prepend"
      },
      "id1180-id1066" : {
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "id" : "id1180-id1066",
         "name" : "type",
         "extends" : "id1180"
      },
      "id66" : {
         "name" : "addModifiers",
         "intro" : "<p>The <tt class=\"parameter\">PAIRS</tt> are a combination of an selector and a CODE which processes the\nvalue when the modifier matches.  The selector is a string or (preferred)\na regular expression. Later modifiers with the same name overrule earlier\ndefinitions.  You may also specify an ARRAY of modifiers per <a class=\"jump\" href=\"id85\">printi()</a>\nor <a class=\"jump\" href=\"id86\">printp()</a>.</p>\n\n<p>See section <a class=\"jump\" href=\"id96\">Interpolation: Modifiers</a> about the details.</p>\n",
         "id" : "id66",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id66\">addModifiers</a></b>(&nbsp;PAIRS&nbsp;)"
      },
      "id1165-id760" : {
         "extends" : "id1165",
         "name" : "accept",
         "id" : "id1165-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "type" : "option",
         "params" : "$reasons|\\@reasons"
      },
      "id543" : {
         "type" : "chapter",
         "intro" : "<p>Log::Report::Translator::Gettext - the GNU gettext infrastructure</p>\n",
         "id" : "id543",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id1171-id780" : {
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "id" : "id1171-id780",
         "name" : "format_reason",
         "extends" : "id1171"
      },
      "id1179-id1021" : {
         "id" : "id1179-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>",
         "extends" : "id1179",
         "name" : "name"
      },
      "id521" : {
         "name" : "lexicon",
         "value" : "&lt;required&gt;",
         "id" : "id521",
         "type" : "default"
      },
      "id1328" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Dispatcher::Syslog\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "id" : "id1328"
      },
      "id1190" : {
         "id" : "id1190",
         "intro" : "<p>By default, all lines in the <a class=\"jump\" href=\"id801\">Log::Report</a> packages are skipped from\ndisplay, with a simple <tt class=\"parameter\">CODE</tt> as this:</p>\n<pre>\n  sub in_lr { $_[0][0] =~ m/^Log\\:\\:Report(?:\\:\\:|$)/ }\n  Log::Report::Dispatcher-&gt;addSkipStack(\\&amp;in_lr);\n</pre>\n\n<p>The only parameter to in_lr is the return of caller().  The first\nelement of that ARRAY is the package name of a stack line.</p>\n",
         "type" : "example"
      },
      "id1174-id780" : {
         "extends" : "id1174",
         "type" : "default",
         "id" : "id1174-id780",
         "value" : "<code>undef</code>",
         "name" : "charset",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>"
      },
      "id729" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "id" : "id729",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id1123" : {
         "type" : "chapter",
         "intro" : "<p>Log::Report::Domain - administer one text-domain</p>\n",
         "id" : "id1123",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id157-id385" : {
         "extends" : "id157",
         "name" : "name",
         "id" : "id157-id385",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id157\">Log::Report::Minimal::Domain::new(name)</a></p>",
         "type" : "option",
         "params" : "STRING"
      },
      "id1003" : {
         "id" : "id1003",
         "intro" : "<p>Return the concatenation of the prepend, msgid, and append strings.  Variable\nexpansions within the msgid is not performed.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1003\">untranslated</a></b>",
         "name" : "untranslated"
      },
      "id224" : {
         "intro" : "<p>[This Dancer2 plugin was contributed by Andrew Beverley]</p>\n\n<p>This class is an extension of <a class=\"jump\" href=\"id935\">Log::Report::Message</a>, with functions\nspecifically designed for Dancer applications. Minimal functions are\nprovided (currently only aimed at Bootstrap), but ideas for new ones are\nwelcome.</p>\n",
         "type" : "chapter",
         "id" : "id224",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id133" : {
         "name" : "mode_accepts",
         "call" : "<b><a name=\"id133\">mode_accepts</a></b>(&nbsp;$mode&nbsp;)",
         "id" : "id133",
         "intro" : "<p>Returns something acceptable by <a class=\"jump\" href=\"id123\">expand_reasons()</a></p>\n",
         "type" : "function"
      },
      "id1067" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "id" : "id1067",
         "intro" : "<p>Log::Report::Dispatcher::Callback - call a code-ref for each log-line</p>\n",
         "type" : "chapter"
      },
      "id105" : {
         "level" : 3,
         "name" : "Modifier: EL or EL($width, [$replace])",
         "id" : "id105",
         "intro" : "<p>[1.00] When the string is larger than <code>$width</code> columns, then chop it\nshort and add a 'mid-line ellipsis' character: <code> ⋯  </code>.  You may also\npick another replacement string.   The comma is optional</p>\n\n<p>Attention: \"columns\" not \"characters\": it is aware of wide fonts, like\nchinese characters (see <code>%S</code> above).  The default ellipsis is also two\ncolumns wide.</p>\n<pre>\n  \"Intro: {text EL(10)}\";     # Intro: 12345678⋯ \n  \"Intro: {text EL(10,⋮)}\";   # Intro: 123456789⋮ \n  \"Intro: {text EL(10⋮)}\";    # Intro: 123456789⋮ \n  \"Intro: {text EL(10,XY)}\";  # Intro: 12345678XY \n  \"Intro: {text EL(10XY)}\";   # Intro: 12345678XY \n</pre>\n\n<p>The defaults for EL are '20' and '⋯' (mid-dots).  You can changes these\nwith <a class=\"jump\" href=\"id68\">setDefaults()</a>:</p>\n<pre>\n  $sp-&gt;setDefaults(EL =&gt; { width =&gt; 10, replace =&gt; '⋮' });\n  $sp-&gt;printi(\"Intro: {text EL}\"); # Intro: 12345678⋯ \n</pre>\n",
         "type" : "subsection",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: EL or EL($width, [$replace])"
      },
      "id836" : {
         "name" : "notice",
         "id" : "id836",
         "intro" : "<p>Short for <code>report NOTICE =&gt; $message</code></p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id836\">notice</a></b>(&nbsp;$message&nbsp;)"
      },
      "id1146-id385" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1144\">Log::Report::Domain::readConfig()</a></p>",
         "type" : "error",
         "id" : "id1146-id385",
         "extends" : "id1146",
         "name" : "unsupported context file type for $fn",
         "subroutine" : "id1144"
      },
      "id506" : {
         "id" : "id506",
         "value" : "'iso-8859-1'",
         "type" : "default",
         "name" : "charset"
      },
      "id1134" : {
         "params" : "Log::Report::Translator|\\%config",
         "intro" : "<p>Set the object which will do the translations for this domain.</p>\n",
         "id" : "id1134",
         "type" : "option",
         "name" : "translator"
      },
      "id707" : {
         "subroutine" : "id703",
         "name" : "no filename or file-handle specified for PO.",
         "type" : "error",
         "id" : "id707"
      },
      "id748-id561" : {
         "extends" : "id748",
         "name" : "add",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id748\">Log::Report::Lexicon::Table::add()</a></p>",
         "type" : "i_method",
         "id" : "id748-id561",
         "call" : "$obj-&gt;<b><a name=\"id748\">add</a></b>(&nbsp;$po&nbsp;)"
      },
      "id1196-id780" : {
         "extends" : "id1196",
         "name" : "filename",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id780",
         "params" : "STRING"
      },
      "id451" : {
         "call" : "$obj-&gt;<b><a name=\"id451\">index</a></b>",
         "type" : "i_method",
         "intro" : "<p>For internal use only.\nForce the creation of the index (if not already done).  Returns a hash\nwith key-value pairs, where the key is the lower-cased version of the\nfilename, and the value the case-sensitive version of the filename.</p>\n",
         "id" : "id451",
         "name" : "index"
      },
      "id67" : {
         "call" : "$obj-&gt;<b><a name=\"id67\">encodeFor</a></b>(&nbsp;\\%settings|undef|($predefined, %overrule)&nbsp;)",
         "intro" : "<p>[0.91] Enable/define the output encoding.  The <tt class=\"parameter\">%settings</tt> contain the <code>encoding</code>\nCODE and the tag name patterns to <code>exclude</code> from encoding.  Output for <code>HTML</code>\nis <tt class=\"parameter\">$predefined</tt>, but you may <tt class=\"parameter\">%overrule</tt> its settings.</p>\n\n<p>Read section <a class=\"jump\" href=\"id110\">Output encoding</a> about the details.</p>\n",
         "id" : "id67",
         "type" : "i_method",
         "name" : "encodeFor"
      },
      "id1217" : {
         "distribution" : "Log-Report",
         "package" : "Log::Report::Dispatcher::Perl",
         "is_pure_pod" : false,
         "title" : "send messages to die and warn",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "id" : "id1217",
         "chapters" : [
            "id1218",
            "id1344",
            "id1219",
            "id1220",
            "id1221",
            "id1306"
         ],
         "name" : "Log::Report::Dispatcher::Perl",
         "version" : "1.46"
      },
      "id164-id1122" : {
         "id" : "id164-id1122",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id164\">Log::Report::Minimal::Domain::format()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id164\">format</a></b>",
         "name" : "format",
         "extends" : "id164"
      },
      "id1151-id385" : {
         "extends" : "id1151",
         "name" : "updateContext",
         "call" : "$obj-&gt;<b><a name=\"id1151\">updateContext</a></b>(&nbsp;STRING|HASH|ARRAY|PAIRS&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1151\">Log::Report::Domain::updateContext()</a></p>",
         "id" : "id1151-id385"
      },
      "id1168-id1217" : {
         "name" : "locale",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "extends" : "id1168",
         "type" : "default",
         "value" : "&lt;system locale&gt;",
         "id" : "id1168-id1217"
      },
      "id626" : {
         "name" : "comment",
         "params" : "\\@text",
         "id" : "id626",
         "intro" : "<p>Translator added comments.\nSee <a class=\"jump\" href=\"id643\">addComment()</a>.</p>\n",
         "type" : "option"
      },
      "id845" : {
         "name" : "__",
         "examples" : [
            "id846"
         ],
         "call" : "<b><a name=\"id845\">__</a></b>(&nbsp;$msgid&nbsp;)",
         "id" : "id845",
         "intro" : "<p>This function (name is <b>two</b> under-score characters) will cause the <tt class=\"parameter\">$msgid</tt>\nto be replaced by the translations when doing the actual output.  Returned\nis a <a class=\"jump\" href=\"id935\">Log::Report::Message</a> object, which will be used in translation\nlater.  Translating is invoked when the object gets stringified.  When\nyou have no translation tables, the <tt class=\"parameter\">$msgid</tt> will be shown untranslated.</p>\n\n<p>If you need options for <a class=\"jump\" href=\"id945\">Log::Report::Message::new()</a> then use <a class=\"jump\" href=\"id847\">__x()</a>;\nthe prototype of this function does not permit parameters: it is a\nprefix operator!</p>\n",
         "type" : "function"
      },
      "id1206-id780" : {
         "extends" : "id1206",
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "type" : "option",
         "id" : "id1206-id780",
         "params" : "INTEGER"
      },
      "id124" : {
         "intro" : "<pre>  WARNING-FAULT # == WARNING,MISTAKE,ERROR,FAULT\n  WARNING,INFO  # == WARNING,INFO\n  -INFO         # == TRACE-INFO\n  ALERT-        # == ALERT,FAILURE,PANIC\n  USER          # == MISTAKE,ERROR\n  ALL           # == TRACE-PANIC\n  FATAL         # == ERROR,FAULT,FAILURE,PANIC [1.07]\n  NONE          # ==\n</pre>\n",
         "id" : "id124",
         "type" : "example",
         "name" : "of expanded REASONS\n"
      },
      "id326" : {
         "call" : "$obj-&gt;<b><a name=\"id326\">domain</a></b>(&nbsp;$name&nbsp;)",
         "intro" : "<p>Returns the textdomain with the specified <tt class=\"parameter\">$name</tt>.</p>\n",
         "type" : "i_method",
         "id" : "id326",
         "name" : "domain"
      },
      "id593" : {
         "name" : "rules",
         "id" : "id593",
         "intro" : "<p>Returns a HASH to the simplified context maps.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id593\">rules</a></b>"
      },
      "id233" : {
         "intro" : "<p>Deprecated.  See <a class=\"jump\" href=\"id232\">bootstrapColor()</a>.</p>\n",
         "type" : "i_method",
         "id" : "id233",
         "call" : "$obj-&gt;<b><a name=\"id233\">bootstrap_color</a></b>",
         "name" : "bootstrap_color"
      },
      "id205" : {
         "id" : "id205",
         "type" : "function",
         "call" : "<b><a name=\"id205\">__n</a></b>(&nbsp;$msgid, $plural_msgid, $count, PAIRS&nbsp;)",
         "name" : "__n"
      },
      "id1189-id780" : {
         "name" : "addSkipStack",
         "extends" : "id1189",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "type" : "ci_method",
         "id" : "id1189-id780",
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)"
      },
      "id1181-id1021" : {
         "extends" : "id1181",
         "name" : "mode",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "id" : "id1181-id1021",
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>"
      },
      "id1131" : {
         "id" : "id1131",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1131\">translator</a></b>",
         "name" : "translator"
      },
      "id440" : {
         "id" : "id440",
         "type" : "info",
         "name" : "read table $file as $class for $dname in $locale.",
         "subroutine" : "id438"
      },
      "id1183-id1217" : {
         "extends" : "id1183",
         "name" : "needs",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "type" : "i_method",
         "id" : "id1183-id1217",
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)"
      },
      "id783" : {
         "path" : "DESCRIPTION",
         "intro" : "<p>This dispatchers produces output tot syslog, based on the <code>Sys::Log4perl</code>\nmodule (which will not be automatically installed for you).</p>\n",
         "name" : "DESCRIPTION",
         "level" : 1,
         "id" : "id783",
         "type" : "chapter",
         "nest" : [
            "id784",
            "id785"
         ]
      },
      "id1173" : {
         "params" : "CHARSET",
         "id" : "id1173",
         "intro" : "<p>Convert the messages in the specified character-set (codeset).  By\ndefault, no conversion will take place, because the right choice cannot\nbe determined automatically.</p>\n",
         "type" : "option",
         "name" : "charset"
      },
      "id628" : {
         "type" : "option",
         "intro" : "<p>The string is not yet translated, some smart guesses may have been made.\nSee <a class=\"jump\" href=\"id651\">fuzzy()</a>.</p>\n",
         "id" : "id628",
         "params" : "BOOLEAN",
         "name" : "fuzzy"
      },
      "id1182-id760" : {
         "id" : "id1182-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>",
         "name" : "isDisabled",
         "extends" : "id1182"
      },
      "id754" : {
         "type" : "error",
         "id" : "id754",
         "subroutine" : "id753",
         "name" : "invalid plural-form algorithm '$alg'."
      },
      "id328" : {
         "id" : "id328",
         "type" : "option",
         "params" : "CHARSET",
         "name" : "charset"
      },
      "id1169-id780" : {
         "extends" : "id1169",
         "name" : "mode",
         "id" : "id1169-id780",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "type" : "option",
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3"
      },
      "id180" : {
         "call" : "<b><a name=\"id180\">report</a></b>(&nbsp;[\\%options], $reason, $message|&lt;STRING,$params>&nbsp;)",
         "diagnostics" : [
            "id185",
            "id186"
         ],
         "options" : [
            [
               "id181",
               "id182"
            ],
            [
               "id183",
               "id184"
            ]
         ],
         "type" : "function",
         "id" : "id180",
         "name" : "report",
         "intro" : "<p>Be warned that <tt class=\"parameter\">%options</tt> is a HASH here.</p>\n"
      },
      "id1054" : {
         "name" : "tag",
         "params" : "$tag|REGEX",
         "intro" : "<p>[1.44] Only return the exception if it was fatal, and in the same time in\nthe specified <tt class=\"parameter\">$tag</tt> (as string) or matches the REGEX.\nSee <a class=\"jump\" href=\"id998\">Log::Report::Message::taggedWith()</a></p>\n",
         "id" : "id1054",
         "type" : "option"
      },
      "id1256" : {
         "name" : "toHTML",
         "intro" : "<p>[1.11] Calls <a class=\"jump\" href=\"id1254\">toString()</a> and then escapes HTML volatile characters.</p>\n",
         "id" : "id1256",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1256\">toHTML</a></b>(&nbsp;[$locale]&nbsp;)"
      },
      "id573" : {
         "subroutine" : "id567",
         "name" : "header not found for charset in $fn.",
         "id" : "id573",
         "type" : "error"
      },
      "id1334" : {
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Optional\n   is an Exporter\n</pre>\n",
         "id" : "id1334",
         "type" : "chapter",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id259" : {
         "name" : "Error handler based on URL (e.g. API)\n",
         "id" : "id259",
         "intro" : "<pre>  fatal_handler sub {\n    my ($dsl, $msg, $reason) = @_;\n    return if $dsl-&gt;app-&gt;request-&gt;uri !~ m!^/api/!;\n    status $reason eq 'PANIC' ? 'Internal Server Error' : 'Bad Request';\n    $dsl-&gt;send_as(JSON =&gt; {\n        error             =&gt; 1,\n        error_description =&gt; $msg-&gt;toString,\n    }, {\n        content_type =&gt; 'application/json; charset=UTF-8',\n    });\n  };\n</pre>\n",
         "type" : "example"
      },
      "id69" : {
         "name" : "setting defaults\n",
         "type" : "example",
         "intro" : "<pre>  $sp-&gt;setDefaults(EL =&gt; {width =&gt; 30}, CHOP =&gt; {width =&gt; 10});\n\n  my %defs = (EL =&gt; {width =&gt; 30}, CHOP =&gt; {width =&gt; 10});\n  $sp-&gt;setDefaults(\\%defs);\n</pre>\n",
         "id" : "id69"
      },
      "id865" : {
         "id" : "id865",
         "type" : "function",
         "call" : "<b><a name=\"id865\">__npx</a></b>(&nbsp;$msgctxt, $msgid, $plural, count, PAIRS&nbsp;)",
         "name" : "__npx"
      },
      "id508" : {
         "id" : "id508",
         "type" : "info",
         "name" : "no Perl in file $filename.",
         "subroutine" : "id504"
      },
      "id1051" : {
         "call" : "$obj-&gt;<b><a name=\"id1051\">failed</a></b>",
         "id" : "id1051",
         "intro" : "<p>Returns <code>true</code> if the block was left with an fatal message.</p>\n",
         "type" : "i_method",
         "name" : "failed"
      },
      "id1331" : {
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Dispatcher::Callback\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "type" : "chapter",
         "id" : "id1331",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id213" : {
         "name" : "syntax flag must be either SHORT or REPORT, not `$flag'",
         "subroutine" : "id212",
         "id" : "id213",
         "type" : "error"
      },
      "id963-id221" : {
         "name" : "_tag",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id962\">Log::Report::Message::new(_tag)</a></p>",
         "extends" : "id963",
         "id" : "id963-id221",
         "type" : "default",
         "value" : "[]"
      },
      "id534-id493" : {
         "extends" : "id534",
         "name" : "cleanup",
         "call" : "$obj-&gt;<b><a name=\"id534\">cleanup</a></b>(&nbsp;%options&nbsp;)",
         "id" : "id534-id493",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id534\">Log::Report::Extract::cleanup()</a></p>",
         "type" : "i_method",
         "options" : [
            [
               "id535-id493",
               "id536-id493"
            ]
         ]
      },
      "id460" : {
         "level" : 2,
         "name" : "Example",
         "intro" : "<p>My module is named <code>Some::Module</code> and installed in some of perl's\ndirectories, say <code>~perl5</code>.  The module is defining textdomain\n<code>my-domain</code>.  The translation is made into <code>nl-NL.utf-8</code> (locale for\nDutch spoken in The Netherlands, utf-8 encoded text file).</p>\n\n<p>The translation table is taken from the first existing of these files:</p><pre>\n  nl-NL.utf-8/LC_MESSAGES/my-domain.po\n  nl-NL.utf-8/LC_MESSAGES/my-domain.po\n  nl-NL.utf8/LC_MESSAGES/my-domain.po\n  nl-NL/LC_MESSAGES/my-domain.po\n  nl/LC_MESSAGES/my-domain.po\n</pre>\n\n<p>Then, attempts are made which are not compatible with gettext.  The\nadvantage is that the directory structure is much simpler.  The idea\nis that each domain has its own locale installation directory, instead\nof everything merged in one place, what gettext presumes.</p>\n\n<p>In order of attempts:</p><pre>\n  nl-NL.utf-8/my-domain.po\n  nl-NL.utf8/my-domain.po\n  nl-NL/my-domain.po\n  nl/my-domain.po\n  my-domain/nl-NL.utf8.po\n  my-domain/nl-NL.po\n  my-domain/nl.po\n</pre>\n\n<p>Filenames may get mutulated by the platform (which we will try to hide\nfrom you [please help improve this]), and are treated case-INsensitive!</p>\n",
         "type" : "section",
         "id" : "id460",
         "path" : "DETAILS/Example"
      },
      "id1188-id1217" : {
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "id" : "id1188-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "type" : "ci_method",
         "name" : "collectStack",
         "extends" : "id1188"
      },
      "id1178" : {
         "path" : "METHODS/Attributes",
         "subroutines" : [
            "id1180",
            "id1179",
            "id1183",
            "id1181",
            "id1182"
         ],
         "type" : "section",
         "id" : "id1178",
         "name" : "Attributes",
         "level" : 2
      },
      "id280" : {
         "path" : "DETAILS/Setup and Configuration/Dancer2::Plugin::LogReport",
         "intro" : "<p>To use the plugin, you simply use it in your application:</p>\n<pre>\n  package MyApp;\n  use Log::Report ();  # use early and minimal once\n  use Dancer2;\n  use Dancer2::Plugin::LogReport %config;\n</pre>\n\n<p><a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a> takes the same <code>%config</code> options as\n<a class=\"jump\" href=\"id801\">Log::Report</a> itself (see <a class=\"jump\" href=\"id867\">Log::Report::import()</a>).</p>\n\n<p>If you want to send messages from your modules/models, there is\nno need to use this specific plugin. Instead, you should simply\n<code>use Log::Report</code> to negate the need of loading all the Dancer2\nspecific code.</p>\n",
         "id" : "id280",
         "type" : "subsection",
         "name" : "Dancer2::Plugin::LogReport",
         "level" : 3
      },
      "id1046" : {
         "name" : "Logging",
         "level" : 2,
         "path" : "METHODS/Logging",
         "type" : "section",
         "id" : "id1046",
         "subroutines" : [
            "id1047",
            "id1189-id1021",
            "id1188-id1021",
            "id1185-id1021",
            "id1192-id1021",
            "id1191-id1021",
            "id1193-id1021",
            "id1187-id1021",
            "id1049",
            "id1048"
         ]
      },
      "id1244" : {
         "name" : "isFatal",
         "examples" : [
            "id1245"
         ],
         "intro" : "<p>Returns whether this exception has a severity which makes it fatal\nwhen thrown. [1.34] This can have been overruled with the <code>is_fatal</code>\nattribute.  See <a class=\"jump\" href=\"id129\">Log::Report::Util::is_fatal()</a>.</p>\n",
         "id" : "id1244",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1244\">isFatal</a></b>"
      },
      "id159" : {
         "id" : "id159",
         "intro" : "<p>A good choice is to use Perl's distribution name for the domain name.  For instance,\nthe domain name for this module would be set this way:</p>\n<pre>\n  use Log::Report 'log-report-optional';\n  use Log::Report 'log-report-opt';\n</pre>\n",
         "type" : "example",
         "name" : "textdomain name choice\n"
      },
      "id64" : {
         "type" : "example",
         "intro" : "<pre>  my $f = String::Print-&gt;new(\n    modifiers   =&gt; [ EUR   =&gt; sub {sprintf \"%5.2f e\", $_[0]} ],\n    serializers =&gt; [ UNDEF =&gt; sub {'-'} ],\n    encode_for  =&gt; 'HTML',\n  );\n\n  $f-&gt;printi(\"price: {p EUR}\", p =&gt; 3.1415); # price: ␣␣3.14 e\n  $f-&gt;printi(\"count: {c}\", c =&gt; undef);      # count: -\n</pre>\n",
         "id" : "id64"
      },
      "id730" : {
         "id" : "id730",
         "intro" : "<p>This module is the main extry point for the distribution, but has\ncurrently no further use.  This distribution contains all components\nof <a class=\"jump\" href=\"id801\">Log::Report</a> which handle translations.</p>\n\n<p>If you do not need translations, you do not need to install this module.\nWhen you use <a class=\"jump\" href=\"id801\">Log::Report</a> and need to add translations, it may be\nvery little work: when you nicely wrote texts in the advised message\nformat like</p>\n<pre>\n  print __x\"Greetings to you, {name}\", name =&gt; $name;\n  fault __x\"cannot open file {filename}\", filename =&gt; $fn;\n</pre>\n\n<p>then all is in perfect condition to introduce translations: it requires\nvery little to no additions to the existing code!</p>\n\n<p>In this distribution:</p>\n\n<ul>\n\n\n\n<p><li><a class=\"jump\" href=\"id513\">Log::Report::Extract</a><br />\nLogic used by the <i class=\"filename\">xgettext-perl</i> binary (also included here) to\nextract msgid's from perl scripts and (website) templates.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id735\">Log::Report::Lexicon::Table</a><br />\nTranslation table administration, in PO or MO format.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id441\">Log::Report::Lexicon::Index</a><br />\nTranslation table file file administration, understanding locales,\ndomains, and attributes in the filenames.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id1080\">Log::Report::Translator</a><br />\nThe run-time component of translations.</p>\n</ul>\n",
         "type" : "chapter",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id838" : {
         "name" : "mistake",
         "type" : "function",
         "intro" : "<p>Short for <code>report MISTAKE =&gt; $message</code></p>\n",
         "id" : "id838",
         "call" : "<b><a name=\"id838\">mistake</a></b>(&nbsp;$message&nbsp;)"
      },
      "id541-id493" : {
         "name" : "no context tags allowed in plural `$msgid'",
         "extends" : "id541",
         "subroutine" : "id540",
         "type" : "error",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id540\">Log::Report::Extract::store()</a></p>",
         "id" : "id541-id493"
      },
      "id1087" : {
         "level" : 2,
         "name" : "Attributes",
         "type" : "section",
         "id" : "id1087",
         "path" : "METHODS/Attributes"
      },
      "id563" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  # using a PO table efficiently\n  my $pot = Log::Report::Lexicon::POTcompact-&gt;read('po/nl.po')\n     or die;\n\n  my $header = $pot-&gt;msgid('');\n  print $pot-&gt;msgstr('msgid', 3);\n</pre>\n",
         "id" : "id563",
         "path" : "SYNOPSIS"
      },
      "id816" : {
         "name" : "locale",
         "params" : "$locale",
         "id" : "id816",
         "intro" : "<p>Use this specific <tt class=\"parameter\">$locale</tt>, in stead of the user's preference.</p>\n",
         "type" : "option"
      },
      "id875" : {
         "name" : "message_class",
         "id" : "id875",
         "value" : "<code>Log::Report::Message</code>",
         "type" : "default"
      },
      "id113" : {
         "id" : "id113",
         "intro" : "<p>There are a quite a number of modules on CPAN which extend the functionality\nof <code>printf()</code>.  To name a few:\n<a href=\"https://metacpan.org/dist/String-Format\" target=\"_blank\">String::Format</a>,\n<a href=\"https://metacpan.org/dist/String-Errf\" target=\"_blank\">String::Errf</a>,\n<a href=\"https://metacpan.org/dist/String-Formatter\" target=\"_blank\">String::Formatter</a>,\n<a href=\"https://metacpan.org/dist/Text-Sprintf-Named\" target=\"_blank\">Text::Sprintf::Named</a>,\n<a href=\"https://metacpan.org/dist/Acme-StringFormat\" target=\"_blank\">Acme::StringFormat</a>,\n<a href=\"https://metacpan.org/dist/Text-sprintfn\" target=\"_blank\">Text::sprintf</a>,\n<a href=\"https://metacpan.org/dist/Log-Sprintf\" target=\"_blank\">Log::Sprintf</a>, and\n<a href=\"https://metacpan.org/dist/String-Sprintf\" target=\"_blank\">String::Sprintf</a>.\nThey are all slightly different.</p>\n\n<p>When the <code>String::Print</code> module was created, none of the modules\nmentioned above handled unicode correctly.  Global configuration\nof serializers and modifiers is also usually not possible, sometimes\nprovided per explicit function call.  Only <code>String::Print</code> cleanly\nseparates the roles of serializers, modifiers, and conversions.</p>\n\n<p><code>String::Print</code> is nicely integrated with <a class=\"jump\" href=\"id801\">Log::Report</a>.</p>\n",
         "type" : "section",
         "path" : "DETAILS/String::Print compared to other modules on CPAN",
         "level" : 2,
         "name" : "String::Print compared to other modules on CPAN"
      },
      "id523-id493" : {
         "name" : "charset",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id522\">Log::Report::Extract::new(charset)</a></p>",
         "extends" : "id523",
         "id" : "id523-id493",
         "type" : "default",
         "value" : "'utf-8'"
      },
      "id1323" : {
         "name" : "Addition information",
         "level" : 3,
         "path" : "DETAILS/Processing the message/Addition information",
         "type" : "subsection",
         "id" : "id1323"
      },
      "id1128" : {
         "intro" : "<p>Create a new Domain object.</p>\n",
         "type" : "c_method",
         "id" : "id1128",
         "options" : [
            [
               "id157-id1122",
               "id158-id1122"
            ]
         ],
         "call" : "$class-&gt;<b><a name=\"id1128\">new</a></b>(&nbsp;%options&nbsp;)",
         "name" : "new"
      },
      "id1008" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id1008",
         "name" : "serializer"
      },
      "id956" : {
         "id" : "id956",
         "intro" : "<p>The category when the real gettext library is used, for instance\nLC_MESSAGES.</p>\n",
         "type" : "option",
         "params" : "INTEGER",
         "name" : "_category"
      },
      "id1185-id760" : {
         "extends" : "id1185",
         "name" : "close",
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1185\">Log::Report::Dispatcher::close()</a></p>",
         "type" : "i_method",
         "id" : "id1185-id760"
      },
      "id470" : {
         "id" : "id470",
         "type" : "error",
         "subroutine" : "id467",
         "name" : "unsupported explicit charset $charset for $fn."
      },
      "id1241" : {
         "path" : "METHODS/Attributes",
         "type" : "section",
         "id" : "id1241",
         "subroutines" : [
            "id1243",
            "id1244",
            "id1246",
            "id1242"
         ],
         "name" : "Attributes",
         "level" : 2
      },
      "id973-id221" : {
         "name" : "_join",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id972\">Log::Report::Message::new(_join)</a></p>",
         "extends" : "id973",
         "type" : "default",
         "value" : "<code>$\"</code>  <code>$LIST_SEPARATOR</code>",
         "id" : "id973-id221"
      },
      "id261" : {
         "subroutine" : "id258",
         "name" : "An unexpected error has occurred",
         "type" : "error",
         "id" : "id261"
      },
      "id1036" : {
         "value" : "'NONE'",
         "id" : "id1036",
         "type" : "default",
         "name" : "hide"
      },
      "id1234" : {
         "call" : "$class-&gt;<b><a name=\"id1234\">new</a></b>(&nbsp;%options&nbsp;)",
         "options" : [
            [
               "id1239",
               "id1240"
            ],
            [
               "id1237",
               "id1238"
            ],
            [
               "id1235",
               "id1236"
            ]
         ],
         "type" : "c_method",
         "intro" : "<p>Create a new exception object, which is basically a <tt class=\"parameter\">message</tt> which\nwas produced for a <tt class=\"parameter\">reason</tt>.</p>\n",
         "id" : "id1234",
         "name" : "new"
      },
      "id1356" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Translator::Gettext\n   is a <a class=\"jump\" href=\"id1080\">Log::Report::Translator</a>\n</pre>\n",
         "id" : "id1356",
         "type" : "chapter"
      },
      "id1070" : {
         "intro" : "<pre>  sub send_mail($$$)\n  {   my ($disp, $options, $reason, $message) = @_;\n      my $msg = Mail::Send-&gt;new(Subject =&gt; $reason, To =&gt; 'admin@localhost');\n      my $fh  = $msg-&gt;open('sendmail');\n      print $fh $disp-&gt;translate($reason, $message);\n      close $fh;\n  }\n\n  dispatcher CALLBACK =&gt; 'mail', callback =&gt; \\&amp;send_mail;\n</pre>\n",
         "id" : "id1070",
         "type" : "example"
      },
      "id1174-id760" : {
         "name" : "charset",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "extends" : "id1174",
         "value" : "<code>undef</code>",
         "id" : "id1174-id760",
         "type" : "default"
      },
      "id1117" : {
         "call" : "$obj-&gt;<b><a name=\"id1117\">close</a></b>",
         "intro" : "<p>Only when initiated with a FILENAME, the file will be closed.  In any\nother case, nothing will be done.</p>\n",
         "id" : "id1117",
         "type" : "i_method",
         "name" : "close"
      },
      "id84" : {
         "name" : "_append",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id84"
      },
      "id564" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "intro" : "<p>This module is translating, based on PO files. PO files are used to store\ntranslations in humanly readable format for most of existing translation\nframeworks, like GNU gettext and Perl's Maketext.</p>\n\n<p>Internally, this module tries to be as efficient as possible: high\nspeed and low memory foot-print.  You will not be able to sub-class\nthis class cleanly.</p>\n\n<p>If you like to change the content of PO files, then use\n<a class=\"jump\" href=\"id669\">Log::Report::Lexicon::POT</a>.</p>\n",
         "id" : "id564",
         "type" : "chapter",
         "path" : "DESCRIPTION"
      },
      "id338" : {
         "name" : "Template (Toolkit) base-class",
         "level" : 2,
         "path" : "METHODS/Template (Toolkit) base-class",
         "intro" : "<p>The details of the following functions can be found in the Template\nmanual page.  They are included here for reference only.</p>\n",
         "id" : "id338",
         "type" : "section",
         "subroutines" : [
            "id339",
            "id340"
         ]
      },
      "id171" : {
         "name" : "Translating",
         "level" : 2,
         "path" : "METHODS/Translating",
         "subroutines" : [
            "id172"
         ],
         "type" : "section",
         "id" : "id171"
      },
      "id638" : {
         "name" : "msgid",
         "id" : "id638",
         "intro" : "<p>Returns the actual msgid, which cannot be <code>undef</code>.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id638\">msgid</a></b>"
      },
      "id449" : {
         "name" : "directory",
         "call" : "$obj-&gt;<b><a name=\"id449\">directory</a></b>",
         "intro" : "<p>Returns the directory name.</p>\n",
         "type" : "i_method",
         "id" : "id449"
      },
      "id675" : {
         "options" : [
            [
               "id676",
               "id677"
            ],
            [
               "id690",
               "id691"
            ],
            [
               "id692",
               "id693"
            ],
            [
               "id688",
               "id689"
            ],
            [
               "id682",
               "id683"
            ],
            [
               "id684",
               "id685"
            ],
            [
               "id686",
               "id687"
            ],
            [
               "id678",
               "id679"
            ],
            [
               "id680",
               "id681"
            ]
         ],
         "id" : "id675",
         "type" : "c_method",
         "diagnostics" : [
            "id694"
         ],
         "call" : "$class-&gt;<b><a name=\"id675\">new</a></b>(&nbsp;%options&nbsp;)",
         "name" : "new",
         "intro" : "<p>Create a new POT file.  The initial header is generated for you, but\nit can be changed using the <a class=\"jump\" href=\"id721\">header()</a> method.</p>\n"
      },
      "id616" : {
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id617"
         ],
         "type" : "section",
         "id" : "id616",
         "name" : "Constructors",
         "level" : 2
      },
      "id962" : {
         "params" : "$tags|\\@tags",
         "intro" : "<p>When messages are used for exception based programming, you add a\n<tt class=\"parameter\">_tag</tt> parameter to the argument list.  Later, with for instance\n<a class=\"jump\" href=\"id1054\">Log::Report::Dispatcher::Try::wasFatal(tag)</a>, you can check the\ncategory (group, class) of the exception.</p>\n\n<p>The <tt class=\"parameter\">$tags</tt> is interpreted as comma- and/or blank separated list of class\ntokens (barewords), the ARRAY lists all tags separately. See <a class=\"jump\" href=\"id990\">tags()</a>.</p>\n",
         "type" : "option",
         "id" : "id962",
         "name" : "_tag"
      },
      "id524-id493" : {
         "subroutine" : "id519",
         "name" : "extractions require an explicit lexicon directory.",
         "extends" : "id524",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id519\">Log::Report::Extract::new()</a></p>",
         "type" : "error",
         "id" : "id524-id493"
      },
      "id375" : {
         "id" : "id375",
         "type" : "info",
         "name" : "processing file $file in $charset.",
         "subroutine" : "id370"
      },
      "id316" : {
         "id" : "id316",
         "type" : "error",
         "name" : "illegal value '$value' for 'processing_errors' option.",
         "subroutine" : "id305"
      },
      "id988" : {
         "call" : "$obj-&gt;<b><a name=\"id988\">context</a></b>",
         "type" : "i_method",
         "intro" : "<p>Returns an HASH if there is a context defined for this message.</p>\n",
         "id" : "id988",
         "name" : "context"
      },
      "id977" : {
         "name" : "_context",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id977"
      },
      "id1231" : {
         "call" : "overload <b><a name=\"id1231\">bool</a></b>; boolean condition",
         "intro" : "<p>Always returns <code>true</code>: the exception object exists.</p>\n",
         "type" : "overload",
         "id" : "id1231",
         "name" : "bool"
      },
      "id974-id221" : {
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id974\">Log::Report::Message::new(_lang)</a></p>",
         "id" : "id974-id221",
         "params" : "ISO",
         "extends" : "id974",
         "name" : "_lang"
      },
      "id1165-id780" : {
         "name" : "accept",
         "extends" : "id1165",
         "params" : "$reasons|\\@reasons",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "id" : "id1165-id780",
         "type" : "option"
      },
      "id1171-id760" : {
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "id" : "id1171-id760",
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE",
         "extends" : "id1171",
         "name" : "format_reason"
      },
      "id1273" : {
         "subroutines" : [
            "id940-id221",
            "id942-id221",
            "id941-id221"
         ],
         "type" : "chapter",
         "id" : "id1273",
         "path" : "OVERLOADED",
         "level" : 1,
         "name" : "OVERLOADED"
      },
      "id828" : {
         "id" : "id828",
         "type" : "error",
         "name" : "the 'needs' sub-command parameter '$need' is not a reason.",
         "subroutine" : "id825"
      },
      "id753" : {
         "type" : "i_method",
         "id" : "id753",
         "diagnostics" : [
            "id754"
         ],
         "call" : "$obj-&gt;<b><a name=\"id753\">setupPluralAlgorithm</a></b>",
         "name" : "setupPluralAlgorithm",
         "intro" : "<p>This method needs to be called after setting (reading or creating) a new\ntable header, to interpret the plural algorithm as specified in the\n<code>Plural-Forms</code> header field.  [1.09] The header field is not required\nwhen not used.</p>\n\n<p>A full list of plural forms per language can be found at\n<a href=\"https://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html\" target=\"_blank\">https://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html</a></p>\n"
      },
      "id271" : {
         "name" : "alert",
         "call" : "$obj-&gt;<b><a name=\"id271\">alert</a></b>",
         "id" : "id271",
         "type" : "i_method"
      },
      "id1206-id760" : {
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "id" : "id1206-id760",
         "params" : "INTEGER",
         "extends" : "id1206",
         "name" : "max_params"
      },
      "id1020" : {
         "name" : "Avoiding repetative translations",
         "level" : 3,
         "path" : "DETAILS/Automatic parameters/Avoiding repetative translations",
         "type" : "subsection",
         "intro" : "<p>This way of translating is somewhat expensive, because an object to\nhandle the <code>Log::Report::__x()</code> is created each time.</p>\n<pre>\n  for my $i (1..100_000)\n  {   print __x \"Hello World {i}\\n\", i =&gt; $i;\n  }\n</pre>\n\n<p>The suggestion that Locale::TextDomain makes to improve performance,\nis to get the translation outside the loop, which only works without\ninterpolation:</p>\n<pre>\n  use Locale::TextDomain;\n  my $i = 42;\n  my $s = __x(\"Hello World {i}\\n\", i =&gt; $i);\n  foreach $i (1..100_000)\n  {   print $s;\n  }\n</pre>\n\n<p><b>Oops,</b> not what you mean because the first value of <code>$i</code> is captured\nin the initial message object.  With <a class=\"jump\" href=\"id801\">Log::Report</a>, you can do it (except\nwhen you use contexts)</p>\n<pre>\n  use Log::Report;\n  my $i;\n  my $s = __x(\"Hello World {i}\\n\", i =&gt; \\$i);\n  foreach $i (1..100_000)\n  {   print $s;\n  }\n</pre>\n\n<p>Mind you not to write: <code>for my $i</code> in above case!!!!</p>\n\n<p>You can also write an incomplete translation:</p>\n<pre>\n  use Log::Report;\n  my $s = __x \"Hello World {i}\\n\";\n  foreach my $i (1..100_000)\n  {   print $s-&gt;(i =&gt; $i);\n  }\n</pre>\n\n<p>In either case, the translation will be looked-up only once.</p>\n",
         "id" : "id1020"
      },
      "id720" : {
         "name" : "the only acceptable parameter is 'ACTIVE', not '$p'.",
         "subroutine" : "id719",
         "type" : "error",
         "id" : "id720"
      },
      "id168-id385" : {
         "name" : "formatter",
         "extends" : "id168",
         "params" : "CODE|\\%config|'PRINTI'",
         "id" : "id168-id385",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id168\">Log::Report::Minimal::Domain::configure(formatter)</a></p>",
         "type" : "option"
      },
      "id1100" : {
         "name" : "replace",
         "params" : "BOOLEAN",
         "intro" : "<p>Only used in combination with a <tt class=\"parameter\">to</tt> filename: throw away the old file\nif it exists.  Probably you wish to append to existing information.</p>\n\n<p>Use the locale setting by default, which is LC_CTYPE or LC_ALL or LANG\n(in that order).  If these contain a character-set which Perl understands,\nthen that is used, otherwise silently ignored.</p>\n",
         "type" : "option",
         "id" : "id1100"
      },
      "id1344" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Dispatcher::Perl\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "id" : "id1344",
         "type" : "chapter",
         "path" : "INHERITANCE"
      },
      "id161" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "subroutines" : [
            "id162",
            "id165",
            "id164",
            "id163"
         ],
         "type" : "section",
         "id" : "id161"
      },
      "id1189-id760" : {
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "type" : "ci_method",
         "id" : "id1189-id760",
         "name" : "addSkipStack",
         "extends" : "id1189"
      },
      "id1093" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  dispatcher Log::Report::Dispatcher::File =&gt; 'stderr',\n    to =&gt; \\*STDERR, accept =&gt; 'NOTICE-';\n\n  # close a dispatcher\n  dispatcher close =&gt; 'stderr';\n\n  # let dispatcher open and close the file\n  dispatcher FILE =&gt; 'mylog', to =&gt; '/var/log/mylog', charset =&gt; 'utf-8';\n  ...\n  dispatcher close =&gt; 'mylog';  # will close file\n\n  # open yourself, then also close yourself\n  open OUT, \">:encoding('iso-8859-1')\", '/var/log/mylog'\n      or fault \"...\";\n  dispatcher FILE =&gt; 'mylog', to =&gt; \\*OUT;\n  ...\n  dispatcher close =&gt; 'mylog';\n  close OUT;\n\n  # dispatch into a scalar\n  my $output = '';\n  open $outfile, '>', \\$output;\n  dispatcher FILE =&gt; 'into-scalar', to =&gt; \\$outfile;\n  ...\n  dispatcher close =&gt; 'into-scalar';\n  print $output;\n</pre>\n",
         "id" : "id1093",
         "path" : "SYNOPSIS"
      },
      "id574" : {
         "type" : "error",
         "id" : "id574",
         "name" : "cannot detect charset in $fn.",
         "subroutine" : "id567"
      },
      "id972" : {
         "name" : "_join",
         "intro" : "<p>Which <tt class=\"parameter\">$separator</tt> string to be used then an ARRAY is being filled-in.</p>\n",
         "id" : "id972",
         "type" : "option",
         "params" : "$separator"
      },
      "id89" : {
         "path" : "DETAILS",
         "intro" : "<pre>  Your manual-page reader may not support the unicode used\n  in some of the examples below.\n</pre>\n",
         "name" : "DETAILS",
         "level" : 1,
         "type" : "chapter",
         "id" : "id89",
         "nest" : [
            "id90",
            "id91",
            "id92",
            "id95",
            "id96",
            "id110",
            "id113"
         ]
      },
      "id1341" : {
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Template\n   is a Template\n</pre>\n",
         "id" : "id1341",
         "path" : "INHERITANCE",
         "level" : 1,
         "name" : "INHERITANCE"
      },
      "id665" : {
         "value" : "<code>undef</code>",
         "id" : "id665",
         "type" : "default",
         "name" : "nr_plurals"
      },
      "id1196-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id760",
         "type" : "option",
         "params" : "STRING",
         "extends" : "id1196",
         "name" : "filename"
      },
      "id967" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id967",
         "name" : "_classes"
      },
      "id511" : {
         "name" : "string is incorrect at line $line: $error",
         "subroutine" : "id504",
         "id" : "id511",
         "type" : "error"
      },
      "id499" : {
         "path" : "DESCRIPTION/The extraction process/What is not extracted?",
         "id" : "id499",
         "intro" : "<p><b>Not</b> extracted are the usage of anything above, where the first\nparameter is not a simple string.  Not extracted are</p>\n<pre>\n  __x($format, @more)\n  __x$format, @more\n  __x(+$format, _domain =&gt; 'other domain', @more)\n  __x($first.$second, @more)\n</pre>\n\n<p>In these cases, you have to use <code>N__()</code> functions to declare the possible\nvalues of <code>$format</code>.</p>\n",
         "type" : "subsection",
         "name" : "What is not extracted?",
         "level" : 3
      },
      "id1290" : {
         "path" : "DETAILS/Configuring/configuring your own formatter",
         "id" : "id1290",
         "type" : "subsection",
         "name" : "configuring your own formatter",
         "level" : 3
      },
      "id365" : {
         "id" : "id365",
         "type" : "error",
         "name" : "template extract requires explicit domain.",
         "subroutine" : "id360"
      },
      "id719" : {
         "type" : "i_method",
         "id" : "id719",
         "diagnostics" : [
            "id720"
         ],
         "call" : "$obj-&gt;<b><a name=\"id719\">translations</a></b>(&nbsp;[$active]&nbsp;)",
         "name" : "translations",
         "intro" : "<p>Returns a list with all defined <a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a> objects. When\nthe string <tt class=\"parameter\">$active</tt> is given as parameter, only objects which have\nreferences are returned.</p>\n"
      },
      "id1180-id905" : {
         "extends" : "id1180",
         "name" : "type",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "type" : "i_method",
         "id" : "id1180-id905",
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>"
      },
      "id1223" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "subroutines" : [
            "id1180-id1217",
            "id1179-id1217",
            "id1183-id1217",
            "id1181-id1217",
            "id1182-id1217"
         ],
         "type" : "section",
         "id" : "id1223"
      },
      "id964-id221" : {
         "params" : "$tags|\\@tags",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id964\">Log::Report::Message::new(_tags)</a></p>",
         "type" : "option",
         "id" : "id964-id221",
         "name" : "_tags",
         "extends" : "id964"
      },
      "id481" : {
         "subroutine" : "id467",
         "name" : "cannot seek to $loc in $fn for transl strings: $!",
         "id" : "id481",
         "type" : "fault"
      },
      "id1144" : {
         "name" : "readConfig",
         "intro" : "<p>Helper method, which simply parses the content <tt class=\"parameter\">$filename</tt> into a HASH to be\nused as parameters to <a class=\"jump\" href=\"id1133\">configure()</a>. The filename must end on '.pl',\nto indicate that it uses perl syntax (can be processed with Perl's <code>do</code>\ncommand) or end on '.json'.  See also chapter <a class=\"jump\" href=\"id1155\">Configuring</a> below.</p>\n\n<p>Currently, this file can be in Perl native format (when ending on <code>.pl</code>)\nor JSON (when it ends with <code>.json</code>).  Various modules may explain parts\nof what can be found in these files, for instance\n<a class=\"jump\" href=\"id583\">Log::Report::Translator::Context</a>.</p>\n",
         "type" : "ci_method",
         "id" : "id1144",
         "call" : "$any-&gt;<b><a name=\"id1144\">readConfig</a></b>(&nbsp;$filename&nbsp;)",
         "diagnostics" : [
            "id1145",
            "id1146"
         ]
      },
      "id87" : {
         "intro" : "<p>Where <a class=\"jump\" href=\"id76\">sprinti()</a> uses named parameters --especially useful when the\nstrings need translation-- this function stays close to the standard\n<code>sprintf()</code>.  All features of POSIX formats are supported.  This\nshould say enough: you can use <code>%3$0#5.*d</code>, if you like.</p>\n\n<p>It may be useful to know that the positional <tt class=\"parameter\">$format</tt> is rewritten and\nthen fed into <a class=\"jump\" href=\"id76\">sprinti()</a>.  <b>Be careful</b> with the length of the <tt class=\"parameter\">@positionals</tt>:\nsuperfluous parameter <tt class=\"parameter\">%options</tt> are passed along to <code>sprinti()</code>, and\nshould only contain \"specials\": parameter names which start with '_'.</p>\n",
         "type" : "function",
         "id" : "id87",
         "call" : "<b><a name=\"id87\">sprintp</a></b>(&nbsp;$format, @positionals, %options&nbsp;)",
         "examples" : [
            "id88"
         ],
         "name" : "sprintp"
      },
      "id1300" : {
         "id" : "id1300",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Addition information",
         "level" : 3,
         "name" : "Addition information"
      },
      "id992" : {
         "name" : "addTags",
         "intro" : "<p>[1.45] Add zero or more tags to this message.</p>\n",
         "id" : "id992",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id992\">addTags</a></b>(&nbsp;@tags&nbsp;)"
      },
      "id1098" : {
         "intro" : "<p>You can either specify a <tt class=\"parameter\">$file</tt> by name, which is opened in append mode with\nautoflush on. Or pass any kind of file handle <tt class=\"parameter\">$fh</tt>, or some OBJECT which\nimplements a <code>print()</code> method. You probably want to have autoflush\nenabled on your file-handles.</p>\n\n<p>When cleaning-up the dispatcher, the file will only be closed in case\nof a named <tt class=\"parameter\">$file</tt>.</p>\n\n<p>[1.10] When you pass a CODE, then for each log message the function is\ncalled with two arguments: this dispatcher object and the message object.\nIn some way (maybe via the message context) you have to determine the\nlog filename.  This means that probably many log-files are open at the\nsame time.</p>\n<pre>\n  # configuration time\n  dispatcher FILE =&gt; 'logfile', to =&gt;\n     sub { my ($disp, $msg) = @_; $msg-&gt;context-&gt;{logfile} };\n\n  # whenever you want to change the logfile\n  textdomain-&gt;updateContext(logfile =&gt; '/var/log/app');\n  (textdomain 'mydomain')-&gt;setContext(logfile =&gt; '/var/log/app');\n\n  # or\n  error __x\"help\", _context =&gt; {logfile =&gt; '/dev/tty'};\n  error __x\"help\", _context =&gt; \"logfile=/dev/tty\";\n</pre>\n",
         "type" : "option",
         "id" : "id1098",
         "params" : "$file|$fh|OBJECT|CODE",
         "name" : "to"
      },
      "id141" : {
         "subroutine" : "id140",
         "name" : "unknown locale language in locale '$locale'.",
         "id" : "id141",
         "type" : "error"
      },
      "id163-id1122" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id163\">Log::Report::Minimal::Domain::isConfigured()</a></p>",
         "type" : "i_method",
         "id" : "id163-id1122",
         "call" : "$obj-&gt;<b><a name=\"id163\">isConfigured</a></b>",
         "extends" : "id163",
         "name" : "isConfigured"
      },
      "id521-id354" : {
         "name" : "lexicon",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id520\">Log::Report::Extract::new(lexicon)</a></p>",
         "extends" : "id521",
         "type" : "default",
         "id" : "id521-id354",
         "value" : "&lt;required&gt;"
      },
      "id479" : {
         "subroutine" : "id467",
         "name" : "cannot seek to $loc in $fn for msgid strings: $!",
         "type" : "fault",
         "id" : "id479"
      },
      "id826" : {
         "name" : "play with dispatchers\n",
         "type" : "example",
         "intro" : "<pre>  dispatcher Log::Dispatcher::File =&gt; mylog =&gt;,\n    accept   =&gt; 'MISTAKE-',    # for wrapper\n    locale   =&gt; 'pt_BR',       # other language\n    filename =&gt; 'logfile';     # for back-end\n\n  dispatcher close =&gt; 'mylog';  # cleanup\n  my $obj = dispatcher find =&gt; 'mylog';\n  my @obj = dispatcher 'list';\n  dispatcher disable =&gt; 'syslog';\n  dispatcher enable =&gt; 'mylog', 'syslog'; # more at a time\n  dispatcher mode =&gt; 'DEBUG', 'mylog';\n  dispatcher mode =&gt; 'DEBUG', 'ALL';\n  my $catcher = dispatcher 'active-try';\n  dispatcher 'do-not-reopen';\n\n  my @need_info = dispatcher needs =&gt; 'INFO';\n  if(dispatcher needs =&gt; 'INFO') ...      # anyone needs INFO\n\n  # Getopt::Long integration: see Log::Report::Dispatcher::mode()\n  dispatcher PERL =&gt; 'default', mode =&gt; 'DEBUG', accept =&gt; 'ALL'\n     if $debug;\n</pre>\n",
         "id" : "id826"
      },
      "id645" : {
         "call" : "$obj-&gt;<b><a name=\"id645\">addAutomatic</a></b>(&nbsp;@lines|\\@lines|$text&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Add multiple lines to the translator's comment block.  Returns an\nempty string if there are no comments.</p>\n",
         "id" : "id645",
         "name" : "addAutomatic"
      },
      "id289" : {
         "title" : "reroute Dancer2 logs into Log::Report",
         "inheritance" : {
            "extends" : [
               "Moo::Object"
            ]
         },
         "id" : "id289",
         "distribution" : "Dancer2-Plugin-LogReport",
         "package" : "Dancer2::Logger::LogReport",
         "is_pure_pod" : false,
         "version" : "2.03",
         "name" : "Dancer2::Logger::LogReport",
         "chapters" : [
            "id290",
            "id1351",
            "id291",
            "id292",
            "id294"
         ]
      },
      "id594" : {
         "path" : "METHODS/Action",
         "type" : "section",
         "id" : "id594",
         "subroutines" : [
            "id599",
            "id601",
            "id595"
         ],
         "name" : "Action",
         "level" : 2
      },
      "id234" : {
         "id" : "id234",
         "intro" : "<p>[2.03] Log messages are/can be stored in the Session object.  The Session\nobject may be cached in a file, in various formats.  To be able to save\nand restore these message objects from this session serialization, we\nneed to freeze and thaw the object at the right moment.  This happens\ntransparently.</p>\n\n<p>For session serialization in the database, put this in your\nconfiguration:</p>\n<pre>\n  engines:\n    session:\n      DBIC:\n        serializer: JSON\n        serialize_options:\n          allow_tags: 1\n        deserialize_options:\n          allow_tags: 1\n</pre>\n",
         "type" : "section",
         "subroutines" : [
            "id236",
            "id235"
         ],
         "path" : "METHODS/Serialization",
         "level" : 2,
         "name" : "Serialization"
      },
      "id1182-id780" : {
         "name" : "isDisabled",
         "extends" : "id1182",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "id" : "id1182-id780",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>"
      },
      "id123" : {
         "name" : "expand_reasons",
         "intro" : "<p>Returns a sub-set of all existing message reason labels, based on the\ncontent reason patterns.  Either use a comma separated list of patterns\nin string <tt class=\"parameter\">$reasons</tt>, or an ARRAY of patterns.</p>\n\n<p>The following rules apply for the patterns:</p>\n<pre>\n  REASONS     = BLOCK [ ',' BLOCKS ] | ARRAY-of-REASON\n  BLOCK       = '-' TO | FROM '-' TO | ONE | SOURCE\n  FROM,TO,ONE = 'TRACE' | 'ASSERT' | ,,, | 'PANIC'\n  SOURCE      = 'USER' | 'PROGRAM' | 'SYSTEM' | 'FATAL' | 'ALL' | 'NONE'\n</pre>\n\n<p>The SOURCE specification group all reasons which are usually related to\nthe problem: report about problems caused by the user, reported by\nthe program, or with system interaction.</p>\n",
         "examples" : [
            "id124"
         ],
         "diagnostics" : [
            "id125",
            "id126",
            "id127"
         ],
         "call" : "<b><a name=\"id123\">expand_reasons</a></b>(&nbsp;$reasons|\\@reasons&nbsp;)",
         "type" : "function",
         "id" : "id123"
      },
      "id345" : {
         "nest" : [
            "id346",
            "id347",
            "id348"
         ],
         "id" : "id345",
         "type" : "section",
         "level" : 2,
         "name" : "Supported syntax",
         "path" : "DETAILS/Supported syntax"
      },
      "id166-id385" : {
         "name" : "where",
         "extends" : "id166",
         "params" : "ARRAY",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id166\">Log::Report::Minimal::Domain::configure(where)</a></p>",
         "id" : "id166-id385"
      },
      "id150" : {
         "distribution" : "Log-Report-Optional",
         "package" : "Log::Report::Minimal::Domain",
         "is_pure_pod" : false,
         "title" : "administer one text-domain",
         "id" : "id150",
         "inheritance" : {
            "extended_by" : [
               "Log::Report::Domain"
            ]
         },
         "chapters" : [
            "id151",
            "id1346",
            "id152",
            "id153",
            "id154"
         ],
         "name" : "Log::Report::Minimal::Domain",
         "version" : "1.08"
      },
      "id947" : {
         "name" : "_expand",
         "type" : "default",
         "value" : "<code>false</code>",
         "id" : "id947"
      },
      "id739" : {
         "nest" : [
            "id740",
            "id742",
            "id743"
         ],
         "id" : "id739",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id784" : {
         "name" : "Reasons &lt;--&gt; Levels",
         "level" : 2,
         "path" : "DESCRIPTION/Reasons <--> Levels",
         "type" : "section",
         "intro" : "<p>The REASONs for a message in <a class=\"jump\" href=\"id801\">Log::Report</a> are names quite similar to\nthe log levels used by Log::Log4perl.  The default mapping is list\nbelow.  You can change the mapping using <a class=\"jump\" href=\"id790\">new(to_level)</a>.</p>\n<pre>\n  TRACE   =&gt; $DEBUG    ERROR   =&gt; $ERROR\n  ASSERT  =&gt; $DEBUG    FAULT   =&gt; $ERROR\n  INFO    =&gt; $INFO     ALERT   =&gt; $FATAL\n  NOTICE  =&gt; $INFO     FAILURE =&gt; $FATAL\n  WARNING =&gt; $WARN     PANIC   =&gt; $FATAL\n  MISTAKE =&gt; $WARN\n</pre>\n",
         "id" : "id784"
      },
      "id1228" : {
         "intro" : "<p>In <a class=\"jump\" href=\"id801\">Log::Report</a>, exceptions are not as extended as available in\nlanguages as Java: you do not create classes for them.  The only\nthing an exception object does, is capture some information about\nan (untranslated) report.</p>\n",
         "id" : "id1228",
         "type" : "chapter",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id291" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "intro" : "<pre>  # This module is loaded when configured.  It does not provide\n  # end-user functions or methods.\n\n  # See <a class=\"jump\" href=\"id276\">DETAILS</a>\n</pre>\n",
         "id" : "id291",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id531" : {
         "type" : "i_method",
         "id" : "id531",
         "call" : "$obj-&gt;<b><a name=\"id531\">addPot</a></b>(&nbsp;$domain, $pot, %options&nbsp;)",
         "name" : "addPot"
      },
      "id752-id561" : {
         "extends" : "id752",
         "name" : "there is no Plural-Forms field in the header, but needed.",
         "subroutine" : "id751",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id751\">Log::Report::Lexicon::Table::pluralIndex()</a></p>",
         "type" : "error",
         "id" : "id752-id561"
      },
      "id1169-id760" : {
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3",
         "id" : "id1169-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "type" : "option",
         "name" : "mode",
         "extends" : "id1169"
      },
      "id1141" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id1141",
         "name" : "config"
      },
      "id994-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id994\">Log::Report::Message::errno()</a></p>",
         "type" : "i_method",
         "id" : "id994-id221",
         "call" : "$obj-&gt;<b><a name=\"id994\">errno</a></b>(&nbsp;[$errno]&nbsp;)",
         "name" : "errno",
         "extends" : "id994"
      },
      "id1201-id1091" : {
         "value" : "&lt;required&gt;",
         "type" : "default",
         "id" : "id1201-id1091",
         "extends" : "id1201",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "name" : "call"
      },
      "id618" : {
         "id" : "id618",
         "type" : "option",
         "params" : "$msgid",
         "name" : "msgid"
      },
      "id241" : {
         "nest" : [
            "id242",
            "id243",
            "id245"
         ],
         "id" : "id241",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id801" : {
         "is_pure_pod" : false,
         "distribution" : "Log-Report",
         "package" : "Log::Report",
         "inheritance" : {
            "extends" : [
               "Exporter"
            ]
         },
         "id" : "id801",
         "title" : "report a problem, with exceptions and translation support",
         "chapters" : [
            "id802",
            "id1352",
            "id803",
            "id804",
            "id805",
            "id887"
         ],
         "name" : "Log::Report",
         "version" : "1.46"
      },
      "id1172-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "name" : "format_reason",
         "type" : "default",
         "value" : "'LOWERCASE'",
         "id" : "id1172-id1021",
         "extends" : "id1172"
      },
      "id986" : {
         "call" : "$obj-&gt;<b><a name=\"id986\">domain</a></b>",
         "intro" : "<p>Returns the domain of the first translatable string in the structure.</p>\n",
         "id" : "id986",
         "type" : "i_method",
         "name" : "domain"
      },
      "id318" : {
         "id" : "id318",
         "intro" : "<p>Get the <code>String::Print</code> object which formats the messages.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id318\">formatter</a></b>",
         "name" : "formatter"
      },
      "id1317" : {
         "path" : "METHODS/Managing PO's/Administration",
         "id" : "id1317",
         "type" : "subsection",
         "subroutines" : [
            "id751-id561",
            "id749-id561",
            "id755-id561",
            "id753-id561",
            "id748-id561",
            "id756-id561"
         ],
         "name" : "Administration",
         "level" : 3
      },
      "id695" : {
         "id" : "id695",
         "type" : "c_method",
         "options" : [
            [
               "id696",
               "id697"
            ]
         ],
         "diagnostics" : [
            "id698",
            "id699",
            "id700",
            "id701",
            "id702"
         ],
         "call" : "$class-&gt;<b><a name=\"id695\">read</a></b>(&nbsp;$filename, %options&nbsp;)",
         "name" : "read",
         "intro" : "<p>Read the POT information from <tt class=\"parameter\">$filename</tt>.</p>\n"
      },
      "id1207-id1217" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "name" : "max_params",
         "type" : "default",
         "value" : "8",
         "id" : "id1207-id1217",
         "extends" : "id1207"
      },
      "id86" : {
         "call" : "<b><a name=\"id86\">printp</a></b>(&nbsp;[$fh], $format, @positionals, %options&nbsp;)",
         "intro" : "<p>Calls <a class=\"jump\" href=\"id87\">sprintp()</a> to fill the <tt class=\"parameter\">@positionals</tt> in <tt class=\"parameter\">$format</tt>, and\nthen sends it to the <tt class=\"parameter\">$fh</tt> (by default the selected file handle).</p>\n",
         "id" : "id86",
         "type" : "function",
         "name" : "printp"
      },
      "id1194-id1091" : {
         "params" : "CLASS",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "type" : "option",
         "id" : "id1194-id1091",
         "name" : "package",
         "extends" : "id1194"
      },
      "id544" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  # normal use (end-users view)\n\n  textdomain 'my-domain',\n    translator =&gt; Log::Report::Translator::Gettext-&gt;new;\n\n  print __\"Hello World\\n\";  # language determined by environment\n\n  # internal use\n\n  my $msg = Log::Report::Message-&gt;new(\n    _msgid      =&gt; \"Hello World\\n\",\n    _textdomain =&gt; 'my-domain',\n  );\n\n  print Log::Report::Translator::Gettext-&gt;new\n      -&gt;translate($msg, 'nl-BE');\n</pre>\n",
         "id" : "id544"
      },
      "id469" : {
         "id" : "id469",
         "value" : "&lt;from header&gt;",
         "type" : "default",
         "name" : "charset"
      },
      "id395" : {
         "type" : "default",
         "value" : "'loc'",
         "id" : "id395",
         "name" : "translation_function"
      },
      "id1156" : {
         "level" : 3,
         "name" : "configuring your own formatter",
         "id" : "id1156",
         "intro" : "<p>[0.91] The <code>PRINTI</code> is a special constants for <a class=\"jump\" href=\"id168\">configure(formatter)</a>, and\nwill use <a class=\"jump\" href=\"id47\">String::Print</a> function <code>printi()</code>, with the standard tricks.</p>\n<pre>\n  textdomain 'some-domain',\n    formatter =&gt; {\n       class     =&gt; 'String::Print',    # default\n       method    =&gt; 'sprinti',          # default\n       %options,   # constructor options for String::Print\n    );\n</pre>\n\n<p>When you want your own formatter, or configuration of <code>String::Print</code>,\nyou need to pass a CODE.  Be aware that you may loose magic added by\n<a class=\"jump\" href=\"id801\">Log::Report</a> and other layers, like <a class=\"jump\" href=\"id299\">Log::Report::Template</a>:</p>\n<pre>\n  textdomain 'some-domain', formatter =&gt; \\&amp;my_formatter;\n</pre>\n",
         "type" : "subsection",
         "path" : "DETAILS/Configuring/configuring your own formatter"
      },
      "id997" : {
         "path" : "METHODS/Processing",
         "type" : "section",
         "id" : "id997",
         "subroutines" : [
            "id1010",
            "id1000",
            "id1004",
            "id998",
            "id1006",
            "id1003",
            "id1001",
            "id999"
         ],
         "name" : "Processing",
         "level" : 2
      },
      "id1185-id780" : {
         "name" : "close",
         "extends" : "id1185",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1185\">Log::Report::Dispatcher::close()</a></p>",
         "type" : "i_method",
         "id" : "id1185-id780",
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>"
      },
      "id942" : {
         "type" : "overload",
         "intro" : "<p>An (accidental) use of concatenation (a dot where a comma should be\nused) would immediately stringify the object.  This is avoided by\noverloading that operation.</p>\n",
         "id" : "id942",
         "call" : "overload <b><a name=\"id942\">'.'</a></b>; concatenation",
         "name" : "'.'"
      },
      "id191" : {
         "name" : "assert",
         "call" : "<b><a name=\"id191\">assert</a></b>(&nbsp;$message&nbsp;)",
         "type" : "function",
         "id" : "id191"
      },
      "id1191-id1091" : {
         "name" : "skipStack",
         "extends" : "id1191",
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "id" : "id1191-id1091",
         "type" : "i_method"
      },
      "id1136-id385" : {
         "params" : "CODESET",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1136\">Log::Report::Domain::configure(native_language)</a></p>",
         "type" : "option",
         "id" : "id1136-id385",
         "name" : "native_language",
         "extends" : "id1136"
      },
      "id1197-id1217" : {
         "name" : "filename",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "extends" : "id1197",
         "id" : "id1197-id1217",
         "type" : "default",
         "value" : "&lt;required&gt;"
      },
      "id134" : {
         "name" : "must_show_location",
         "id" : "id134",
         "type" : "function",
         "call" : "<b><a name=\"id134\">must_show_location</a></b>(&nbsp;$mode, $reason&nbsp;)"
      },
      "id189" : {
         "path" : "FUNCTIONS/Abbreviations for report()",
         "subroutines" : [
            "id194",
            "id193",
            "id196",
            "id200",
            "id199",
            "id197",
            "id198",
            "id190",
            "id195",
            "id192",
            "id191"
         ],
         "type" : "section",
         "id" : "id189",
         "name" : "Abbreviations for report()",
         "level" : 2
      },
      "id223" : {
         "intro" : "<pre>  In your template:\n\n  [% FOR message IN messages %]\n    &lt;div class=\"alert alert-[% message.bootstrapColor %]\"&gt;\n      [% message.toString | html_entity %]\n    &lt;/div&gt;\n  [% END %]\n</pre>\n",
         "type" : "chapter",
         "id" : "id223",
         "path" : "SYNOPSIS",
         "level" : 1,
         "name" : "SYNOPSIS"
      },
      "id336" : {
         "type" : "section",
         "intro" : "<p>Some common activities in templates are harder when translation is\nneeded.  A few TT filters are provided to easy the process.</p>\n\n<ul>\n<li>Filter: cols<br />\n\n<p>A typical example of an HTML component which needs translation is</p>\n<pre>\n  &lt;trE&lt;gt>&lt;tdE&lt;gt>Price:&lt;/tdE&lt;gt>&lt;tdE&lt;gt>20 £&lt;/tdE&lt;gt>&lt;/trE&lt;gt>\n</pre>\n\n<p>Both the price text as value need to be translated.  In plain perl\n(with <a class=\"jump\" href=\"id801\">Log::Report</a>) you would write</p>\n<pre>\n  __x\"Price: {price £}\", price =&gt; $product-&gt;price   # or\n  __x\"Price: {p.price £}\", p =&gt; $product;\n</pre>\n\n<p>In HTML, there seems to be the need for two separate translations,\nmay in the program code.  This module (actually <a class=\"jump\" href=\"id47\">String::Print</a>)\ncan be trained to convert money during translation, because '£'\nis a modifier.  The translation for Dutch (via a PO table) could be</p>\n<pre>\n  \"Prijs: {p.price €}\"\n</pre>\n\n<p>SO: we want to get both table fields in one translation.  Try this:</p>\n<pre>\n  &lt;trE&lt;gt>[% loc(\"Price:\\t{p.price £}\" | cols %]&lt;/trE&lt;gt>\n</pre>\n\n<p>In the translation table, you have to place the tabs (backslash-t) as\nwell.</p>\n\n<p>There are two main forms of <code>cols</code>.  The first form is the containerizer:\npass 'cols' a list of container names.  The fields in the input string\n(as separated by tabs) are wrapped in the named container.  The last\ncontainer name will be reused for all remaining columns.  By default,\neverything is wrapped in 'td' containers.</p>\n<pre>\n  \"a\\tb\\tc\" | cols             &lt;tdE&lt;gt>aE&lt;lt>/tdE&lt;gt>&lt;tdE&lt;gt>bE&lt;lt>/tdE&lt;gt>&lt;tdE&lt;gt>cE&lt;lt>/tdE&lt;gt>\n  \"a\\tb\\tc\" | cols('td')       same\n  \"a\\tb\\tc\" | cols('th', 'td') &lt;thE&lt;gt>aE&lt;lt>/thE&lt;gt>&lt;tdE&lt;gt>bE&lt;lt>/tdE&lt;gt>&lt;tdE&lt;gt>cE&lt;lt>/tdE&lt;gt>\n  \"a\"       | cols('div')      &lt;divE&lt;gt>aE&lt;lt>/divE&lt;gt>\n  loc(\"a\")  | cols('div')      &lt;divE&lt;gt>xxxxE&lt;lt>/divE&lt;gt>\n</pre>\n\n<p>The second form has one pattern, which contains (at least one) <code>$1</code>\nreplacement positions.  Missing columns for positional parameters\nwill be left blank.</p>\n<pre>\n  \"a\\tb\\tc\" | cols('#$3#$1#')  #c#a#\n  \"a\"       | cols('#$3#$1#')  ##a#\n  loc(\"a\")  | cols('#$3#$1#')  #mies#aap#\n</pre>\n<li>Filter: br<br />\n\n<p>Some translations will produce more than one line of text.  Add\n'&lt;brE&lt;gt>' after each of them.</p>\n<pre>\n  [% loc('intro-text') | br %]\n  [% | br %][% intro_text %][% END %]\n  [% FILTER br %][% intro_text %][% END %]\n</pre>\n\n</ul>\n",
         "id" : "id336",
         "path" : "METHODS/Template filters",
         "level" : 2,
         "name" : "Template filters"
      },
      "id1204-id1091" : {
         "extends" : "id1204",
         "name" : "max_line",
         "id" : "id1204-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id636" : {
         "subroutine" : "id617",
         "name" : "no msgid defined for PO.",
         "type" : "error",
         "id" : "id636"
      },
      "id250" : {
         "level" : 2,
         "name" : "Dancer2 Configuration",
         "id" : "id250",
         "intro" : "<p>Most configuration variables are available when creating a new instance\nof a <a href=\"https://metacpan.org/dist/Template\">manual Template</a>::Toolkit object can be declared in your config.yml file.\nFor example:</p>\n<pre>\n  template: TTLogReport\n\n  engines:\n    template:\n      TTLogReport:\n        start_tag: '&lt;%'\n        end_tag:   '%>'\n</pre>\n\n<p>(Note: <code>start_tag</code> and <code>end_tag</code> are regexes.  If you want to use PHP-style\ntags, you will need to list them as <code>&lt;\\? &gt;> and C<< \\?></code>.)\nSee <a href=\"https://metacpan.org/dist/Template_Manual_Config\">manual Template::Manual::Config</a> for the configuration variables.</p>\n\n<p>In addition to the standard configuration variables, the option <code>show_private_variables</code>\nis also available. Template::Toolkit, by default, does not render private variables\n(the ones starting with an underscore). If in your project it gets easier to disable\nthis feature than changing variable names, add this option to your configuration.</p>\n<pre>\n  show_private_variables: true\n</pre>\n\n<p><b>Warning:</b> Given the way Template::Toolkit implements this option, different Dancer2\napplications running within the same interpreter will share this option!</p>\n",
         "type" : "section",
         "path" : "DETAILS/Dancer2 Configuration"
      },
      "id1278" : {
         "nest" : [
            "id1279"
         ],
         "type" : "section",
         "id" : "id1278",
         "name" : "Messages with plural forms",
         "level" : 2,
         "path" : "DETAILS/Messages with plural forms"
      },
      "id1196-id1021" : {
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id1021",
         "params" : "STRING",
         "extends" : "id1196",
         "name" : "filename"
      },
      "id151" : {
         "level" : 1,
         "name" : "NAME",
         "id" : "id151",
         "intro" : "<p>Log::Report::Minimal::Domain - administer one text-domain</p>\n",
         "type" : "chapter",
         "path" : "NAME"
      },
      "id1195-id1091" : {
         "extends" : "id1195",
         "id" : "id1195-id1091",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "name" : "package",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>"
      },
      "id763" : {
         "intro" : "<p>This dispatchers produces output to and <code>Log::Dispatch</code> back-end.\n(which will NOT be automatically installed for you).</p>\n\n<p>The REASON for a message often uses names which are quite similar to the\nlog-levels used by Log::Dispatch.  However: they have a different\napproach.  The REASON of <a class=\"jump\" href=\"id801\">Log::Report</a> limits the responsibility of the\nprogrammer to indicate the cause of the message: whether it was able to\nhandle a certain situation.  The Log::Dispatch levels are there for the\nuser's of the program.  However: the programmer does not known anything\nabout the application (in the general case).  This is cause of much of\nthe trickery in Perl programs.</p>\n\n<p>The default translation table is list below.  You can change the mapping\nusing <a class=\"jump\" href=\"id767\">new(to_level)</a>.  See example in SYNOPSIS.</p>\n",
         "id" : "id763",
         "type" : "chapter",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id290" : {
         "path" : "NAME",
         "id" : "id290",
         "intro" : "<p>Dancer2::Logger::LogReport - reroute Dancer2 logs into Log::Report</p>\n",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id530" : {
         "type" : "i_method",
         "intro" : "<p>Returns the list of <a class=\"jump\" href=\"id669\">Log::Report::Lexicon::POT</a> objects which contain\nthe tables for <tt class=\"parameter\">$domain</tt>.</p>\n",
         "id" : "id530",
         "call" : "$obj-&gt;<b><a name=\"id530\">pots</a></b>(&nbsp;$domain&nbsp;)",
         "name" : "pots"
      },
      "id158-id385" : {
         "extends" : "id158",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id158-id385",
         "name" : "name",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id157\">Log::Report::Minimal::Domain::new(name)</a></p>"
      },
      "id1206-id1021" : {
         "params" : "INTEGER",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "id" : "id1206-id1021",
         "name" : "max_params",
         "extends" : "id1206"
      },
      "id1200-id1217" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "id" : "id1200-id1217",
         "type" : "option",
         "params" : "STRING",
         "extends" : "id1200",
         "name" : "call"
      },
      "id954-id221" : {
         "extends" : "id954",
         "name" : "_msgid",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id954\">Log::Report::Message::new(_msgid)</a></p>",
         "id" : "id954-id221",
         "params" : "$msgid"
      },
      "id1008-id221" : {
         "id" : "id1008-id221",
         "type" : "default",
         "value" : "<code>undef</code>",
         "extends" : "id1008",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1007\">Log::Report::Message::freeze(serializer)</a></p>",
         "name" : "serializer"
      },
      "id1142" : {
         "name" : "the native_language '$locale' is not a valid locale",
         "subroutine" : "id1133",
         "type" : "error",
         "id" : "id1142"
      },
      "id424" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "id" : "id424",
         "intro" : "<pre>  # internal use\n  my $msg = Log::Report::Message-&gt;new(\n    _msgid  =&gt; \"Hello World\\n\",\n    _domain =&gt; 'my-domain',\n  );\n\n  print Log::Report::Translator::POT\n     -&gt;new(lexicons =&gt; $dir)\n     -&gt;translate($msg, 'nl-BE');\n\n  # normal use (end-users view in the program's ::main)\n  textdomain 'my-domain',\n    translator =&gt;  Log::Report::Translator::POT-&gt;new(lexicon =&gt; $dir);\n  print __\"Hello World\\n\";\n</pre>\n",
         "type" : "chapter"
      },
      "id1205-id1091" : {
         "name" : "max_line",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "extends" : "id1205",
         "type" : "default",
         "id" : "id1205-id1091",
         "value" : "<code>undef</code>"
      },
      "id817" : {
         "value" : "<code>undef</code>",
         "id" : "id817",
         "type" : "default",
         "name" : "locale"
      },
      "id1139" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id1139",
         "name" : "context_rules"
      },
      "id655" : {
         "subroutine" : "id654",
         "name" : "unknown flag $flag ignored",
         "type" : "warning",
         "id" : "id655"
      },
      "id1181-id780" : {
         "id" : "id1181-id780",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>",
         "extends" : "id1181",
         "name" : "mode"
      },
      "id1189-id1021" : {
         "extends" : "id1189",
         "name" : "addSkipStack",
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "id" : "id1189-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "type" : "ci_method"
      },
      "id520-id354" : {
         "extends" : "id520",
         "name" : "lexicon",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id520\">Log::Report::Extract::new(lexicon)</a></p>",
         "id" : "id520-id354",
         "params" : "$directory"
      },
      "id140" : {
         "call" : "<b><a name=\"id140\">parse_locale</a></b>(&nbsp;STRING&nbsp;)",
         "diagnostics" : [
            "id141"
         ],
         "id" : "id140",
         "type" : "function",
         "name" : "parse_locale",
         "intro" : "<p>Decompose a locale string.</p>\n\n<p>For simplicity of the caller's code, the capatization of the returned\nfields is standardized to the preferred, although the match is case-\ninsensitive as required by the RFC. The territory in returned in capitals\n(ISO3166), the language is lower-case (ISO639), the script as upper-case\nfirst, the character-set as lower-case, and the modifier and variant unchanged.</p>\n\n<p>In LIST context, four elements are returned: language, territory,\ncharacter-set (codeset), and modifier.  Those four are important for the\nusual unix translationg infrastructure.  Only the \"country\" is obligatory,\nthe others can be <code>undef</code>.  It may also return <code>C</code> and <code>POSIX</code>.</p>\n\n<p>In SCALAR context, a HASH is returned which can contain more information:\nlanguage, script, territory, variant, codeset, and modifiers.  The\nvariant (RFC3066 is probably never used)</p>\n"
      },
      "id957" : {
         "value" : "<code>undef</code>",
         "id" : "id957",
         "type" : "default",
         "name" : "_category"
      },
      "id1170-id1066" : {
         "name" : "mode",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "extends" : "id1170",
         "value" : "'NORMAL'",
         "id" : "id1170-id1066",
         "type" : "default"
      },
      "id355" : {
         "intro" : "<p>Log::Report::Template::Extract - collect translatable strings from template files</p>\n",
         "id" : "id355",
         "type" : "chapter",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id1310" : {
         "name" : "Filters",
         "level" : 3,
         "path" : "DETAILS/Processing the message/Filters",
         "id" : "id1310",
         "type" : "subsection"
      },
      "id554" : {
         "name" : "codepage_to_iso",
         "intro" : "<p>Translate windows <tt class=\"parameter\">$codepage</tt> into ISO code.  The <tt class=\"parameter\">$codepage</tt> is numeric\nor a hex string like '0x0304'.</p>\n",
         "type" : "function",
         "id" : "id554",
         "call" : "<b><a name=\"id554\">codepage_to_iso</a></b>(&nbsp;$codepage&nbsp;)"
      },
      "id753-id669" : {
         "id" : "id753-id669",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id753\">setupPluralAlgorithm</a></b>",
         "diagnostics" : [
            "id754-id669"
         ],
         "extends" : "id753",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id753\">Log::Report::Lexicon::Table::setupPluralAlgorithm()</a></p>",
         "name" : "setupPluralAlgorithm"
      },
      "id190" : {
         "id" : "id190",
         "type" : "function",
         "call" : "<b><a name=\"id190\">trace</a></b>(&nbsp;$message&nbsp;)",
         "name" : "trace"
      },
      "id93" : {
         "level" : 3,
         "name" : "Simple keys",
         "type" : "subsection",
         "intro" : "<p>A simple key directly refers to a named parameter of the function or method:</p>\n<pre>\n  printi \"Username: {name}\", name =&gt; 'John';\n</pre>\n\n<p>You may also pass them as HASH or CODE:</p>\n<pre>\n  printi \"Username: {name}\", { name =&gt; 'John' };\n  printi \"Username: {name}\", name =&gt; sub { 'John' };\n  printi \"Username: {name}\", { name =&gt; sub { 'John' } };\n  printi \"Username: {name}\", name =&gt; sub { sub {'John'} };\n</pre>\n\n<p>The smartness of pre-processing CODE is part of serialization.</p>\n",
         "id" : "id93",
         "path" : "DETAILS/Interpolation: keys/Simple keys"
      },
      "id1203-id1066" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "name" : "params",
         "value" : "&lt;required&gt;",
         "id" : "id1203-id1066",
         "type" : "default",
         "extends" : "id1203"
      },
      "id773" : {
         "name" : "callbacks",
         "intro" : "<p>See Log::Dispatch::Output.</p>\n",
         "type" : "option",
         "id" : "id773",
         "params" : "CODE|\\@CODE"
      },
      "id251" : {
         "path" : "DETAILS/Advanced Customization",
         "intro" : "<p>Module <a href=\"https://metacpan.org/dist/Dancer2_Template_TemplateToolkit\">manual Dancer2::Template::TemplateToolkit</a> describes how to extend the Template\nby wrapping the <code>_build_engine</code> method.  The instantiation trick is insufficient\nfor a bit more complex modules, like our <a class=\"jump\" href=\"id801\">Log::Report</a> translation feature.  You may\nbe able to extend this module with your own templater, however.</p>\n<pre>\n  # in config.yml\n  engines:\n    template:\n      TTLogReport:\n        start_tag: '&lt;%'\n        end_tag:   '%>'\n        templater: Log::Report::Template  # default\n</pre>\n",
         "id" : "id251",
         "type" : "section",
         "name" : "Advanced Customization",
         "level" : 2
      },
      "id1202-id1091" : {
         "extends" : "id1202",
         "name" : "params",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "id" : "id1202-id1091",
         "params" : "ARRAY"
      },
      "id1145" : {
         "name" : "cannot open JSON file for context at $fn: $!",
         "subroutine" : "id1144",
         "type" : "fault",
         "id" : "id1145"
      },
      "id1173-id1217" : {
         "name" : "charset",
         "extends" : "id1173",
         "params" : "CHARSET",
         "id" : "id1173-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "type" : "option"
      },
      "id1183" : {
         "name" : "needs",
         "intro" : "<p>Returns the list with all REASONS which are needed to fulfill this\ndispatcher's needs.  When disabled, the list is empty, but not forgotten.</p>\n\n<p>[0.999] when only one <tt class=\"parameter\">$reason</tt> is specified, it is returned if in the\nlist.</p>\n",
         "type" : "i_method",
         "id" : "id1183",
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)"
      },
      "id1179-id780" : {
         "id" : "id1179-id780",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>",
         "name" : "name",
         "extends" : "id1179"
      },
      "id1171-id1021" : {
         "extends" : "id1171",
         "name" : "format_reason",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "id" : "id1171-id1021",
         "type" : "option",
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE"
      },
      "id812" : {
         "name" : "stack",
         "params" : "\\@trace",
         "intro" : "<p>When defined, that data is used to display the call stack.  Otherwise,\nit is collected via <code>caller()</code> if needed.</p>\n",
         "id" : "id812",
         "type" : "option"
      },
      "id1307" : {
         "level" : 2,
         "name" : "Available back-ends",
         "type" : "section",
         "id" : "id1307",
         "path" : "DETAILS/Available back-ends"
      },
      "id1167-id905" : {
         "params" : "LOCALE",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "type" : "option",
         "id" : "id1167-id905",
         "name" : "locale",
         "extends" : "id1167"
      },
      "id800" : {
         "intro" : "<pre>  use Log::Log4perl     qw/:levels/;\n\n  # by default, ALERTs are output as $FATAL\n  dispatcher Log::Log4perl =&gt; 'logger',\n    to_level =&gt; [ ALERT =&gt; $ERROR, ],\n    ...;\n</pre>\n",
         "type" : "example",
         "id" : "id800"
      },
      "id240" : {
         "path" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>This template engine allows you to use <a href=\"https://metacpan.org/dist/Template\">manual Template</a>::Toolkit in <a href=\"https://metacpan.org/dist/Dancer2\">manual Dancer2</a>,\nincluding the translation extensions offered by <a class=\"jump\" href=\"id299\">Log::Report::Template</a>.</p>\n",
         "id" : "id240",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1174-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "name" : "charset",
         "id" : "id1174-id1021",
         "value" : "<code>undef</code>",
         "type" : "default",
         "extends" : "id1174"
      },
      "id708" : {
         "subroutine" : "id703",
         "name" : "cannot write to file $fn with $layers: $!",
         "id" : "id708",
         "type" : "fault"
      },
      "id1193-id1066" : {
         "name" : "stackTraceLine",
         "extends" : "id1193",
         "options" : [
            [
               "id1208-id1066",
               "id1209-id1066"
            ],
            [
               "id1200-id1066",
               "id1201-id1066"
            ],
            [
               "id1196-id1066",
               "id1197-id1066"
            ],
            [
               "id1198-id1066",
               "id1199-id1066"
            ],
            [
               "id1204-id1066",
               "id1205-id1066"
            ],
            [
               "id1206-id1066",
               "id1207-id1066"
            ],
            [
               "id1194-id1066",
               "id1195-id1066"
            ],
            [
               "id1202-id1066",
               "id1203-id1066"
            ]
         ],
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "id" : "id1193-id1066",
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)"
      },
      "id1168" : {
         "name" : "locale",
         "type" : "default",
         "value" : "&lt;system locale&gt;",
         "id" : "id1168"
      },
      "id952" : {
         "params" : "$msgid",
         "intro" : "<p>Can be used together with <tt class=\"parameter\">_count</tt>.  This plural form of the <tt class=\"parameter\">_msgid</tt>\ntext is used to simplify the work of translators, and as fallback when\nno translation is possible: therefore, this can best resemble an\nEnglish message.</p>\n\n<p>White-space at the beginning and end of the string are stripped off.\nThe white-space provided by the <tt class=\"parameter\">_msgid</tt> will be used.</p>\n",
         "id" : "id952",
         "type" : "option",
         "name" : "_plural"
      },
      "id1192-id1091" : {
         "type" : "ci_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "id" : "id1192-id1091",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>",
         "extends" : "id1192",
         "name" : "collectLocation"
      },
      "id405" : {
         "intro" : "<p>The <a class=\"jump\" href=\"id299\">Log::Report::Template</a> object which is using this textdomain.</p>\n",
         "id" : "id405",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id405\">templater</a></b>",
         "name" : "templater"
      },
      "id68" : {
         "name" : "setDefaults",
         "examples" : [
            "id69"
         ],
         "id" : "id68",
         "intro" : "<p>[1.00] Set the defaults for modifiers, either with a HASH where the key modifier name\nmaps to a HASH of settings, or a list of PAIRS.</p>\n\n<p>When using the methods in OO style , you can change the defaults at any time.  For\nfunctional style, the object is hidden.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id68\">setDefaults</a></b>(&nbsp;\\%defaults|@defaults&nbsp;)"
      },
      "id433" : {
         "intro" : "<pre>  # file xxx/perl5.8.8/My/Module.pm\n  use Log::Report 'my-domain',\n    translator =&gt; Log::Report::Translator::POT-&gt;new;\n\n  # lexicon now in xxx/perl5.8.8/My/Module/messages/\n</pre>\n",
         "type" : "example",
         "id" : "id433",
         "name" : "default lexicon directory\n"
      },
      "id1187-id905" : {
         "extends" : "id1187",
         "name" : "translate",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "id" : "id1187-id905",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)"
      },
      "id85" : {
         "call" : "<b><a name=\"id85\">printi</a></b>(&nbsp;[$fh], $format, %data|\\%data&nbsp;)",
         "type" : "function",
         "intro" : "<p>Calls <a class=\"jump\" href=\"id76\">sprinti()</a> to fill the <tt class=\"parameter\">%data</tt> into <tt class=\"parameter\">$format</tt>, and then sends it to\nthe <tt class=\"parameter\">$fh</tt> (by default the selected file handle)</p>\n<pre>\n  open my $fh, '>:encoding(UTF-8)', $file;\n  printi $fh, ...\n\n  printi \\*STDERR, ...\n</pre>\n",
         "id" : "id85",
         "name" : "printi"
      },
      "id706" : {
         "subroutine" : "id703",
         "name" : "no filename or file-handle specified for PO",
         "intro" : "<p>When a PO file is written, then a filename or file-handle must be\nspecified explicitly, or set beforehand using the <a class=\"jump\" href=\"id712\">filename()</a>\nmethod, or known because the write follows a <a class=\"jump\" href=\"id695\">read()</a> of the file.</p>\n",
         "id" : "id706",
         "type" : "error"
      },
      "id1345" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Extract::PerlPPI\n   is a <a class=\"jump\" href=\"id513\">Log::Report::Extract</a>\n</pre>\n",
         "id" : "id1345",
         "type" : "chapter",
         "path" : "INHERITANCE"
      },
      "id459" : {
         "path" : "DETAILS/Locale search",
         "intro" : "<p>The exact gettext defined format of the locale is</p><pre>\n  language[_territory[.codeset]][@modifier]\n<p></pre>\nThe modifier will be used in above directory search, but only if provided\nexplicitly.</p>\n\n<p>The manual <code>info gettext</code> determines the rules.  During the search,\ncomponents of the locale get stripped, in the following order:</p>\n<ol>\n<li>codeset<br />\n<li>normalized codeset<br />\n<li>territory<br />\n<li>modifier<br />\n</ol>\n\n<p>The normalized codeset (character-set name) is derived by</p>\n<ol>\n<li>Remove all characters beside numbers and letters.<br />\n<li>Fold letters to lowercase.<br />\n<li>If the same only contains digits prepend the string \"iso\".<br />\n</ol>\n\n<p>To speed-up the search for the right table, the full directory tree\nwill be indexed only once when needed the first time.  The content of\nall defined lexicon directories will get merged into one tree.</p>\n",
         "id" : "id459",
         "type" : "section",
         "name" : "Locale search",
         "level" : 2
      },
      "id1208-id1066" : {
         "extends" : "id1208",
         "name" : "abstract",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "type" : "option",
         "id" : "id1208-id1066",
         "params" : "INTEGER"
      },
      "id507" : {
         "id" : "id507",
         "type" : "fault",
         "name" : "cannot read perl from file $filename: $!",
         "subroutine" : "id504"
      },
      "id91" : {
         "level" : 2,
         "name" : "Four components",
         "id" : "id91",
         "intro" : "<p>To fill-in a FORMAT, four clearly separated components play a role:</p>\n\n<ol>\n\n\n<p><li>modifiers<br />\nHow to change the provided values, for instance to hide locale\ndifferences.</p>\n\n\n<p><li>serializer<br />\nHow to represent (the modified) the values correctly, for instance <code>undef</code>\nand ARRAYs.</p>\n\n\n<p><li>conversion<br />\nThe standard UNIX format rules, like <code>%d</code>.  One conversion rule\nhas been added 'S', which provides unicode correct behavior.</p>\n\n\n<p><li>encoding<br />\nPrepare the output for a certain syntax, like HTML.</p>\n</ol>\n\n<p>Simplified:</p>\n<pre>\n  # sprinti() replaces \"{$key$modifiers$conversion}\" by\n  $encode-&gt;($format-&gt;($serializer-&gt;($modifiers-&gt;($args{$key}))))\n\n  # sprintp() replaces \"%pos{$modifiers}$conversion\" by\n  $encode-&gt;($format-&gt;($serializer-&gt;($modifiers-&gt;($arg[$pos]))))\n</pre>\n\n<p>Example:</p>\n<pre>\n  printi \"price: {price € %-10s}\", price =&gt; $cost;\n  printi \"price: {price € %-10s}\", { price =&gt; $cost };\n  printp \"price: %-10{€}s\", $cost;\n\n  $value      = $cost (in €)\n  $modifier   = convert € to local currency £\n  $serializer = show float as string\n  $format     = column width %-10s\n  $encode     = £ into &amp;pound;     # when encodingFor('HTML')\n</pre>\n",
         "type" : "section",
         "path" : "DETAILS/Four components"
      },
      "id1188" : {
         "name" : "collectStack",
         "id" : "id1188",
         "intro" : "<p>Returns an ARRAY of ARRAYs with text, filename, line-number.</p>\n",
         "type" : "ci_method",
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)"
      },
      "id1297" : {
         "id" : "id1297",
         "type" : "chapter",
         "nest" : [
            "id1298",
            "id1299"
         ],
         "path" : "DETAILS",
         "level" : 1,
         "name" : "DETAILS"
      },
      "id1232" : {
         "type" : "chapter",
         "id" : "id1232",
         "nest" : [
            "id1233",
            "id1241",
            "id1249"
         ],
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS"
      },
      "id413" : {
         "subroutine" : "id412",
         "name" : "no counting positional for '$msgid'",
         "type" : "error",
         "id" : "id413"
      },
      "id925" : {
         "name" : "charset",
         "params" : "$charset",
         "intro" : "<p>Translate the text-strings into the specified <tt class=\"parameter\">$charset</tt>, otherwise the\nsysadmin may get unreadable text.</p>\n",
         "type" : "option",
         "id" : "id925"
      },
      "id793" : {
         "id" : "id793",
         "value" : "&lt;<code>undef</code>>",
         "type" : "default",
         "name" : "config"
      },
      "id327" : {
         "options" : [
            [
               "id328",
               "id329"
            ],
            [
               "id334",
               "id335"
            ],
            [
               "id332",
               "id333"
            ],
            [
               "id330",
               "id331"
            ]
         ],
         "intro" : "<p>Extract message ids from the templates, and register them to the lexicon.\nRead section <a class=\"jump\" href=\"id349\">Extracting PO-files</a> how to use this method.</p>\n\n<p>Show statistics will be show when the <a class=\"jump\" href=\"id801\">Log::Report</a> more is VERBOSE or\nDEBUG.</p>\n",
         "type" : "i_method",
         "id" : "id327",
         "call" : "$obj-&gt;<b><a name=\"id327\">extract</a></b>(&nbsp;%options&nbsp;)",
         "name" : "extract"
      },
      "id627" : {
         "id" : "id627",
         "value" : "[]",
         "type" : "default",
         "name" : "comment"
      },
      "id1172-id760" : {
         "type" : "default",
         "value" : "'LOWERCASE'",
         "id" : "id1172-id760",
         "extends" : "id1172",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "name" : "format_reason"
      },
      "id1198-id1066" : {
         "name" : "linenr",
         "extends" : "id1198",
         "params" : "INTEGER",
         "id" : "id1198-id1066",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "type" : "option"
      },
      "id260" : {
         "id" : "id260",
         "intro" : "<pre>  fatal_handler sub {\n    my ($dsl, $msg, $reason, $default) = @_;\n\n    (my $ctype = $dsl-&gt;request-&gt;header('content-type')) =~ s/;.*//;\n    return if $ctype ne 'application/json';\n    status $reason eq 'PANIC' ? 'Internal Server Error' : 'Bad Request';\n    $dsl-&gt;send_as(JSON =&gt; {\n       error       =&gt; 1,\n       description =&gt; $msg-&gt;toString,\n    }, {\n       content_type =&gt; 'application/json; charset=UTF-8',\n    });\n  };\n</pre>\n",
         "type" : "example",
         "name" : "Return JSON responses for requests with content-type of application/json\n"
      },
      "id1090-id542" : {
         "extends" : "id1090",
         "name" : "load",
         "call" : "$obj-&gt;<b><a name=\"id1090\">load</a></b>(&nbsp;$domain, $locale&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1090\">Log::Report::Translator::load()</a></p>",
         "id" : "id1090-id542",
         "type" : "i_method"
      },
      "id1163" : {
         "name" : "Constructors",
         "level" : 2,
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id1164"
         ],
         "type" : "section",
         "id" : "id1163"
      },
      "id583" : {
         "version" : "1.16",
         "chapters" : [
            "id584",
            "id585",
            "id586",
            "id587",
            "id603"
         ],
         "name" : "Log::Report::Translator::Context",
         "inheritance" : {},
         "id" : "id583",
         "title" : "handle translation contexts",
         "is_pure_pod" : false,
         "package" : "Log::Report::Translator::Context",
         "distribution" : "Log-Report-Lexicon"
      },
      "id1027" : {
         "id" : "id1027",
         "intro" : "<p>When <code>$@</code> is used the traditional way, it is checked to have\na string content.  In this case, stringify into the fatal error\nor nothing.</p>\n",
         "type" : "overload",
         "call" : "overload <b><a name=\"id1027\">\"\"</a></b>; stringify",
         "name" : "\"\""
      },
      "id170" : {
         "subroutine" : "id165",
         "name" : "illegal formatter '$name' at $fn line $line.",
         "type" : "error",
         "id" : "id170"
      },
      "id1249" : {
         "path" : "METHODS/Processing",
         "type" : "section",
         "id" : "id1249",
         "subroutines" : [
            "id1250",
            "id1256",
            "id1251",
            "id1257",
            "id1252",
            "id1254"
         ],
         "name" : "Processing",
         "level" : 2
      },
      "id1107" : {
         "level" : 2,
         "name" : "Attributes",
         "type" : "section",
         "id" : "id1107",
         "subroutines" : [
            "id1180-id1091",
            "id1179-id1091",
            "id1183-id1091",
            "id1181-id1091",
            "id1182-id1091",
            "id1108",
            "id1110",
            "id1109"
         ],
         "path" : "METHODS/Attributes"
      },
      "id832" : {
         "level" : 2,
         "name" : "Abbreviations for report()",
         "subroutines" : [
            "id837",
            "id836",
            "id839",
            "id842",
            "id843",
            "id840",
            "id841",
            "id833",
            "id838",
            "id835",
            "id834"
         ],
         "intro" : "<p>The following functions are all wrappers for calls to <a class=\"jump\" href=\"id807\">report()</a>,\nand available when \"syntax is SHORT\" (by default, see <a class=\"jump\" href=\"id867\">import()</a>).\nYou cannot specify additional options to influence the behavior of\n<code>report()</code>, which are usually not needed anyway.</p>\n",
         "id" : "id832",
         "type" : "section",
         "path" : "FUNCTIONS/Abbreviations for report()"
      },
      "id502" : {
         "path" : "METHODS/Attributes",
         "subroutines" : [
            "id528-id493",
            "id529-id493",
            "id531-id493",
            "id530-id493",
            "id527-id493"
         ],
         "id" : "id502",
         "type" : "section",
         "name" : "Attributes",
         "level" : 2
      },
      "id510" : {
         "name" : "use double quotes not single, in $string on $file line $line.",
         "subroutine" : "id504",
         "id" : "id510",
         "type" : "warning"
      },
      "id609" : {
         "intro" : "<p>The gnutext implementation of the context is very simple.  This is to\nbe expected from a library written in C.  The msgctxt alternatives\nare matched against the context keywords of the message.  In all or\nnone of the alternatives match, then just a random translation is\nchosen.</p>\n\n<p>In the simplest form, the msgctxt field contains a single keyword\n(not containing a comma).</p>\n<pre>\n  msgctxt \"gender=male\"\n</pre>\n\n<p>But you can do more.  <b>Be warned</b> that most (all?) existing tools\nwhich smartly edit PO-files do not understand these constructs: they\nsee the msgctxt as dump string without meaning.</p>\n<pre>\n  msgctxt \"agegroup=baby,agegroup=grandparent\" # baby OR grandparent\n  msgctxt \"gender=male agegroup=adult\"         # both male AND adult\n</pre>\n\n<p>So, a comma separated list of alternatives.  If any matches, then the\nrule is selected.</p>\n",
         "type" : "subsection",
         "id" : "id609",
         "path" : "DETAILS/Using context_rules/The msgctxt",
         "level" : 3,
         "name" : "The msgctxt"
      },
      "id539-id354" : {
         "subroutine" : "id538",
         "extends" : "id539",
         "name" : "starting new textdomain $domain, template in $filename",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id538\">Log::Report::Extract::write()</a></p>",
         "id" : "id539-id354",
         "type" : "info"
      },
      "id885" : {
         "call" : "$class-&gt;<b><a name=\"id885\">needs</a></b>(&nbsp;$reason, [$reasons]&nbsp;)",
         "intro" : "<p>Returns <code>true</code> when the reporter needs any of the <tt class=\"parameter\">$reasons</tt>, when any of\nthe active dispatchers is collecting messages in the specified level.\nThis is useful when the processing of data for the message is relatively\nexpensive, but for instance only required in debug mode.</p>\n",
         "id" : "id885",
         "type" : "c_method",
         "name" : "needs",
         "examples" : [
            "id886"
         ]
      },
      "id309" : {
         "name" : "template_syntax",
         "type" : "default",
         "value" : "'HTML'",
         "id" : "id309"
      },
      "id743" : {
         "level" : 2,
         "name" : "Managing PO's",
         "path" : "METHODS/Managing PO's",
         "nest" : [
            "id744",
            "id747"
         ],
         "id" : "id743",
         "type" : "section"
      },
      "id983-id221" : {
         "extends" : "id983",
         "name" : "prepend",
         "id" : "id983-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id983\">Log::Report::Message::prepend()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id983\">prepend</a></b>"
      },
      "id480" : {
         "type" : "fault",
         "id" : "id480",
         "name" : "cannot read msgids from $fn, need $size at $loc: $!",
         "subroutine" : "id467"
      },
      "id1169-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "id" : "id1169-id1021",
         "type" : "option",
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3",
         "extends" : "id1169",
         "name" : "mode"
      },
      "id1235" : {
         "name" : "report_opts",
         "params" : "\\%opts",
         "type" : "option",
         "id" : "id1235"
      },
      "id721" : {
         "diagnostics" : [
            "id722"
         ],
         "call" : "$obj-&gt;<b><a name=\"id721\">header</a></b>(&nbsp;[$field, [$content]]&nbsp;)",
         "id" : "id721",
         "type" : "i_method",
         "intro" : "<p>The translation of a blank MSGID is used to store a MIME header, which\ncontains some meta-data.  When only a <tt class=\"parameter\">$field</tt> is specified, that content is\nlooked-up (case-insensitive) and returned.  When a <tt class=\"parameter\">$content</tt> is specified,\nthe knowledge will be stored.  In latter case, the header structure\nmay get created.  When the <tt class=\"parameter\">$content</tt> is set to <code>undef</code>, the field will\nbe removed.</p>\n",
         "name" : "header"
      },
      "id1110" : {
         "call" : "$obj-&gt;<b><a name=\"id1110\">output</a></b>(&nbsp;$msg&nbsp;)",
         "intro" : "<p>Returns the file-handle to write the log lines to. [1.10] This may\ndepend on the <tt class=\"parameter\">$msg</tt> (especially message context)</p>\n",
         "id" : "id1110",
         "type" : "i_method",
         "name" : "output"
      },
      "id622" : {
         "intro" : "<p>The <tt class=\"parameter\">@translations</tt> for the <tt class=\"parameter\">msgid</tt>.  When <tt class=\"parameter\">msgid_plural</tt> is defined, then an\nARRAY must be provided.</p>\n",
         "id" : "id622",
         "type" : "option",
         "params" : "$translation|\\@translations",
         "name" : "msgstr"
      },
      "id529" : {
         "call" : "$obj-&gt;<b><a name=\"id529\">domains</a></b>",
         "intro" : "<p>Returns a sorted list of all known domain names.</p>\n",
         "id" : "id529",
         "type" : "i_method",
         "name" : "domains"
      },
      "id1003-id221" : {
         "name" : "untranslated",
         "extends" : "id1003",
         "call" : "$obj-&gt;<b><a name=\"id1003\">untranslated</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1003\">Log::Report::Message::untranslated()</a></p>",
         "type" : "i_method",
         "id" : "id1003-id221"
      },
      "id270" : {
         "name" : "fault",
         "type" : "i_method",
         "id" : "id270",
         "call" : "$obj-&gt;<b><a name=\"id270\">fault</a></b>"
      },
      "id322" : {
         "type" : "example",
         "intro" : "<pre>  my $domain = $templater-&gt;addTextdomain(\n    name     =&gt; 'my-project',\n    function =&gt; 'loc',   # default\n  );\n</pre>\n",
         "id" : "id322"
      },
      "id1339" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Lexicon::POT\n   is a <a class=\"jump\" href=\"id735\">Log::Report::Lexicon::Table</a>\n</pre>\n",
         "id" : "id1339"
      },
      "id1059" : {
         "version" : "1.46",
         "chapters" : [
            "id1060",
            "id1327",
            "id1061",
            "id1062",
            "id1063"
         ],
         "name" : "MojoX::Log::Report",
         "id" : "id1059",
         "inheritance" : {
            "extends" : [
               "Mojo::Log"
            ]
         },
         "title" : "divert log messages into Log::Report",
         "is_pure_pod" : false,
         "distribution" : "Log-Report",
         "package" : "MojoX::Log::Report"
      },
      "id837" : {
         "call" : "<b><a name=\"id837\">warning</a></b>(&nbsp;$message&nbsp;)",
         "intro" : "<p>Short for <code>report WARNING =&gt; $message</code></p>\n",
         "type" : "function",
         "id" : "id837",
         "name" : "warning"
      },
      "id1342" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Translator is extended by\n   <a class=\"jump\" href=\"id542\">Log::Report::Translator::Gettext</a>\n   <a class=\"jump\" href=\"id422\">Log::Report::Translator::POT</a>\n</pre>\n",
         "id" : "id1342",
         "type" : "chapter",
         "path" : "INHERITANCE"
      },
      "id904" : {
         "name" : "Locale::gettext and Locate::TextDomain",
         "level" : 3,
         "path" : "DETAILS/Compared to other solutions in Perl/Locale::gettext and Locate::TextDomain",
         "intro" : "<p>Both on GNU gettext based implementations can be used as translation\nframeworks.  Locale::TextDomain syntax is supported, with quite some\nextensions. Read the excellent documentation of Locale::TextDomain.\nOnly the tried access via <code>$__</code> and <code>%__</code> are not supported.</p>\n\n<p>The main difference with these modules is the moment when the translation\ntakes place.  In Locale::TextDomain, an <code>__x()</code> will result in an\nimmediate translation request via <code>gettext()</code>.  <code>Log::Report</code>'s version\nof <code>__x()</code> will only capture what needs to be translated in an object.\nWhen the object is used in a print statement, only then the translation\nwill take place.  This is needed to offer ways to send different\ntranslations of the message to different destinations.</p>\n\n<p>To be able to postpone translation, objects are returned which stringify\ninto the translated text.</p>\n",
         "type" : "subsection",
         "id" : "id904"
      },
      "id1077" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id1180-id1066",
            "id1179-id1066",
            "id1183-id1066",
            "id1181-id1066",
            "id1182-id1066",
            "id1078"
         ],
         "type" : "section",
         "id" : "id1077",
         "path" : "METHODS/Attributes"
      },
      "id160" : {
         "type" : "error",
         "id" : "id160",
         "name" : "translation domain without name.",
         "subroutine" : "id156"
      },
      "id1167-id1066" : {
         "name" : "locale",
         "extends" : "id1167",
         "params" : "LOCALE",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "id" : "id1167-id1066",
         "type" : "option"
      },
      "id987" : {
         "name" : "count",
         "type" : "i_method",
         "intro" : "<p>Returns the count, which is used to select the translation\nalternatives.</p>\n",
         "id" : "id987",
         "call" : "$obj-&gt;<b><a name=\"id987\">count</a></b>"
      },
      "id809" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id809",
         "name" : "to"
      },
      "id978" : {
         "name" : "_msgctxt",
         "intro" : "<p>[1.22] Message <tt class=\"parameter\">$context</tt> in the translation file, the traditional use.  Cannot\nbe combined with <tt class=\"parameter\">_context</tt> on the same msgids.</p>\n",
         "type" : "option",
         "id" : "id978",
         "params" : "$context"
      },
      "id385" : {
         "version" : "1.05",
         "chapters" : [
            "id386",
            "id1330",
            "id387",
            "id388",
            "id389",
            "id1288"
         ],
         "name" : "Log::Report::Template::Textdomain",
         "id" : "id385",
         "inheritance" : {
            "extends" : [
               "Log::Report::Domain"
            ]
         },
         "title" : "template translation with one domain",
         "is_pure_pod" : false,
         "distribution" : "Log-Report-Template",
         "package" : "Log::Report::Template::Textdomain"
      },
      "id1193-id905" : {
         "options" : [
            [
               "id1208-id905",
               "id1209-id905"
            ],
            [
               "id1200-id905",
               "id1201-id905"
            ],
            [
               "id1196-id905",
               "id1197-id905"
            ],
            [
               "id1198-id905",
               "id1199-id905"
            ],
            [
               "id1204-id905",
               "id1205-id905"
            ],
            [
               "id1206-id905",
               "id1207-id905"
            ],
            [
               "id1194-id905",
               "id1195-id905"
            ],
            [
               "id1202-id905",
               "id1203-id905"
            ]
         ],
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "id" : "id1193-id905",
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)",
         "name" : "stackTraceLine",
         "extends" : "id1193"
      },
      "id249" : {
         "nest" : [
            "id250",
            "id251"
         ],
         "type" : "chapter",
         "id" : "id249",
         "level" : 1,
         "name" : "DETAILS",
         "path" : "DETAILS"
      },
      "id685" : {
         "name" : "plural_alg",
         "id" : "id685",
         "value" : "<code>n!=1</code>",
         "type" : "default"
      },
      "id996" : {
         "intro" : "<p>When the message was produced with</p>\n<pre>\n  my @files = qw/one two three/;\n  my $msg = __xn\n     \"found one file: {file}\",\n     \"found {nrfiles} files: {files}\",\n     scalar @files,\n     file    =&gt; $files[0],\n     files   =&gt; \\@files,\n     nrfiles =&gt; @files+0,  # or scalar(@files)\n     _tags   =&gt; [ 'IO', 'files' ],\n     _join   =&gt; ', ';\n</pre>\n\n<p>then the values can be takes from the produced message as</p>\n<pre>\n  my $files = $msg-&gt;valueOf('files');  # returns ARRAY reference\n  print @$files;                 # 3\n  my $count = $msg-&gt;count;       # 3\n  my @tags  = $msg-&gt;tags;        # 'IO', 'files'\n  if($msg-&gt;taggedWith('files'))  # true\n</pre>\n\n<p>Simplified, the above example can also be written as:</p>\n<pre>\n  local $\" = ', ';  # Perl default\n  my $msg  = __xn\n     \"found one file: {files}\",\n     \"found {_count} files: {files}\",\n     @files,      # has scalar context\n     files   =&gt; \\@files,\n     _tags   =&gt; 'IO, files';\n</pre>\n",
         "type" : "example",
         "id" : "id996"
      },
      "id1181-id760" : {
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "id" : "id1181-id760",
         "type" : "i_method",
         "extends" : "id1181",
         "name" : "mode"
      },
      "id461" : {
         "id" : "id461",
         "inheritance" : {
            "extends" : [
               "Log::Report::Lexicon::Table"
            ]
         },
         "title" : "use translations from an MO file",
         "is_pure_pod" : false,
         "package" : "Log::Report::Lexicon::MOTcompact",
         "distribution" : "Log-Report-Lexicon",
         "version" : "1.16",
         "chapters" : [
            "id462",
            "id1340",
            "id463",
            "id464",
            "id465"
         ],
         "name" : "Log::Report::Lexicon::MOTcompact"
      },
      "id1283" : {
         "path" : "DETAILS",
         "level" : 1,
         "name" : "DETAILS",
         "id" : "id1283",
         "type" : "chapter",
         "nest" : [
            "id1284",
            "id1285"
         ]
      },
      "id1245" : {
         "intro" : "<pre>  if($ex-&gt;isFatal) { $ex-&gt;throw(reason =&gt; 'ALERT') }\n  else { $ex-&gt;throw }\n</pre>\n",
         "id" : "id1245",
         "type" : "example"
      },
      "id744" : {
         "path" : "METHODS/Managing PO's/Translation",
         "id" : "id744",
         "type" : "subsection",
         "subroutines" : [
            "id746",
            "id745"
         ],
         "name" : "Translation",
         "level" : 3
      },
      "id984-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id984\">msgid</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id984\">Log::Report::Message::msgid()</a></p>",
         "id" : "id984-id221",
         "type" : "i_method",
         "extends" : "id984",
         "name" : "msgid"
      },
      "id822" : {
         "type" : "error",
         "id" : "id822",
         "name" : "odd length parameter list with '$msg'.",
         "subroutine" : "id807"
      },
      "id1349" : {
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::DBIC::Profiler\n   is a DBIx::Class::Storage::Statistics\n</pre>\n",
         "id" : "id1349",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id199" : {
         "id" : "id199",
         "type" : "function",
         "call" : "<b><a name=\"id199\">failure</a></b>(&nbsp;$message&nbsp;)",
         "name" : "failure"
      },
      "id1203-id905" : {
         "name" : "params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "extends" : "id1203",
         "id" : "id1203-id905",
         "type" : "default",
         "value" : "&lt;required&gt;"
      },
      "id162-id385" : {
         "extends" : "id162",
         "name" : "name",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id162\">Log::Report::Minimal::Domain::name()</a></p>",
         "id" : "id162-id385",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id162\">name</a></b>"
      },
      "id1080" : {
         "is_pure_pod" : false,
         "package" : "Log::Report::Translator",
         "distribution" : "Log-Report",
         "inheritance" : {
            "extended_by" : [
               "Log::Report::Translator::Gettext",
               "Log::Report::Translator::POT"
            ]
         },
         "id" : "id1080",
         "title" : "base implementation for translating messages",
         "chapters" : [
            "id1081",
            "id1342",
            "id1082",
            "id1083",
            "id1084"
         ],
         "name" : "Log::Report::Translator",
         "version" : "1.46"
      },
      "id637" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "subroutines" : [
            "id649",
            "id642",
            "id651",
            "id644",
            "id643",
            "id648",
            "id640",
            "id646",
            "id641",
            "id639",
            "id647",
            "id654",
            "id650",
            "id652",
            "id638",
            "id645"
         ],
         "type" : "section",
         "id" : "id637"
      },
      "id1268" : {
         "name" : "DETAILS",
         "level" : 1,
         "path" : "DETAILS",
         "nest" : [
            "id1269",
            "id1270"
         ],
         "id" : "id1268",
         "type" : "chapter"
      },
      "id756-id561" : {
         "extends" : "id756",
         "name" : "header",
         "call" : "$obj-&gt;<b><a name=\"id756\">header</a></b>(&nbsp;$field&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id756\">Log::Report::Lexicon::Table::header()</a></p>",
         "type" : "i_method",
         "id" : "id756-id561"
      },
      "id181" : {
         "name" : "errno",
         "params" : "INTEGER",
         "id" : "id181",
         "type" : "option"
      },
      "id903" : {
         "type" : "subsection",
         "intro" : "<p>The two major logging frameworks for Perl are Log::Dispatch and\nLog::Log4perl; both provide a pluggable logging interface.</p>\n\n<p>Both frameworks do not have (gettext or maketext) language translation\nsupport, which has various consequences.  When you wish for to report\nin some other language, it must be translated before the logging\nfunction is called.   This may mean that an error message is produced\nin Chinese, and therefore also ends-up in the syslog file in Chinese.\nWhen this is not your language, you have a problem.</p>\n\n<p><a class=\"jump\" href=\"id801\">Log::Report</a> translates only in the back-end, which means that the user may\nget the message in Chinese, but you get your report in your beloved Dutch.\nWhen no dispatcher needs to report the message, then no time is lost in\ntranslating.</p>\n\n<p>With both logging frameworks, you use terminology comparable to\nsyslog: the module programmer determines the seriousness of the\nerror message, not the application which integrates multiple modules.\nThis is the way perl programs usually work, but often the cause for\ninconsequent user interaction.</p>\n",
         "id" : "id903",
         "path" : "DETAILS/Compared to other solutions in Perl/Log::Dispatch and Log::Log4perl",
         "level" : 3,
         "name" : "Log::Dispatch and Log::Log4perl"
      },
      "id337" : {
         "path" : "METHODS/Formatter value modifiers",
         "intro" : "<p>Modifiers simplify the display of values.  Read the section about\nmodifiers in <a class=\"jump\" href=\"id47\">String::Print</a>.  Here, only some examples are shown.</p>\n\n<p>You can achieve the same transformation with TT vmethods, or with the\nperl code which drives your website.  The advantange is that you can\ntranslate them.  And they are quite readible.</p>\n\n<ul>\n<li>POSIX format <code>%-10s</code>, <code>%2.4f</code>, etc<br />\n\n<p>Exactly like format of the perl's internal <code>printf()</code> (which is\nactually being called to do the formatting)</p>\n\n<p>Examples:</p>\n<pre>\n  # pi in two decimals\n  [% loc(\"π = {pi %.2f}\", pi =&gt; 3.14157) %]\n\n  # show int, no fraction. filesize is a template variable\n  [% loc(\"file size {size %d}\", size =&gt; filesize + 0.5) %]\n</pre>\n<li>BYTES<br />\n\n<p>Convert a file size into a nice human readible format.</p>\n\n<p>Examples:</p>\n<pre>\n  # filesize and fn are passed as variables to the templater\n  [% loc(\"downloaded {size BYTES} {fn}\\n\", size =&gt; fs, fn =&gt; fn) %]\n  # may produce:   \"  0 B\", \"25 MB\", \"1.5 GB\", etc\n</pre>\n<li>Time-formatting YEAR, DATE, TIME, DT<br />\n\n<p>Accept various time syntaxes as value, and translate them into\nstandard formats: year only, date in <code>YYYY-MM-DD</code>, time as <code>HH::MM::SS</code>,\nand various DateTime formats:</p>\n\n<p>Examples:</p>\n<pre>\n  # shows 'Copyright 2017'\n  [% loc(\"Copyright {today YEAR}\", today =&gt; '2017-06-26') %]\n\n  # shows 'Created: 2017-06-26'\n  [% loc(\"Created: {now DATE}\", now =&gt; '2017-06-26 00:24:15') %]\n\n  # shows 'Night: 00:24:15'\n  [% loc(\"Night: {now TIME}\", now =&gt; '2017-06-26 00:24:15') %]\n\n  # shows 'Mon Jun 26 00:28:50 CEST 2017'\n  [% loc(\"Stamp: {now DT(ASC)}\", now =&gt; 1498429696) %]\n</pre>\n<li>Default //\"string\", //'string', or //word<br />\n\n<p>When a parameter has no value or is an empty string, the word or\nstring will take its place.</p>\n<pre>\n  [% loc(\"visitors: {count //0}\", count =&gt; 3) %]\n  [% loc(\"published: {date DT//'not yet'}\", date =&gt; '') %]\n  [% loc(\"copyright: {year//2017 YEAR}\", year =&gt; '2018') %]\n  [% loc(\"price: {price//5 EUR}\", price =&gt; product.price %]\n  [% loc(\"price: {price EUR//unknown}\", price =&gt; 3 %]\n</pre>\n\n</ul>\n",
         "id" : "id337",
         "type" : "section",
         "name" : "Formatter value modifiers",
         "level" : 2
      },
      "id1052" : {
         "name" : "success",
         "type" : "i_method",
         "intro" : "<p>Returns <code>true</code> if the block exited normally.</p>\n",
         "id" : "id1052",
         "call" : "$obj-&gt;<b><a name=\"id1052\">success</a></b>"
      },
      "id935" : {
         "id" : "id935",
         "inheritance" : {
            "extended_by" : [
               "Dancer2::Plugin::LogReport::Message"
            ]
         },
         "title" : "a piece of text to be translated",
         "is_pure_pod" : false,
         "distribution" : "Log-Report",
         "package" : "Log::Report::Message",
         "version" : "1.46",
         "chapters" : [
            "id936",
            "id1357",
            "id937",
            "id938",
            "id939",
            "id943",
            "id1011"
         ],
         "name" : "Log::Report::Message"
      },
      "id1332" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Lexicon::Table is extended by\n   <a class=\"jump\" href=\"id461\">Log::Report::Lexicon::MOTcompact</a>\n   <a class=\"jump\" href=\"id669\">Log::Report::Lexicon::POT</a>\n   <a class=\"jump\" href=\"id561\">Log::Report::Lexicon::POTcompact</a>\n</pre>\n",
         "id" : "id1332",
         "path" : "INHERITANCE"
      },
      "id968" : {
         "name" : "_class",
         "type" : "option",
         "intro" : "<p>Deprecated alternative for <tt class=\"parameter\">_tag</tt>.</p>\n",
         "id" : "id968",
         "params" : "$tags|\\@tags"
      },
      "id1055" : {
         "name" : "tag",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id1055"
      },
      "id1335" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "id" : "id1335",
         "intro" : "<pre> Log::Report::Translator::POT\n   is a <a class=\"jump\" href=\"id1080\">Log::Report::Translator</a>\n</pre>\n",
         "type" : "chapter"
      },
      "id65" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id67",
            "id68",
            "id70",
            "id66"
         ],
         "id" : "id65",
         "type" : "section",
         "path" : "METHODS/Attributes"
      },
      "id982" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id989",
            "id991",
            "id986",
            "id984",
            "id993",
            "id994",
            "id985",
            "id995",
            "id987",
            "id992",
            "id990",
            "id983",
            "id988"
         ],
         "id" : "id982",
         "type" : "section",
         "path" : "METHODS/Attributes"
      },
      "id471" : {
         "name" : "cannot read mo from file $fn: $!",
         "subroutine" : "id467",
         "type" : "fault",
         "id" : "id471"
      },
      "id529-id354" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id529\">Log::Report::Extract::domains()</a></p>",
         "id" : "id529-id354",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id529\">domains</a></b>",
         "extends" : "id529",
         "name" : "domains"
      },
      "id149" : {
         "id" : "id149",
         "intro" : "<p>Returns the classes which loaded the optional module.</p>\n",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id149\">usedBy</a></b>",
         "name" : "usedBy"
      },
      "id1170-id905" : {
         "name" : "mode",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "extends" : "id1170",
         "value" : "'NORMAL'",
         "type" : "default",
         "id" : "id1170-id905"
      },
      "id1018" : {
         "id" : "id1018",
         "intro" : "<p>With Locale::TextDomain, you have to do</p>\n<pre>\n  use Locale::TextDomain;\n  print __nx(\n     \"One file has been deleted.\\n\",\n     \"{num} files have been deleted.\\n\",\n     $num_files,\n     num =&gt; $num_files,\n  );\n</pre>\n\n<p>With <code>Log::Report</code>, you can do</p>\n<pre>\n  use Log::Report;\n  print __nx(\n     \"One file has been deleted.\\n\",\n     \"{_count} files have been deleted.\\n\",\n     $num_files,\n  );\n</pre>\n\n<p>Of course, you need to be aware that the name used to reference the\ncounter is fixed to <code>_count</code>.  The first example works as well, but\nis more verbose.</p>\n",
         "type" : "example",
         "name" : "using the _count\n"
      },
      "id946" : {
         "type" : "option",
         "intro" : "<p>Indicates whether variables are to be filled-in; whether <code>__x</code> or <code>__</code> was\nused to define the message.</p>\n",
         "id" : "id946",
         "params" : "BOOLEAN",
         "name" : "_expand"
      },
      "id167-id385" : {
         "extends" : "id167",
         "id" : "id167-id385",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "name" : "where",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id166\">Log::Report::Minimal::Domain::configure(where)</a></p>"
      },
      "id281" : {
         "name" : "Session serialization",
         "level" : 3,
         "path" : "DETAILS/Setup and Configuration/Session serialization",
         "id" : "id281",
         "intro" : "<p>The Dancer2 session is used to maintain <a class=\"jump\" href=\"id935\">Log::Report::Message</a> objects.\nHowever, the session is stored in the database in serialized form\n(usually in JSON syntax).  To make this work, the message objects\nneed to be frozen.</p>\n\n<p>Add this to your config:</p>\n<pre>\n  engines:\n    session:\n      DBIC:\n        ...\n        serializer: JSON\n        serialize_options:\n          allow_tags: 1\n        deserialize_options:\n          allow_tags: 1\n</pre>\n",
         "type" : "subsection"
      },
      "id794" : {
         "value" : "'ALL'",
         "type" : "default",
         "id" : "id794",
         "name" : "accept"
      },
      "id827" : {
         "intro" : "<p>In SCALAR context, only one dispatcher name accepted The <a class=\"jump\" href=\"id825\">dispatcher()</a>\nmethod returns the <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a> objects which it has accessed.\nWhen multiple names where given, it wishes to return a LIST of objects,\nnot the count of them.</p>\n",
         "id" : "id827",
         "type" : "error",
         "subroutine" : "id825",
         "name" : "only one dispatcher name accepted in SCALAR context."
      },
      "id1242" : {
         "name" : "report_opts",
         "call" : "$obj-&gt;<b><a name=\"id1242\">report_opts</a></b>",
         "id" : "id1242",
         "type" : "i_method"
      },
      "id414" : {
         "type" : "error",
         "id" : "id414",
         "name" : "superfluous positional parameters for '$msgid'",
         "subroutine" : "id412"
      },
      "id172-id385" : {
         "extends" : "id172",
         "name" : "interpolate",
         "id" : "id172-id385",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id172\">Log::Report::Minimal::Domain::interpolate()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id172\">interpolate</a></b>(&nbsp;$msgid, [$args]&nbsp;)"
      },
      "id1166-id1091" : {
         "extends" : "id1166",
         "type" : "default",
         "id" : "id1166-id1091",
         "value" : "<code>depend on mode</code>",
         "name" : "accept",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>"
      },
      "id332" : {
         "id" : "id332",
         "intro" : "<p>By default, all filenames from the INCLUDE_PATH directories which match\nthe <tt class=\"parameter\">filename_match</tt> are processed, but you may explicitly create a\nsubset by hand.</p>\n",
         "type" : "option",
         "params" : "$file|\\@files",
         "name" : "filenames"
      },
      "id540-id493" : {
         "extends" : "id540",
         "id" : "id540-id493",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id540\">store</a></b>(&nbsp;$domain, $filename, $linenr, $context, $msg, [$msg_plural]&nbsp;)",
         "diagnostics" : [
            "id541-id493"
         ],
         "name" : "store",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id540\">Log::Report::Extract::store()</a></p>"
      },
      "id755-id461" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id755\">Log::Report::Lexicon::Table::nrPlurals()</a></p>",
         "id" : "id755-id461",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id755\">nrPlurals</a></b>",
         "name" : "nrPlurals",
         "extends" : "id755"
      },
      "id1239" : {
         "params" : "Log::Report::Message",
         "id" : "id1239",
         "type" : "option",
         "name" : "message"
      },
      "id584" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Log::Report::Translator::Context - handle translation contexts</p>\n",
         "id" : "id584",
         "type" : "chapter"
      },
      "id539" : {
         "subroutine" : "id538",
         "name" : "starting new textdomain $domain, template in $filename",
         "id" : "id539",
         "type" : "info"
      },
      "id299" : {
         "id" : "id299",
         "inheritance" : {
            "extends" : [
               "Template"
            ]
         },
         "title" : "Template Toolkit with translations",
         "is_pure_pod" : false,
         "distribution" : "Log-Report-Template",
         "package" : "Log::Report::Template",
         "version" : "1.05",
         "chapters" : [
            "id300",
            "id1341",
            "id301",
            "id302",
            "id303",
            "id341"
         ],
         "name" : "Log::Report::Template"
      },
      "id1179-id760" : {
         "extends" : "id1179",
         "name" : "name",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "type" : "i_method",
         "id" : "id1179-id760",
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>"
      },
      "id731" : {
         "nest" : [
            "id732",
            "id734"
         ],
         "id" : "id731",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id1165-id1021" : {
         "id" : "id1165-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "type" : "option",
         "params" : "$reasons|\\@reasons",
         "extends" : "id1165",
         "name" : "accept"
      },
      "id632" : {
         "intro" : "<p>As SCALAR, this contains a blank separated list of <tt class=\"parameter\">@locations</tt>.\nThe <tt class=\"parameter\">@locations</tt> are of the  form <code>filename:linenumber</code>, for\ninstance <code>lib/Foo.pm:42</code>\nSee <a class=\"jump\" href=\"id647\">addReferences()</a></p>\n",
         "type" : "option",
         "id" : "id632",
         "params" : "$locations|\\@locations",
         "name" : "references"
      },
      "id1209-id1091" : {
         "name" : "abstract",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "extends" : "id1209",
         "id" : "id1209-id1091",
         "type" : "default",
         "value" : "1"
      },
      "id948" : {
         "name" : "_domain",
         "type" : "option",
         "intro" : "<p>The text-domain (translation table) to which this <tt class=\"parameter\">_msgid</tt> belongs.</p>\n\n<p>With this parameter, your can \"borrow\" translations from other textdomains.\nBe very careful with this (although there are good use-cases)  The xgettext\nmsgid extractor may add the used msgid to this namespace as well.  To\navoid that, add a harmless '+':</p>\n<pre>\n  print __x(+\"errors\", _domain =&gt; 'global');\n</pre>\n\n<p>The extractor will not take the msgid when it is an expression.  The '+'\nhas no effect on the string at runtime.</p>\n",
         "id" : "id948",
         "params" : "$name|$object"
      },
      "id520" : {
         "intro" : "<p>The place where the lexicon is kept.  When no lexicon is defined yet,\nthis will be the <tt class=\"parameter\">$directory</tt> where an <code>domain/xx.po</code> file will be created.</p>\n",
         "id" : "id520",
         "type" : "option",
         "params" : "$directory",
         "name" : "lexicon"
      },
      "id754-id669" : {
         "subroutine" : "id753",
         "extends" : "id754",
         "name" : "invalid plural-form algorithm '$alg'.",
         "id" : "id754-id669",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id753\">Log::Report::Lexicon::Table::setupPluralAlgorithm()</a></p>",
         "type" : "error"
      },
      "id279" : {
         "id" : "id279",
         "intro" : "<p>Set up <a class=\"jump\" href=\"id289\">Dancer2::Logger::LogReport</a> by adding it to your Dancer2\napplication configuration (see <a href=\"https://metacpan.org/dist/Dancer2_Config\">manual Dancer2::Config</a>). By default,\nall messages will go to STDERR.</p>\n\n<p>To get all message out \"the Perl way\" (using print, warn and die) just use</p>\n<pre>\n  logger: \"LogReport\"\n</pre>\n\n<p>At start, these are handled by a <a class=\"jump\" href=\"id1217\">Log::Report::Dispatcher::Perl</a> object,\nnamed 'default'.  If you open a new dispatcher with the name 'default',\nthe output via the perl mechanisms will be stopped.</p>\n\n<p>To also send messages to your syslog:</p>\n<pre>\n  logger: \"LogReport\"\n\n  engines:\n    logger:\n      LogReport:\n        log_format: %a%i%m      # See Dancer2::Logger::LogReport\n        app_name: MyApp\n        dispatchers:\n          default:              # Name\n            type: SYSLOG        # Log::Reporter::dispatcher() options\n            identity: myapp\n            facility: local0\n            flags: \"pid ndelay nowait\"\n            mode: DEBUG\n</pre>\n\n<p>To send messages to a file:</p>\n<pre>\n  logger: \"LogReport\"\n\n  engines:\n    logger:\n      LogReport:\n        log_format: %a%i%m      # See Dancer2::Logger::LogReport\n        app_name: MyApp\n        dispatchers:\n          logfile:              # \"default\" dispatcher stays open as well\n            type: FILE\n            to: /var/log/myapp.log\n            charset: utf-8\n            mode: DEBUG\n</pre>\n\n<p>See <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a> for full details of options.</p>\n\n<p>Finally: a Dancer2 script may run many applications.  Each application\ncan have its own logger configuration.  However, <a class=\"jump\" href=\"id801\">Log::Report</a> dispatchers\nare global, so will be shared between Dancer2 applications.  Any attempt\nto create a new <a class=\"jump\" href=\"id801\">Log::Report</a> dispatcher by the same name (as will happen\nwhen a new Dancer2 application is started with the same configuration)\nwill be ignored.</p>\n",
         "type" : "subsection",
         "path" : "DETAILS/Setup and Configuration/Dancer2::Logger::LogReport",
         "level" : 3,
         "name" : "Dancer2::Logger::LogReport"
      },
      "id553" : {
         "path" : "FUNCTIONS",
         "subroutines" : [
            "id554",
            "id558",
            "id555",
            "id559",
            "id556",
            "id557",
            "id560"
         ],
         "type" : "chapter",
         "id" : "id553",
         "name" : "FUNCTIONS",
         "level" : 1
      },
      "id1172-id780" : {
         "name" : "format_reason",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "extends" : "id1172",
         "type" : "default",
         "value" : "'LOWERCASE'",
         "id" : "id1172-id780"
      },
      "id1186-id1091" : {
         "name" : "log",
         "extends" : "id1186",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1186\">Log::Report::Dispatcher::log()</a></p>",
         "id" : "id1186-id1091",
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)"
      },
      "id1185-id1021" : {
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1185\">Log::Report::Dispatcher::close()</a></p>",
         "id" : "id1185-id1021",
         "type" : "i_method",
         "extends" : "id1185",
         "name" : "close"
      },
      "id1013" : {
         "name" : "Why use format strings?",
         "level" : 2,
         "path" : "DETAILS/Why use format strings?",
         "type" : "section",
         "intro" : "<p>Simple perl scripts will use <code>print()</code> with variables in the string.\nHowever, when the content of the variable gets more unpredictable or\nneeds some pre-processing, then it gets tricky.  When you do want to\nintroduce translations (in the far future of your successful project)\nit gets impossible.  Let me give you some examples:</p>\n<pre>\n  print \"product: $name\\n\";    # simple perl\n\n  # Will not work because \"$name\" is interpolated too early\n  print translate(\"product: $name\"), \"\\n\";\n\n  # This is the gettext solution, with formats\n  printf translate(\"product: %s\\n\"), $name;\n\n  # With named in stead of positional parameters\n  print translate(\"product: {p}\\n\", p =&gt; $name);\n\n  # With Log::Report, the translate() is hidden in __x()\n  print __x\"product: {p}\\n\", p =&gt; $name;\n</pre>\n\n<p>Besides making translation possible, interpolation via format strings\nis much cleaner than in the simpelest perl way.  For instance, these\ncases:</p>\n<pre>\n  # Safety measures while interpolation\n  my $name = undef;\n  print \"product: $name\\n\";   # uninitialized warning\n  print __x\"product: {p}\\n\", p =&gt; $name;  # --&gt; product: undef\n\n  # Interpolation of more complex data\n  my @names = qw/a b c/;\n  print \"products: \", join(', ', @names), \"\\n\";\n  print __x\"products: {p}\\n\", p =&gt; \\@names;\n\n  # Padded values hard to do without format strings\n  print \"padded counter: \", ' ' x (6-length $c), \"$c\\n\";\n  printf \"padded counter: %6d\\n\", $counter;\n  print __x\"padded counter: {c%6d}\\n\", c =&gt; $counter;\n</pre>\n\n<p>So: using formats has many advantages.  Advice: use simple perl only in\n<code>trace</code> and <code>assert</code> messages, maybe also with panics.  For serious output\nof your program, use formatted output.</p>\n",
         "id" : "id1013"
      },
      "id1135" : {
         "name" : "translator",
         "type" : "default",
         "value" : "<code>created internally</code>",
         "id" : "id1135"
      },
      "id169" : {
         "id" : "id169",
         "value" : "<code>PRINTI</code>",
         "type" : "default",
         "name" : "formatter"
      },
      "id774" : {
         "value" : "[]",
         "id" : "id774",
         "type" : "default",
         "name" : "callbacks"
      },
      "id612" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Log::Report::Lexicon::PO - one translation definition</p>\n",
         "type" : "chapter",
         "id" : "id612"
      },
      "id491" : {
         "name" : "msgid",
         "intro" : "<p>Lookup the translations with the <tt class=\"parameter\">STRING</tt>.  Returns a SCALAR, when only\none translation is known, and an ARRAY when we have plural forms.\nReturns <code>undef</code> when the translation is not defined.</p>\n",
         "id" : "id491",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id491\">msgid</a></b>(&nbsp;STRING, [$msgctxt]&nbsp;)"
      },
      "id711" : {
         "call" : "$obj-&gt;<b><a name=\"id711\">index</a></b>",
         "intro" : "<p>Returns a HASH of all defined PO objects, organized by msgid.  Please try\nto avoid using this: use <a class=\"jump\" href=\"id715\">msgid()</a> for lookup and <a class=\"jump\" href=\"id717\">add()</a> for adding\ntranslations.</p>\n",
         "id" : "id711",
         "type" : "i_method",
         "name" : "index"
      },
      "id1199-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "name" : "linenr",
         "value" : "&lt;required&gt;",
         "id" : "id1199-id1091",
         "type" : "default",
         "extends" : "id1199"
      },
      "id1210" : {
         "level" : 1,
         "name" : "DETAILS",
         "path" : "DETAILS",
         "nest" : [
            "id1211",
            "id1212"
         ],
         "type" : "chapter",
         "id" : "id1210"
      },
      "id966" : {
         "id" : "id966",
         "intro" : "<p>Deprecated alternative for <tt class=\"parameter\">_tag</tt>.</p>\n",
         "type" : "option",
         "params" : "$tags|\\@tags",
         "name" : "_classes"
      },
      "id600" : {
         "id" : "id600",
         "type" : "error",
         "name" : "tags value must have form `a=b', found `$this' in `$source'",
         "subroutine" : "id599"
      },
      "id519" : {
         "name" : "new",
         "diagnostics" : [
            "id524",
            "id525"
         ],
         "call" : "$class-&gt;<b><a name=\"id519\">new</a></b>(&nbsp;%options&nbsp;)",
         "type" : "c_method",
         "id" : "id519",
         "options" : [
            [
               "id522",
               "id523"
            ],
            [
               "id520",
               "id521"
            ]
         ]
      },
      "id530-id354" : {
         "extends" : "id530",
         "name" : "pots",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id530\">Log::Report::Extract::pots()</a></p>",
         "id" : "id530-id354",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id530\">pots</a></b>(&nbsp;$domain&nbsp;)"
      },
      "id312" : {
         "name" : "translate_to",
         "type" : "option",
         "intro" : "<p>Globally set the output language of template processing.  Usually, this\nis derived from the logged-in user setting or browser setting.\nSee <a class=\"jump\" href=\"id319\">translateTo()</a>.</p>\n",
         "id" : "id312",
         "params" : "LANGUAGE"
      },
      "id300" : {
         "path" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Log::Report::Template - Template Toolkit with translations</p>\n",
         "id" : "id300",
         "name" : "NAME",
         "level" : 1
      },
      "id434" : {
         "path" : "METHODS/Attributes",
         "type" : "section",
         "id" : "id434",
         "subroutines" : [
            "id435",
            "id436"
         ],
         "name" : "Attributes",
         "level" : 2
      },
      "id489" : {
         "id" : "id489",
         "intro" : "<p>Returns the character-set as found in the PO-file.  The strings are\nconverted into utf8 before you use them in the program.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id489\">originalCharset</a></b>",
         "name" : "originalCharset"
      },
      "id88" : {
         "type" : "example",
         "intro" : "<pre>  # positional parameters\n  my $x = sprintp \"dumpfiles: %s\\n\", \\@dumpfiles, _join =&gt; ':';\n\n  # is rewritten into, and then processed as\n  my $x = sprinti \"dumpfiles: {_1}\\n\", _1 =&gt; \\@dumpfiles, _join =&gt; ':';\n</pre>\n",
         "id" : "id88",
         "name" : "of the rewrite\n"
      },
      "id1152-id385" : {
         "call" : "$obj-&gt;<b><a name=\"id1152\">defaultContext</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1152\">Log::Report::Domain::defaultContext()</a></p>",
         "id" : "id1152-id385",
         "type" : "i_method",
         "extends" : "id1152",
         "name" : "defaultContext"
      },
      "id1060" : {
         "level" : 1,
         "name" : "NAME",
         "intro" : "<p>MojoX::Log::Report - divert log messages into Log::Report</p>\n",
         "type" : "chapter",
         "id" : "id1060",
         "path" : "NAME"
      },
      "id1198-id905" : {
         "params" : "INTEGER",
         "id" : "id1198-id905",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "type" : "option",
         "name" : "linenr",
         "extends" : "id1198"
      },
      "id269" : {
         "name" : "error",
         "type" : "i_method",
         "id" : "id269",
         "call" : "$obj-&gt;<b><a name=\"id269\">error</a></b>"
      },
      "id441" : {
         "version" : "1.16",
         "chapters" : [
            "id442",
            "id443",
            "id444",
            "id445",
            "id456"
         ],
         "name" : "Log::Report::Lexicon::Index",
         "id" : "id441",
         "inheritance" : {},
         "title" : "search through available translation files",
         "is_pure_pod" : false,
         "package" : "Log::Report::Lexicon::Index",
         "distribution" : "Log-Report-Lexicon"
      },
      "id92" : {
         "name" : "Interpolation: keys",
         "level" : 2,
         "path" : "DETAILS/Interpolation: keys",
         "intro" : "<p>A key is a bareword (like a variable name) or a list of barewords\nseparated by dots (no blanks!)</p>\n\n<p><b>Please</b> use explanatory key names, to help the translation\nprocess once you need that (in the future).</p>\n",
         "nest" : [
            "id93",
            "id94"
         ],
         "type" : "section",
         "id" : "id92"
      },
      "id1288" : {
         "id" : "id1288",
         "type" : "chapter",
         "nest" : [
            "id1289"
         ],
         "path" : "DETAILS",
         "level" : 1,
         "name" : "DETAILS"
      },
      "id764" : {
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS",
         "nest" : [
            "id765",
            "id776",
            "id778"
         ],
         "type" : "chapter",
         "id" : "id764"
      },
      "id179" : {
         "type" : "section",
         "id" : "id179",
         "subroutines" : [
            "id180",
            "id187",
            "id188"
         ],
         "path" : "FUNCTIONS/Report Production and Configuration",
         "level" : 2,
         "name" : "Report Production and Configuration"
      },
      "id1197" : {
         "value" : "&lt;required&gt;",
         "id" : "id1197",
         "type" : "default",
         "name" : "filename"
      },
      "id1182-id1021" : {
         "id" : "id1182-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>",
         "extends" : "id1182",
         "name" : "isDisabled"
      },
      "id1132" : {
         "name" : "contextRules",
         "type" : "i_method",
         "id" : "id1132",
         "call" : "$obj-&gt;<b><a name=\"id1132\">contextRules</a></b>"
      },
      "id915" : {
         "intro" : "<p>Any combination of <tt class=\"parameter\">$flags</tt> as defined by Sys::Syslog, as comma-separated\nstring.  Examples for flags are: <code>pid</code>, <code>ndelay</code>, and <code>nowait</code>.</p>\n",
         "type" : "option",
         "id" : "id915",
         "params" : "$flags",
         "name" : "flags"
      },
      "id423" : {
         "type" : "chapter",
         "intro" : "<p>Log::Report::Translator::POT - translation based on POT files</p>\n",
         "id" : "id423",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id976" : {
         "id" : "id976",
         "intro" : "<p>[1.00] Set the <tt class=\"parameter\">@keywords</tt> which can be used to select alternatives\nbetween translations.  Read the DETAILS section in\n<a class=\"jump\" href=\"id583\">Log::Report::Translator::Context</a></p>\n",
         "type" : "option",
         "params" : "$keyword|\\@keywords",
         "name" : "_context"
      },
      "id1187-id1066" : {
         "extends" : "id1187",
         "name" : "translate",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "type" : "i_method",
         "id" : "id1187-id1066",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)"
      },
      "id317" : {
         "level" : 2,
         "name" : "Attributes",
         "type" : "section",
         "id" : "id317",
         "subroutines" : [
            "id318",
            "id319"
         ],
         "path" : "METHODS/Attributes"
      },
      "id450" : {
         "name" : "Search",
         "level" : 2,
         "path" : "METHODS/Search",
         "type" : "section",
         "id" : "id450",
         "subroutines" : [
            "id451",
            "id452",
            "id454",
            "id453"
         ]
      },
      "id1208-id905" : {
         "params" : "INTEGER",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "id" : "id1208-id905",
         "name" : "abstract",
         "extends" : "id1208"
      },
      "id953-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id952\">Log::Report::Message::new(_plural)</a></p>",
         "name" : "_plural",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id953-id221",
         "extends" : "id953"
      },
      "id617" : {
         "call" : "$class-&gt;<b><a name=\"id617\">new</a></b>(&nbsp;%options&nbsp;)",
         "diagnostics" : [
            "id636"
         ],
         "options" : [
            [
               "id630",
               "id631"
            ],
            [
               "id626",
               "id627"
            ],
            [
               "id634",
               "id635"
            ],
            [
               "id628",
               "id629"
            ],
            [
               "id624",
               "id625"
            ],
            [
               "id618",
               "id619"
            ],
            [
               "id620",
               "id621"
            ],
            [
               "id622",
               "id623"
            ],
            [
               "id632",
               "id633"
            ]
         ],
         "type" : "c_method",
         "id" : "id617",
         "name" : "new"
      },
      "id1263" : {
         "level" : 1,
         "name" : "FUNCTIONS",
         "type" : "chapter",
         "id" : "id1263",
         "subroutines" : [
            "id1267",
            "id1264"
         ],
         "path" : "FUNCTIONS"
      },
      "id998" : {
         "name" : "taggedWith",
         "type" : "i_method",
         "intro" : "<p>[1.44] Returns <code>true</code> if the message carries the specified <tt class=\"parameter\">$tag</tt> (string) or\nmatches the Regexp.  The trueth value is the (first matching) tag.</p>\n",
         "id" : "id998",
         "call" : "$obj-&gt;<b><a name=\"id998\">taggedWith</a></b>(&nbsp;$tag|Regexp&nbsp;)"
      },
      "id855" : {
         "name" : "N__",
         "examples" : [
            "id856"
         ],
         "intro" : "<p>Label to indicate that the string is a text which will be translated\nlater.  The function itself does nothing.  See also <a class=\"jump\" href=\"id859\">N__w()</a>.</p>\n\n<p>This no-op function is used as label to the xgettext program to build the\ntranslation tables.</p>\n",
         "type" : "function",
         "id" : "id855",
         "call" : "<b><a name=\"id855\">N__</a></b>(&nbsp;$msgid&nbsp;)"
      },
      "id1149" : {
         "id" : "id1149",
         "intro" : "<pre>  use Log::Report 'my-domain', context_rules =&gt; {};\n</pre>\n",
         "type" : "example"
      },
      "id1207" : {
         "name" : "max_params",
         "value" : "8",
         "type" : "default",
         "id" : "id1207"
      },
      "id753-id461" : {
         "name" : "setupPluralAlgorithm",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id753\">Log::Report::Lexicon::Table::setupPluralAlgorithm()</a></p>",
         "extends" : "id753",
         "id" : "id753-id461",
         "type" : "i_method",
         "diagnostics" : [
            "id754-id461"
         ],
         "call" : "$obj-&gt;<b><a name=\"id753\">setupPluralAlgorithm</a></b>"
      },
      "id1259" : {
         "name" : "Log::Report::Die",
         "chapters" : [
            "id1260",
            "id1355",
            "id1261",
            "id1262",
            "id1263"
         ],
         "version" : "1.46",
         "distribution" : "Log-Report",
         "package" : "Log::Report::Die",
         "is_pure_pod" : false,
         "title" : "compatibility routines with Perl's die/croak/confess",
         "id" : "id1259",
         "inheritance" : {
            "extends" : [
               "Exporter"
            ]
         }
      },
      "id310" : {
         "name" : "modifiers",
         "params" : "\\@modifiers",
         "intro" : "<p>Add <tt class=\"parameter\">@modifiers</tt> to the default set.  Modifiers are part of the\nformatting process, when values get inserted in the translated string.\nRead <a class=\"jump\" href=\"id337\">Formatter value modifiers</a>.</p>\n",
         "id" : "id310",
         "type" : "option"
      },
      "id302" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "intro" : "<p>This module extends Template, which is the core of Template Toolkit.\nThe main addition is support for translations via the translation\nframework offered by <a class=\"jump\" href=\"id801\">Log::Report</a>.</p>\n\n<p>You add translations to a template system, by adding calls to some\ntranslation function (by default called <code>loc()</code>) to your template text.\nThat function will perform dark magic to collect the translation from\ntranslation tables, and fill in values.  For instance:</p>\n<pre>\n  [% price = 3.14 %]\n  &lt;divE&lt;gt>Price: [% price %]&lt;/divE&lt;gt>          # no translation\n  &lt;divE&lt;gt>[% loc(\"Price: {price}\") %]&lt;/divE&lt;gt> # translation optional\n</pre>\n\n<p>It's quite a lot of work to make your templates translatable.\nPlease read the <a class=\"jump\" href=\"id341\">DETAILS</a> section before you start using this module.</p>\n",
         "id" : "id302",
         "type" : "chapter",
         "path" : "DESCRIPTION"
      },
      "id1202-id760" : {
         "extends" : "id1202",
         "name" : "params",
         "id" : "id1202-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "type" : "option",
         "params" : "ARRAY"
      },
      "id610" : {
         "path" : "DETAILS/Using context_rules/Configuration",
         "intro" : "<p>The tools which handle translations expect the msgctxt to be static.\nFor instance, contain a filename where the string is used to disambigue\naccidental collissions of the use of the same msgid for different\npurposes.</p>\n\n<p>Now, we have designed far more flexible contexts.  We need to generate all\npossible msgctxt values while extracting msgids to update the PO-files.\nTherefore, we need a map-file.</p>\n\n<p>The context maps are included in a configuration file which is passed to\nxgettext-perl and to the program which uses contexts.\nSee <a class=\"jump\" href=\"id1144\">Log::Report::Domain::readConfig()</a>.</p>\n\n<p>Example of such configuration file: (JSON syntax and Perl syntax)</p>\n<pre>\n  === JSON ===                    ==== Perl ==   =\n {{\n     \"context_rules\" : {             context_rules =&gt; {\n        \"gender\" : [                    gender =&gt; [\n           \"male\",                         'male',\n           \"female\"                        'female'\n        ]                               ]\n     }                               }\n  }                               }\n</pre>\n\n<p>or</p>\n<pre>\n  {                               {\n     \"context_rules\" : {             context_rules =&gt; {\n        \"gender\" : {                    gender =&gt; {\n           \"alternatives\" : [              alternatives =&gt; [\n              \"male\",                         'male',\n              \"female\",                       'female',\n              \"unknown\"                       'unknown'\n           ]                               ]\n           ... more config for 'gender'    ...\n        }                                }\n     }                               }\n  }                               }\n</pre>\n\n<p>As \"alternatives\", we list the alternatives as known by the application\ninternals.  Each msgid which contains a <code>{&lt;gender}</code> mark will be\nreplicated three times, in each language table.  Each copy will be marked\nwith a different value from \"alternatives\".</p>\n\n<p>However, languages differ.  For instance, in some language we may address\nthe <code>unknown</code> gender as being a male person.  In other languages, the\ntranslation can express this \"unknown\" personality.  To get this to work,\nyou can use the <code>msgctxt</code> construct.</p>\n\n<p>The default <code>msgctxt</code>, as used in the previous example, is simply mapping\nthe alternatives directly on msgctxt values which are the same:</p>\n<pre>\n  {                                { context_rules =&gt;\n   \"context_rules\" : {                { gender =&gt;\n      \"gender\" : {                      { default =&gt; { qw/\n         \"default\" : {                      female  female\n            \"female\" : \"female\",            male    male\n            \"male\" : \"male\"                 unknown male / }\n            \"unknown\" : \"male\",         , 'nl,de' =&gt; { qw/\n         },                                 unknown x    / }\n         \"nl,de\" : {\n            \"unknown\" : \"x\"\n         }                              }\n       ... more configuration ...\n       }\n    ... more context rules ...\n    }                                 }\n  }                                }\n</pre>\n\n<p>By default, there will only be two msgid copies in a language file,\nbecause at run-time the \"unknown\" is mapped on \"male\".  An exception\nfor the Dutch (nl*) and German (de*) tables, which apparently support\nthe third gender.</p>\n\n<p>If you are not interested for a certain tag, then put it on 'IGNORE'\nas default or for your language.</p>\n<pre>\n  \"default\" : \"IGNORE\",           default =&gt; 'IGNORE'\n  \"nl\": \"IGNORE\"                  nl =&gt; 'IGNORE'\n</pre>\n",
         "id" : "id610",
         "type" : "subsection",
         "name" : "Configuration",
         "level" : 3
      },
      "id509" : {
         "type" : "info",
         "id" : "id509",
         "name" : "processing file $fn in $charset.",
         "subroutine" : "id504"
      },
      "id701" : {
         "id" : "id701",
         "type" : "error",
         "name" : "unsupported charset $charset in $fn.",
         "subroutine" : "id695"
      },
      "id457" : {
         "id" : "id457",
         "intro" : "<p>By default, the filename which contains the package which contains the\ntextdomain's translator configuration is taken (that can be only one)\nand changed into a directory name.  The path is then extended with <code>messages</code>\nto form the root of the lexicon: the top of the index.  After this,\nthe locale indication, the lc-category (usually LC_MESSAGES), and\nthe <code>textdomain</code> followed by <code>.po</code> are added.  This is exactly as\n<code>gettext(1)</code> does, but then using the PO text file instead of the MO\nbinary file.</p>\n",
         "type" : "section",
         "path" : "DETAILS/merge lexicon files with perl modules",
         "level" : 2,
         "examples" : [
            "id458"
         ],
         "name" : "merge lexicon files with perl modules"
      },
      "id602" : {
         "type" : "error",
         "id" : "id602",
         "subroutine" : "id601",
         "name" : "unknown context tag '$tag' used in '$msgid'"
      },
      "id1198-id1217" : {
         "name" : "linenr",
         "extends" : "id1198",
         "params" : "INTEGER",
         "id" : "id1198-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "type" : "option"
      },
      "id76" : {
         "name" : "sprinti",
         "call" : "<b><a name=\"id76\">sprinti</a></b>(&nbsp;$format, %data|\\%data|OBJECT, %options&nbsp;)",
         "options" : [
            [
               "id83",
               "id84"
            ],
            [
               "id77",
               "id78"
            ],
            [
               "id79",
               "id80"
            ],
            [
               "id81",
               "id82"
            ]
         ],
         "id" : "id76",
         "intro" : "<p>The <tt class=\"parameter\">$format</tt> refers to some string, maybe the result of a translation.</p>\n\n<p>The <tt class=\"parameter\">%data</tt> (which may be passed as LIST, HASH, or blessed HASH) contains\na mixture of special and normal variables to be filled in.  The names\nof the special variables (the <tt class=\"parameter\">%options</tt>) start with an underscore (<code>_</code>).</p>\n",
         "type" : "function"
      },
      "id924" : {
         "id" : "id924",
         "value" : "<code>false</code>",
         "type" : "default",
         "name" : "include_domain"
      },
      "id1277" : {
         "name" : "Why use format strings?",
         "level" : 2,
         "path" : "DETAILS/Why use format strings?",
         "id" : "id1277",
         "type" : "section"
      },
      "id329" : {
         "name" : "charset",
         "type" : "default",
         "value" : "'UTF-8'",
         "id" : "id329"
      },
      "id629" : {
         "id" : "id629",
         "value" : "<code>false</code>",
         "type" : "default",
         "name" : "fuzzy"
      },
      "id1192-id760" : {
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "id" : "id1192-id760",
         "type" : "ci_method",
         "name" : "collectLocation",
         "extends" : "id1192"
      },
      "id1318" : {
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id1086-id542"
         ],
         "id" : "id1318",
         "type" : "section",
         "name" : "Constructors",
         "level" : 2
      },
      "id522" : {
         "params" : "$charset",
         "intro" : "<p>The character-set used in the PO files.</p>\n",
         "type" : "option",
         "id" : "id522",
         "name" : "charset"
      },
      "id1208-id1217" : {
         "extends" : "id1208",
         "name" : "abstract",
         "id" : "id1208-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id1355" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Die\n   is an Exporter\n</pre>\n",
         "id" : "id1355"
      },
      "id1000-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id1000\">toString</a></b>(&nbsp;[$locale]&nbsp;)",
         "id" : "id1000-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1000\">Log::Report::Message::toString()</a></p>",
         "type" : "i_method",
         "extends" : "id1000",
         "name" : "toString"
      },
      "id258" : {
         "name" : "fatal_handler",
         "intro" : "<p><code>fatal_handler()</code> allows alternative handlers to be defined in place of (or in\naddition to) the default redirect handler that is called on a fatal error.</p>\n\n<p>Calls should be made with 1 parameter: the subroutine to call in the case of a\nfatal error. The subroutine is passed 3 parameters: the DSL, the message in\nquestion, and the reason. The subroutine should return <code>true</code> or <code>false</code> depending\non whether it handled the error. If it returns <code>false</code>, the next fatal handler is\ncalled, and if there are no others then the default redirect fatal handler is\ncalled.</p>\n",
         "examples" : [
            "id259",
            "id260"
         ],
         "id" : "id258",
         "type" : "i_method",
         "diagnostics" : [
            "id261"
         ],
         "call" : "$obj-&gt;<b><a name=\"id258\">fatal_handler</a></b>"
      },
      "id1035" : {
         "params" : "$reasons|\\@reasons|'ALL'|'NONE'",
         "intro" : "<p>[1.09] see <a class=\"jump\" href=\"id1043\">hide()</a></p>\n",
         "id" : "id1035",
         "type" : "option",
         "name" : "hide"
      },
      "id1113" : {
         "type" : "error",
         "id" : "id1113",
         "name" : "cannot rotate log file which was opened as file-handle",
         "subroutine" : "id1112"
      },
      "id607" : {
         "intro" : "<p>You can use contexts to set global interpolation parameters.  For instance,\nrunning a pure perl webserver, you may serve multiple domains.  Some of\nthe log messages may need to show that domain name.  Of course, you can\ncollect (or pass on) the hostname when throwing the error... something\nlike this:</p>\n<pre>\n  # can I access $vhost easily?\n  error __x\"For {host}, login failed for {user}\",\n        host =&gt; $vhost-&gt;name, user =&gt; $user;\n</pre>\n\n<p>Via contexts:</p>\n<pre>\n  # when you know the vhost: (max once per request)\n  textdomain-&gt;setContext(host =&gt; $vhost-&gt;name);  # or updateContext\n\n  # until you reconfigure the context\n  error __x\"For {_context.host}, login failed for {user}\", user =&gt; $user;\n</pre>\n\n<p>The context values are always available for interpolation.</p>\n",
         "type" : "subsection",
         "id" : "id607",
         "path" : "DETAILS/Using context_rules/Global parameters",
         "level" : 3,
         "name" : "Global parameters"
      },
      "id452" : {
         "call" : "$obj-&gt;<b><a name=\"id452\">addFile</a></b>(&nbsp;$basename, [$absolute]&nbsp;)",
         "intro" : "<p>Add a certain file to the index.  This method returns the <tt class=\"parameter\">$absolute</tt>\npath to that file, which must be used to access it.  When not explicitly\nspecified, the <tt class=\"parameter\">$absolute</tt> path will be calculated.</p>\n",
         "type" : "i_method",
         "id" : "id452",
         "name" : "addFile"
      },
      "id933" : {
         "name" : "Logging",
         "level" : 2,
         "path" : "METHODS/Logging",
         "subroutines" : [
            "id1186-id905",
            "id1189-id905",
            "id1188-id905",
            "id1185-id905",
            "id1192-id905",
            "id1191-id905",
            "id1193-id905",
            "id1187-id905",
            "id934"
         ],
         "id" : "id933",
         "type" : "section"
      },
      "id307" : {
         "name" : "processing_errors",
         "value" : "'NATIVE'",
         "id" : "id307",
         "type" : "default"
      },
      "id1352" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report\n   is an Exporter\n</pre>\n",
         "id" : "id1352"
      },
      "id905" : {
         "title" : "send messages to syslog",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "id" : "id905",
         "package" : "Log::Report::Dispatcher::Syslog",
         "distribution" : "Log-Report",
         "is_pure_pod" : false,
         "version" : "1.46",
         "chapters" : [
            "id906",
            "id1328",
            "id907",
            "id908",
            "id909",
            "id1283"
         ],
         "name" : "Log::Report::Dispatcher::Syslog"
      },
      "id1032" : {
         "value" : "[]",
         "id" : "id1032",
         "type" : "default",
         "name" : "exceptions"
      },
      "id537-id354" : {
         "name" : "showStats",
         "extends" : "id537",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id537\">Log::Report::Extract::showStats()</a></p>",
         "type" : "i_method",
         "id" : "id537-id354",
         "call" : "$obj-&gt;<b><a name=\"id537\">showStats</a></b>(&nbsp;[$domains]&nbsp;)"
      },
      "id1195-id760" : {
         "extends" : "id1195",
         "type" : "default",
         "id" : "id1195-id760",
         "value" : "&lt;required&gt;",
         "name" : "package",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>"
      },
      "id77" : {
         "params" : "INTEGER",
         "intro" : "<p>Result of the translation process: when <a class=\"jump\" href=\"id854\">Log::Report::__xn()</a> is\nare used for count-sensitive translation.  Those function may add\nmore specials to the parameter list.</p>\n",
         "id" : "id77",
         "type" : "option",
         "name" : "_count"
      },
      "id1049" : {
         "call" : "$obj-&gt;<b><a name=\"id1049\">reportFatal</a></b>(&nbsp;%options&nbsp;)",
         "intro" : "<p>Re-cast only the fatal message to the defined dispatchers.  If the\nblock was left without problems, then nothing will be done.  The <tt class=\"parameter\">%options</tt>\nwill end-up as HASH of <tt class=\"parameter\">%options</tt> to <a class=\"jump\" href=\"id807\">Log::Report::report()</a>; see\n<a class=\"jump\" href=\"id1252\">Log::Report::Exception::throw()</a> which does the job.</p>\n",
         "id" : "id1049",
         "type" : "i_method",
         "name" : "reportFatal"
      },
      "id1227" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  # created within a try block\n  try { error \"help!\" };\n  my $exception = $@-&gt;wasFatal;\n  $exception-&gt;throw if $exception;\n\n  $@-&gt;reportFatal;  # combination of above two lines\n\n  my $message = $exception-&gt;message;   # the Log::Report::Message\n\n  if($message-&gt;taggedWith('die')) ...\n  if($exception-&gt;taggedWith('die')) ...   # same\n  if($@-&gt;wasFatal(tag =&gt; 'die')) ... # same\n</pre>\n",
         "id" : "id1227",
         "path" : "SYNOPSIS"
      },
      "id527" : {
         "name" : "index",
         "call" : "$obj-&gt;<b><a name=\"id527\">index</a></b>",
         "intro" : "<p>Returns the <a class=\"jump\" href=\"id441\">Log::Report::Lexicon::Index</a> object, which is listing\nthe files in the lexicon directory tree.</p>\n",
         "type" : "i_method",
         "id" : "id527"
      },
      "id158" : {
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id158",
         "name" : "name"
      },
      "id726" : {
         "call" : "$obj-&gt;<b><a name=\"id726\">stats</a></b>",
         "intro" : "<p>Returns a HASH with some statistics about this POT table.</p>\n",
         "id" : "id726",
         "type" : "i_method",
         "name" : "stats"
      },
      "id1160" : {
         "intro" : "<pre>  use Log::Report;\n\n  # The following will be created for you automatically\n  dispatcher 'PERL', 'default', accept =&gt; 'NOTICE-';\n  dispatcher close =&gt; 'default';  # after deamonize\n\n  dispatcher 'FILE', 'log',\n    mode =&gt; 'DEBUG', to =&gt; '/var/log/mydir/myfile';\n\n  # Full package name is used, same as 'FILE'\n  dispatcher Log::Report::Dispatch::File =&gt; 'stderr',\n    to =&gt; \\*STDERR, accept =&gt; 'NOTICE-';\n</pre>\n",
         "id" : "id1160",
         "type" : "chapter",
         "path" : "SYNOPSIS",
         "level" : 1,
         "name" : "SYNOPSIS"
      },
      "id383" : {
         "path" : "DETAILS/Scan Patterns/Predefined for Template-Toolkit",
         "type" : "subsection",
         "intro" : "<p>There is not a single convention for translations in <code>Template-Toolkit</code>\n(see Template), so you need to specify which version TT you use and\nwhich function name you want to use.  In extreme cases, you may even build\nseparate translation tables by simply providing using functions.</p>\n\n<p>For instance</p>\n<pre>\n  pattern =&gt; 'TT2-loc'\n</pre>\n\n<p>will scan for</p>\n<pre>\n  [% loc(\"msgid\", key =&gt; value, ...) %]\n  [% loc('msgid', key =&gt; value, ...) %]\n  [% loc(\"msgid|plural\", count, key =&gt; value, ...) %]\n\n  [% INCLUDE\n       title = loc('something')\n   %]\n\n  [% | loc(n =&gt; name) %]hi {n}[% END %]\n  [% 'hi {n}' | loc(n =&gt; name) %]\n</pre>\n\n<p>For <code>TT1</code>, the brackets can either be '[%...%]' or '%%...%%'.  The function\nname is treated case-sensitive.  Some people prefer 'l()' or 'L()'.</p>\n\n<p>The code needed</p>\n<pre>\n  # during initiation of the webserver, once in your script (before fork)\n  my $lexicons   = 'some-directory-for-translation-tables';\n  my $pots = Log::Report::Translator::POT-&gt;new(lexicons =&gt; $lexicons);\n\n  my $templater  = Log::Report::Template-&gt;new(...);\n  my $domain     = $templater-&gt;addTextdomain(\n      name     =&gt; $domainname,\n      function =&gt; 'loc',\n  );\n  $domain-&gt;configure(translator =&gt; $pots);\n\n  # part of the processing per page\n  $vars{translate_to} = 'nl_NL.utf8';\n  $templater-&gt;process($template, \\%vars, \\$output);\n</pre>\n\n<p>To generate the pod tables, run in the shell something like</p>\n<pre>\n  xgettext-perl -p $lexicons --template TT2-loc \\\n      --domain $textdomain  $templates_dir\n</pre>\n\n<p>If you want to implement your own extractor --to avoid <code>xgettext-perl</code>--\nyou need to run something like this:</p>\n<pre>\n  my $extr = Log::Report::Template::Extract-&gt;new(\n    lexicon =&gt; $output,\n    charset =&gt; 'utf-8',\n    domain  =&gt; $domain,\n    pattern =&gt; 'TT2-loc',\n  );\n  $extr-&gt;process($_) for @filenames;\n  $extr-&gt;write;\n</pre>\n",
         "id" : "id383",
         "name" : "Predefined for Template-Toolkit",
         "level" : 3
      },
      "id1205-id760" : {
         "extends" : "id1205",
         "type" : "default",
         "id" : "id1205-id760",
         "value" : "<code>undef</code>",
         "name" : "max_line",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>"
      },
      "id1097" : {
         "name" : "new",
         "diagnostics" : [
            "id1105",
            "id1106"
         ],
         "call" : "$class-&gt;<b><a name=\"id1097\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "options" : [
            [
               "id1165-id1091",
               "id1166-id1091"
            ],
            [
               "id1173-id1091",
               "id1102"
            ],
            [
               "id1103",
               "id1104"
            ],
            [
               "id1171-id1091",
               "id1172-id1091"
            ],
            [
               "id1167-id1091",
               "id1168-id1091"
            ],
            [
               "id1169-id1091",
               "id1170-id1091"
            ],
            [
               "id1100",
               "id1101"
            ],
            [
               "id1098",
               "id1099"
            ]
         ],
         "id" : "id1097",
         "type" : "c_method"
      },
      "id839" : {
         "call" : "<b><a name=\"id839\">error</a></b>(&nbsp;$message&nbsp;)",
         "intro" : "<p>Short for <code>report ERROR =&gt; $message</code></p>\n",
         "type" : "function",
         "id" : "id839",
         "name" : "error"
      },
      "id884" : {
         "id" : "id884",
         "type" : "section",
         "subroutines" : [
            "id885"
         ],
         "path" : "FUNCTIONS/Reasons",
         "level" : 2,
         "name" : "Reasons"
      },
      "id683" : {
         "name" : "nr_plurals",
         "value" : "2",
         "id" : "id683",
         "type" : "default"
      },
      "id1180" : {
         "intro" : "<p>The dispatcher type, which is usually the same as the class of this\nobject, but not in case of wrappers like for Log::Dispatch.</p>\n",
         "type" : "i_method",
         "id" : "id1180",
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>",
         "name" : "type"
      },
      "id728" : {
         "intro" : "<p>Log::Report::Lexicon - translation component of Log::Report</p>\n",
         "id" : "id728",
         "type" : "chapter",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id853" : {
         "name" : "how to use <code>__nx()</code>\n",
         "intro" : "<pre>  print __nx \"one file\", \"{_count} files\", $nr_files;\n  print __nx \"one file\", \"{_count} files\", @files;\n\n  local $\" = ', ';\n  print __nx \"one file: {f}\", \"{_count} files: {f}\", @files, f =&gt; \\@files;\n</pre>\n",
         "id" : "id853",
         "type" : "example"
      },
      "id1170-id1217" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "name" : "mode",
         "id" : "id1170-id1217",
         "type" : "default",
         "value" : "'NORMAL'",
         "extends" : "id1170"
      },
      "id354" : {
         "chapters" : [
            "id355",
            "id1360",
            "id356",
            "id357",
            "id358",
            "id381"
         ],
         "name" : "Log::Report::Template::Extract",
         "version" : "1.05",
         "distribution" : "Log-Report-Template",
         "package" : "Log::Report::Template::Extract",
         "is_pure_pod" : false,
         "title" : "collect translatable strings from template files",
         "inheritance" : {
            "extends" : [
               "Log::Report::Extract"
            ]
         },
         "id" : "id354"
      },
      "id156" : {
         "examples" : [
            "id159"
         ],
         "options" : [
            [
               "id157",
               "id158"
            ]
         ],
         "type" : "c_method",
         "id" : "id156",
         "diagnostics" : [
            "id160"
         ],
         "call" : "$class-&gt;<b><a name=\"id156\">new</a></b>(&nbsp;%options&nbsp;)",
         "name" : "new"
      },
      "id820" : {
         "name" : "for use of <a class=\"jump\" href=\"id807\">report()</a>\n",
         "id" : "id820",
         "intro" : "<pre>  # long syntax example\n  report TRACE =&gt; \"start processing now\";\n  report INFO  =&gt; '500: ' . __'Internal Server Error';\n\n  # explicit dispatcher, no translation\n  report {to =&gt; 'syslog'}, NOTICE =&gt; \"started process $$\";\n  notice \"started process $$\", _to =&gt; 'syslog';   # same\n\n  # short syntax examples\n  trace \"start processing now\";\n  warning  __x'Disk {percent%.2f}% full', percent =&gt; $p\n      if $p > 97;\n\n  # error message, overruled to be printed in Brazilian\n  report {locale =&gt; 'pt_BR'},\n        WARNING =&gt; \"do this at home!\";\n</pre>\n",
         "type" : "example"
      },
      "id654" : {
         "call" : "$obj-&gt;<b><a name=\"id654\">addFlags</a></b>(&nbsp;STRING&nbsp;)",
         "diagnostics" : [
            "id655"
         ],
         "id" : "id654",
         "type" : "i_method",
         "name" : "addFlags",
         "intro" : "<p>Parse a \"flags\" line.</p>\n"
      },
      "id1152" : {
         "name" : "defaultContext",
         "id" : "id1152",
         "intro" : "<p>Returns the current default translation context settings as HASH.  You should\nnot modify the content of that HASH: change it by called <a class=\"jump\" href=\"id1148\">setContext()</a> or\n<a class=\"jump\" href=\"id1151\">updateContext()</a>.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1152\">defaultContext</a></b>"
      },
      "id913" : {
         "params" : "$program",
         "type" : "option",
         "id" : "id913",
         "name" : "identity"
      },
      "id425" : {
         "path" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>Translate a message by directly accessing POT files.  The files will load\nlazily (unless forced).  This module accesses the PO's in a compact way,\nusing <a class=\"jump\" href=\"id561\">Log::Report::Lexicon::POTcompact</a>, which is much more efficient\nthan <a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a>.</p>\n",
         "id" : "id425",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1200-id1066" : {
         "extends" : "id1200",
         "name" : "call",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "id" : "id1200-id1066",
         "type" : "option",
         "params" : "STRING"
      },
      "id955-id221" : {
         "name" : "_msgid",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id954\">Log::Report::Message::new(_msgid)</a></p>",
         "extends" : "id955",
         "id" : "id955-id221",
         "type" : "default",
         "value" : "<code>undef</code>"
      },
      "id79" : {
         "id" : "id79",
         "intro" : "<p>Which STRING to use when an ARRAY is being filled-in as parameter.</p>\n",
         "type" : "option",
         "params" : "STRING",
         "name" : "_join"
      },
      "id819" : {
         "name" : "is_fatal",
         "value" : "&lt;depends on reason&gt;",
         "type" : "default",
         "id" : "id819"
      },
      "id58" : {
         "params" : "\\%rules|'HTML'",
         "type" : "option",
         "intro" : "<p>[0.91] The format string and the inserted values will get encoded according to\nsome <tt class=\"parameter\">%rules</tt>.  Function <code>encode_entities()</code> provided by HTML::Entities\nis used when you specify the predefined string <code>HTML</code>.  See <a class=\"jump\" href=\"id67\">encodeFor()</a>\nand <a class=\"jump\" href=\"id110\">Output encoding</a>.</p>\n",
         "id" : "id58",
         "name" : "encode_for"
      },
      "id1360" : {
         "path" : "INHERITANCE",
         "id" : "id1360",
         "intro" : "<pre> Log::Report::Template::Extract\n   is a <a class=\"jump\" href=\"id513\">Log::Report::Extract</a>\n</pre>\n",
         "type" : "chapter",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id1132-id385" : {
         "call" : "$obj-&gt;<b><a name=\"id1132\">contextRules</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1132\">Log::Report::Domain::contextRules()</a></p>",
         "id" : "id1132-id385",
         "name" : "contextRules",
         "extends" : "id1132"
      },
      "id959" : {
         "name" : "_prepend",
         "id" : "id959",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id404" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id162-id385",
            "id1133-id385",
            "id164-id385",
            "id163-id385",
            "id1130-id385",
            "id1144-id385",
            "id1131-id385",
            "id1132-id385",
            "id406",
            "id405",
            "id409",
            "id408",
            "id407"
         ],
         "type" : "section",
         "id" : "id404",
         "path" : "METHODS/Attributes"
      },
      "id1135-id385" : {
         "extends" : "id1135",
         "id" : "id1135-id385",
         "type" : "default",
         "value" : "<code>created internally</code>",
         "name" : "translator",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1134\">Log::Report::Domain::configure(translator)</a></p>"
      },
      "id1204-id1021" : {
         "params" : "INTEGER",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "type" : "option",
         "id" : "id1204-id1021",
         "name" : "max_line",
         "extends" : "id1204"
      },
      "id1193-id1217" : {
         "name" : "stackTraceLine",
         "extends" : "id1193",
         "options" : [
            [
               "id1208-id1217",
               "id1209-id1217"
            ],
            [
               "id1200-id1217",
               "id1201-id1217"
            ],
            [
               "id1196-id1217",
               "id1197-id1217"
            ],
            [
               "id1198-id1217",
               "id1199-id1217"
            ],
            [
               "id1204-id1217",
               "id1205-id1217"
            ],
            [
               "id1206-id1217",
               "id1207-id1217"
            ],
            [
               "id1194-id1217",
               "id1195-id1217"
            ],
            [
               "id1202-id1217",
               "id1203-id1217"
            ]
         ],
         "id" : "id1193-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)"
      },
      "id74" : {
         "name" : "FUNCTIONS",
         "examples" : [
            "id75"
         ],
         "level" : 1,
         "path" : "FUNCTIONS",
         "subroutines" : [
            "id86",
            "id85",
            "id76",
            "id87"
         ],
         "id" : "id74",
         "intro" : "<p>The functional interface creates a hidden <code>String::Print</code> object, which is\nreused in the whole active package.  Seperate packages will use different\nhidden objects.</p>\n\n<p>You may import any of these functions explicitly, or all together by\nnot specifying the names.</p>\n",
         "type" : "chapter"
      },
      "id630" : {
         "name" : "automatic",
         "intro" : "<p>Automatically added comments.\nSee <a class=\"jump\" href=\"id645\">addAutomatic()</a>.</p>\n",
         "id" : "id630",
         "type" : "option",
         "params" : "\\@text"
      },
      "id256" : {
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS",
         "subroutines" : [
            "id257",
            "id258"
         ],
         "nest" : [
            "id262"
         ],
         "id" : "id256",
         "type" : "chapter"
      },
      "id1199-id780" : {
         "id" : "id1199-id780",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "extends" : "id1199",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "name" : "linenr"
      },
      "id330" : {
         "name" : "write_tables",
         "params" : "BOOLEAN",
         "intro" : "<p>When <code>false</code>, the po-files will not get updated.</p>\n",
         "type" : "option",
         "id" : "id330"
      },
      "id1191-id1021" : {
         "id" : "id1191-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "name" : "skipStack",
         "extends" : "id1191"
      },
      "id980" : {
         "examples" : [
            "id981"
         ],
         "name" : "clone",
         "intro" : "<p>Returns a new object which copies info from original, and updates it\nwith the specified <tt class=\"parameter\">%options</tt> and <tt class=\"parameter\">$variables</tt>.  The advantage is that the\ncached translations are shared between the objects.</p>\n",
         "type" : "i_method",
         "id" : "id980",
         "call" : "$obj-&gt;<b><a name=\"id980\">clone</a></b>(&nbsp;%options, $variables&nbsp;)"
      },
      "id1186-id780" : {
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1186\">Log::Report::Dispatcher::log()</a></p>",
         "type" : "i_method",
         "id" : "id1186-id780",
         "extends" : "id1186",
         "name" : "log"
      },
      "id749-id561" : {
         "extends" : "id749",
         "call" : "$obj-&gt;<b><a name=\"id749\">translations</a></b>(&nbsp;[$active]&nbsp;)",
         "diagnostics" : [
            "id750-id561"
         ],
         "type" : "i_method",
         "id" : "id749-id561",
         "name" : "translations",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id749\">Log::Report::Lexicon::Table::translations()</a></p>"
      },
      "id1313" : {
         "path" : "DETAILS/Processing the message",
         "name" : "Processing the message",
         "level" : 2,
         "type" : "section",
         "id" : "id1313",
         "nest" : [
            "id1314",
            "id1315"
         ]
      },
      "id1173-id1066" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "type" : "option",
         "id" : "id1173-id1066",
         "params" : "CHARSET",
         "extends" : "id1173",
         "name" : "charset"
      },
      "id1155" : {
         "nest" : [
            "id1156",
            "id1157"
         ],
         "id" : "id1155",
         "type" : "section",
         "level" : 2,
         "name" : "Configuring",
         "intro" : "<p>Configuration of a domain can happen in many ways: either explicitly or\nimplicitly.  The explicit form:</p>\n<pre>\n  package My::Package;\n  use Log::Report 'my-domain';\n\n  textdomain 'my-domain', %configuration;\n  textdomain-&gt;configure(%configuration);\n  textdomain-&gt;configure(\\%configuration);\n\n  textdomain-&gt;configure(conf =&gt; $filename);\n</pre>\n\n<p>The implicit form is (no variables possible, only constants!)</p>\n<pre>\n  package My::Package;\n  use Log::Report 'my-domain', %configuration;\n  use Log::Report 'my-domain', conf =&gt; '/filename';\n</pre>\n\n<p>You can only configure your domain in one place in your program.  The\ntextdomain setup is then used for all packages in the same domain.</p>\n\n<p>This also works for <a class=\"jump\" href=\"id144\">Log::Report::Optional</a>, which is a dressed-down\nversion of <a class=\"jump\" href=\"id801\">Log::Report</a>.</p>\n",
         "path" : "DETAILS/Configuring"
      },
      "id1194-id1021" : {
         "params" : "CLASS",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "id" : "id1194-id1021",
         "name" : "package",
         "extends" : "id1194"
      },
      "id1172-id1091" : {
         "name" : "format_reason",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "extends" : "id1172",
         "value" : "'LOWERCASE'",
         "id" : "id1172-id1091",
         "type" : "default"
      },
      "id1203-id1217" : {
         "name" : "params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "extends" : "id1203",
         "type" : "default",
         "id" : "id1203-id1217",
         "value" : "&lt;required&gt;"
      },
      "id1118" : {
         "is_pure_pod" : false,
         "package" : "Log::Report::DBIC::Profiler",
         "distribution" : "Log-Report",
         "id" : "id1118",
         "inheritance" : {
            "extends" : [
               "DBIx::Class::Storage::Statistics"
            ]
         },
         "title" : "query profiler for DBIx::Class",
         "chapters" : [
            "id1119",
            "id1349",
            "id1120",
            "id1121"
         ],
         "name" : "Log::Report::DBIC::Profiler",
         "version" : "1.46"
      },
      "id555" : {
         "name" : "iso_to_codepage",
         "intro" : "<p>Returns the numeric value of the codepage.  The <tt class=\"parameter\">$iso</tt> may look like\nthis: <code>xx_YY</code>.  Then, first the <code>xx_YY</code> is looked-up.  If that does\nnot exist, <code>xx</code> is tried.</p>\n",
         "type" : "function",
         "id" : "id555",
         "call" : "<b><a name=\"id555\">iso_to_codepage</a></b>(&nbsp;$iso&nbsp;)"
      },
      "id1201-id1021" : {
         "name" : "call",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "extends" : "id1201",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id1201-id1021"
      },
      "id1209-id780" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "name" : "abstract",
         "value" : "1",
         "id" : "id1209-id780",
         "type" : "default",
         "extends" : "id1209"
      },
      "id262" : {
         "path" : "METHODS/Handlers",
         "type" : "section",
         "intro" : "<p>All the standard <a class=\"jump\" href=\"id801\">Log::Report</a> functions are available to use. Please see the\n<a class=\"jump\" href=\"id892\">The Reason for the report</a> for details\nof when each one should be used.</p>\n\n<p><a href=\"https://metacpan.org/dist/Log_Report_Message_pod_class_STRING_ARRAY\">Log::Report class functionality</a>\nto class messages (which can then be tested later):</p>\n<pre>\n  notice __x\"Tag me up\", _tag =&gt; 'label';\n  ...\n  if ($msg-&gt;taggedWith('label')) ...\n</pre>\n\n<p><a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a> has a special message class, <code>no_session</code>,\nwhich prevents the message from being saved to the messages session\nvariable. This is useful, for example, if you are writing messages within\nthe session hooks, in which case recursive loops can be experienced.</p>\n",
         "id" : "id262",
         "subroutines" : [
            "id270",
            "id271",
            "id266",
            "id267",
            "id273",
            "id272",
            "id269",
            "id265",
            "id264",
            "id274",
            "id268",
            "id263"
         ],
         "name" : "Handlers",
         "level" : 2
      },
      "id435" : {
         "name" : "lexicons",
         "intro" : "<p>Returns a list of <a class=\"jump\" href=\"id441\">Log::Report::Lexicon::Index</a> objects, where the\ntranslation files may be located.</p>\n",
         "id" : "id435",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id435\">lexicons</a></b>"
      },
      "id288" : {
         "level" : 3,
         "name" : "Email alerts of exceptions",
         "id" : "id288",
         "intro" : "<p>If you have an unexpected exception in your production application,\nthen you probably want to be notified about it. One way to do so is\nconfigure rsyslog to send emails of messages at the panic level. Use\nthe following configuration to do so:</p>\n<pre>\n  # Normal logging from LOCAL0\n  local0.*                        -/var/log/myapp.log\n\n  # Load the mail module\n  $ModLoad ommail\n  # Configure sender, receiver and mail server\n  $ActionMailSMTPServer localhost\n  $ActionMailFrom root\n  $ActionMailTo root\n  # Set up an email template\n  $template mailSubject,\"Critical error on %hostname%\"\n  $template mailBody,\"RSYSLOG Alert\\r\\nmsg='%msg%'\\r\\nseverity='%syslogseverity-text%'\"\n  $ActionMailSubject mailSubject\n  # Send an email no more frequently than every minute\n  $ActionExecOnlyOnceEveryInterval 60\n  # Configure the level of message to notify via email\n  if $syslogfacility-text == 'local0' and $syslogseverity &lt; 3 then :ommail:;mailBody\n  $ActionExecOnlyOnceEveryInterval 0\n</pre>\n\n<p>With the above configuration, you will only be emailed of severe errors, but can\nview the full log information in /var/log/myapp.log</p>\n",
         "type" : "subsection",
         "path" : "DETAILS/In Use/Email alerts of exceptions"
      },
      "id1145-id385" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1144\">Log::Report::Domain::readConfig()</a></p>",
         "type" : "fault",
         "id" : "id1145-id385",
         "name" : "cannot open JSON file for context at $fn: $!",
         "extends" : "id1145",
         "subroutine" : "id1144"
      },
      "id1192-id780" : {
         "name" : "collectLocation",
         "extends" : "id1192",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "type" : "ci_method",
         "id" : "id1192-id780",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>"
      },
      "id403" : {
         "name" : "extension to domain '$name' already exists",
         "subroutine" : "id402",
         "type" : "error",
         "id" : "id403"
      },
      "id277" : {
         "path" : "DETAILS/Larger example",
         "id" : "id277",
         "intro" : "<p>In its simplest form, this module can be used for more flexible logging</p>\n<pre>\n  get '/route' =&gt; sub {\n      # Stop execution, redirect, and display an error to the user\n      $name or error \"Please enter a name\";\n\n      # The same but translated\n      $name or error __\"Please enter a name\";\n\n      # The same but translated and with variables\n      $name or error __x\"{name} is not valid\", name =&gt; $name;\n\n      # Show the user a warning, but continue execution\n      mistake \"Not sure that's what you wanted\";\n\n      # Add debug information, can be caught in syslog by adding\n      # the (for instance) syslog dispatcher\n      trace \"Hello world\";\n   };\n</pre>\n",
         "type" : "section",
         "name" : "Larger example",
         "level" : 2
      },
      "id172" : {
         "name" : "interpolate",
         "call" : "$obj-&gt;<b><a name=\"id172\">interpolate</a></b>(&nbsp;$msgid, [$args]&nbsp;)",
         "intro" : "<p>Interpolate the keys used in <tt class=\"parameter\">$msgid</tt> from the values in <tt class=\"parameter\">$args</tt>.\nThis is handled by the formatter, by default a <a class=\"jump\" href=\"id47\">String::Print</a>\ninstance.</p>\n",
         "type" : "i_method",
         "id" : "id172"
      },
      "id1007" : {
         "name" : "serializer",
         "id" : "id1007",
         "intro" : "<p>In the future, the specific serializer may influence the frozen output.</p>\n",
         "type" : "option",
         "params" : "'JSON'|'Serial'|..."
      },
      "id1127" : {
         "path" : "METHODS/Constructors",
         "id" : "id1127",
         "type" : "section",
         "subroutines" : [
            "id1128"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id830" : {
         "examples" : [
            "id831"
         ],
         "name" : "try",
         "id" : "id830",
         "intro" : "<p>Execute the <tt class=\"parameter\">CODE</tt> while blocking all dispatchers as long as it is running.\nThe exceptions which occur while running the <tt class=\"parameter\">CODE</tt> are caught until it\nhas finished.  When there where no fatal errors, the result of the <tt class=\"parameter\">CODE</tt>\nexecution is returned.</p>\n\n<p>After the <tt class=\"parameter\">CODE</tt> was tried, the <code>$@</code> will contain a\n<a class=\"jump\" href=\"id1021\">Log::Report::Dispatcher::Try</a> object, which contains the collected\nmessages.  Read that manual page to understand <code>try</code>.</p>\n\n<p>Run-time errors from Perl and die's, croak's and confess's within the\nprogram (which shouldn't appear, but you never know) are collected into an\n<a class=\"jump\" href=\"id935\">Log::Report::Message</a> object, using <a class=\"jump\" href=\"id1259\">Log::Report::Die</a>.</p>\n\n<p>The <tt class=\"parameter\">%options</tt> are passed to the constructor of the try-dispatcher, see\n<a class=\"jump\" href=\"id1030\">Log::Report::Dispatcher::Try::new()</a>.  For instance, you may like to\nadd <code>mode =&gt; 'DEBUG'</code>, or <code>accept =&gt; 'ERROR-'</code>.</p>\n\n<p><b>Be warned</b> that the parameter to <code>try</code> is a <tt class=\"parameter\">CODE</tt> reference.  This means\nthat you shall not use a comma after the block when there are <tt class=\"parameter\">%options</tt>\nspecified.  On the other hand, you shall use a semi-colon after the\nblock if there are no arguments.</p>\n\n<p><b>Be warned</b> that the <code>{}</code> are interpreted as subroutine, which\nmeans that --for instance-- it has its own <code>@_</code> parameter list.\nThe manual-page of Try::Tiny lists a few more side-effects of this.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id830\">try</a></b>(&nbsp;CODE, %options&nbsp;)"
      },
      "id167" : {
         "name" : "where",
         "value" : "&lt;required&gt;",
         "id" : "id167",
         "type" : "default"
      },
      "id738" : {
         "path" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>This base class defines the generic interface for translation tables.</p>\n\n<p>Currently, there are three extensions:</p>\n\n<ul>\n\n\n\n<p><li><a class=\"jump\" href=\"id669\">Log::Report::Lexicon::POT</a><br />\nThis is a relatively heavy implementation, used to read but also to\nwrite PO files.  It is used by <i class=\"filename\">xgettext-perl</i>, for instance, to\nadminister the collection of discovered msgid's.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id561\">Log::Report::Lexicon::POTcompact</a><br />\nLight-weighted read-only access to PO-file information.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id461\">Log::Report::Lexicon::MOTcompact</a><br />\nRead-only access to MO-file information.  These binary MO-files are\nsuper efficient.</p>\n\n</ul>\n",
         "id" : "id738",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1063" : {
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1,
         "id" : "id1063",
         "type" : "chapter",
         "nest" : [
            "id1064"
         ]
      },
      "id961" : {
         "name" : "_append",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id961"
      },
      "id517" : {
         "nest" : [
            "id518",
            "id526",
            "id532"
         ],
         "id" : "id517",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id496" : {
         "nest" : [
            "id497"
         ],
         "id" : "id496",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>This module helps maintaining the POT files, updating the list of\nmessage-ids which are kept in them.  After initiation, the <a class=\"jump\" href=\"id504\">process()</a>\nmethod needs to be called with all files which changed since last processing\nand the existing PO files will get updated accordingly.</p>\n\n<p>If no translations exist yet, one <code>$lexicon/$domain.po</code> file will be\ncreated.  If you want to start a translation, copy <code>$lexicon/$domain.po</code>\nto <code>$lexicon/$domain/$lang.po</code> and edit that file.  You may use\n<code>poedit</code> to edit po-files.  There are many smart translation management\napplications which can hand po-files, for instance Pootle and Weblate.</p>\n\n<p>Do not forget to add the new po-file to your distribution (MANIFEST)</p>\n"
      },
      "id775" : {
         "id" : "id775",
         "type" : "error",
         "subroutine" : "id766",
         "name" : "Log::Dispatch level '$level' not understood"
      },
      "id716" : {
         "call" : "$obj-&gt;<b><a name=\"id716\">msgstr</a></b>(&nbsp;$msgid, [$count, [$msgctxt]]&nbsp;)",
         "intro" : "<p>Returns the translated string for <tt class=\"parameter\">$msgid</tt>.  When <tt class=\"parameter\">$count</tt> is not specified or\n<code>undef</code>, the translation string related to \"1\" is returned.</p>\n",
         "id" : "id716",
         "type" : "i_method",
         "name" : "msgstr"
      },
      "id1179-id1091" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "id" : "id1179-id1091",
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>",
         "extends" : "id1179",
         "name" : "name"
      },
      "id1260" : {
         "level" : 1,
         "name" : "NAME",
         "intro" : "<p>Log::Report::Die - compatibility routines with Perl's die/croak/confess</p>\n",
         "type" : "chapter",
         "id" : "id1260",
         "path" : "NAME"
      },
      "id1202-id780" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "id" : "id1202-id780",
         "type" : "option",
         "params" : "ARRAY",
         "extends" : "id1202",
         "name" : "params"
      },
      "id1166-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "name" : "accept",
         "value" : "<code>depend on mode</code>",
         "id" : "id1166-id760",
         "type" : "default",
         "extends" : "id1166"
      },
      "id478" : {
         "type" : "fault",
         "id" : "id478",
         "subroutine" : "id467",
         "name" : "cannot read translations from $fn, need $size at $loc: $!"
      },
      "id755-id669" : {
         "name" : "nrPlurals",
         "extends" : "id755",
         "call" : "$obj-&gt;<b><a name=\"id755\">nrPlurals</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id755\">Log::Report::Lexicon::Table::nrPlurals()</a></p>",
         "type" : "i_method",
         "id" : "id755-id669"
      },
      "id487" : {
         "call" : "$obj-&gt;<b><a name=\"id487\">index</a></b>",
         "intro" : "<p>Returns a HASH of all defined PO objects, organized by msgid.  Please try\nto avoid using this: use <a class=\"jump\" href=\"id491\">msgid()</a> for lookup.</p>\n",
         "id" : "id487",
         "type" : "i_method",
         "name" : "index"
      },
      "id1088" : {
         "type" : "section",
         "id" : "id1088",
         "subroutines" : [
            "id1089",
            "id1090"
         ],
         "path" : "METHODS/Translating",
         "level" : 2,
         "name" : "Translating"
      },
      "id90" : {
         "name" : "Why use <code>printi()</code> to replace <code>printf()</code>?",
         "level" : 2,
         "path" : "DETAILS/Why use C<printi()> to replace C<printf()>?",
         "id" : "id90",
         "intro" : "<p>The <code>printf()</code> function is provided by Perl's CORE; you do not need\nto install any module to use it.  Why would you use consider using\nthis module?</p>\n\n<ul>\n\n\n\n<p><li>translating<br />\n<code>printf()</code> uses positional parameters, where <a class=\"jump\" href=\"id85\">printi()</a> uses names\nto refer to the values to be filled-in.  Especially in a set-up with\ntranslations, where the format strings get extracted into PO-files,\nit is much clearer to use names.  This is also a disadvantage of\n<a class=\"jump\" href=\"id86\">printp()</a></p>\n\n\n\n<p><li>pluggable serializers<br />\n<code>printi()</code> supports serialization for specific data-types: how to\ninterpolate <code>undef</code>, HASHes, etc.</p>\n\n\n\n<p><li>pluggable modifiers<br />\nEspecially useful in context of translations, the FORMAT string may\ncontain (language specific) helpers to insert the values correctly.</p>\n\n\n\n<p><li>correct use of utf8<br />\nSized string formatting in <code>printf()</code> is broken: it takes your string\nas bytes, not Perl strings (which may be utf8).  In unicode, one\n\"character\" may use many bytes.  Also, some characters are displayed\ndouble wide, for instance in Chinese.  The <a class=\"jump\" href=\"id85\">printi()</a> implementation\nwill use Unicode::GCString for correct behavior.</p>\n\n\n\n<p><li>automatic output encoding (for HTML)<br />\nYou can globally declare that all produced strings must be encoded in\na certain format, for instance that HTML entities should be encoded.</p>\n\n</ul>\n",
         "type" : "section"
      },
      "id653" : {
         "type" : "example",
         "intro" : "<pre>  # getters\n  if($po-&gt;format('c')) ...\n  unless($po-&gt;format('perl-brace')) ...\n  if(defined $po-&gt;format('java')) ...\n\n  # setters\n  $po-&gt;format(java =&gt; 1);       # results in 'java-format'\n  $po-&gt;format(java =&gt; 0);       # results in 'no-java-format'\n  $po-&gt;format(java =&gt; undef);   # results in ''\n</pre>\n",
         "id" : "id653",
         "name" : "use of format()\n"
      },
      "id320" : {
         "level" : 2,
         "name" : "Handling text domains",
         "subroutines" : [
            "id325",
            "id321",
            "id327",
            "id326"
         ],
         "id" : "id320",
         "type" : "section",
         "path" : "METHODS/Handling text domains"
      },
      "id272" : {
         "id" : "id272",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id272\">failure</a></b>",
         "name" : "failure"
      },
      "id1159" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Log::Report::Dispatcher - manage message dispatching, display or logging</p>\n",
         "type" : "chapter",
         "id" : "id1159"
      },
      "id1181-id1091" : {
         "extends" : "id1181",
         "name" : "mode",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "id" : "id1181-id1091",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>"
      },
      "id267" : {
         "name" : "warning",
         "call" : "$obj-&gt;<b><a name=\"id267\">warning</a></b>",
         "id" : "id267",
         "type" : "i_method"
      },
      "id353" : {
         "name" : "More performance via MO-files",
         "level" : 3,
         "path" : "DETAILS/Extracting PO-files/More performance via MO-files",
         "type" : "subsection",
         "intro" : "<p>PO-files are quite large.  You can reduce the translation table size by\ncreating a binary \"MO\"-file for each of them. <a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a>\nwill prefer mo files, if it encounters them, but generation is not (yet)\norganized via <a class=\"jump\" href=\"id801\">Log::Report</a> components.  Search for \"msgfmt\" as separate\ntool or CPAN module.</p>\n",
         "id" : "id353"
      },
      "id620" : {
         "type" : "option",
         "id" : "id620",
         "params" : "$msgid",
         "name" : "msgid_plural"
      },
      "id1010" : {
         "name" : "thaw",
         "call" : "$class-&gt;<b><a name=\"id1010\">thaw</a></b>(&nbsp;\\%data, %options&nbsp;)",
         "type" : "c_method",
         "id" : "id1010"
      },
      "id854" : {
         "type" : "function",
         "intro" : "<p>Same as <a class=\"jump\" href=\"id852\">__nx()</a>, because we have no preferred order for 'x' and 'n'.</p>\n",
         "id" : "id854",
         "call" : "<b><a name=\"id854\">__xn</a></b>(&nbsp;$single_msgid, $plural_msgid, $count, $paurs&nbsp;)",
         "name" : "__xn"
      },
      "id1205-id780" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "name" : "max_line",
         "type" : "default",
         "id" : "id1205-id780",
         "value" : "<code>undef</code>",
         "extends" : "id1205"
      },
      "id162" : {
         "id" : "id162",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id162\">name</a></b>",
         "name" : "name"
      },
      "id446" : {
         "level" : 2,
         "name" : "Constructors",
         "subroutines" : [
            "id447"
         ],
         "id" : "id446",
         "type" : "section",
         "path" : "METHODS/Constructors"
      },
      "id1187-id1217" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "id" : "id1187-id1217",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)",
         "extends" : "id1187",
         "name" : "translate"
      },
      "id188" : {
         "name" : "try",
         "id" : "id188",
         "type" : "function",
         "call" : "<b><a name=\"id188\">try</a></b>(&nbsp;CODE, %options&nbsp;)"
      },
      "id1177" : {
         "name" : "Perl does not support charset $cs",
         "subroutine" : "id1164",
         "type" : "error",
         "id" : "id1177"
      },
      "id914" : {
         "value" : "&lt;basename <tt class=\"parameter\">$0</tt>>",
         "id" : "id914",
         "type" : "default",
         "name" : "identity"
      },
      "id177" : {
         "nest" : [
            "id179",
            "id189",
            "id201",
            "id211"
         ],
         "id" : "id177",
         "type" : "chapter",
         "name" : "FUNCTIONS",
         "level" : 1,
         "path" : "FUNCTIONS",
         "subroutines" : [
            "id178"
         ]
      },
      "id765" : {
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id766"
         ],
         "type" : "section",
         "id" : "id765",
         "name" : "Constructors",
         "level" : 2
      },
      "id319" : {
         "call" : "$obj-&gt;<b><a name=\"id319\">translateTo</a></b>(&nbsp;[$language]&nbsp;)",
         "type" : "i_method",
         "id" : "id319",
         "name" : "translateTo"
      },
      "id971" : {
         "name" : "_to",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id971"
      },
      "id1139-id385" : {
         "type" : "default",
         "id" : "id1139-id385",
         "value" : "<code>undef</code>",
         "extends" : "id1139",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1138\">Log::Report::Domain::configure(context_rules)</a></p>",
         "name" : "context_rules"
      },
      "id619" : {
         "id" : "id619",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "name" : "msgid"
      },
      "id500" : {
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS",
         "nest" : [
            "id501",
            "id502",
            "id503"
         ],
         "type" : "chapter",
         "id" : "id500"
      },
      "id512" : {
         "subroutine" : "id504",
         "name" : "count missing in $function in line $line.",
         "type" : "error",
         "id" : "id512"
      },
      "id1142-id385" : {
         "extends" : "id1142",
         "name" : "the native_language '$locale' is not a valid locale",
         "subroutine" : "id1133",
         "type" : "error",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1133\">Log::Report::Domain::configure()</a></p>",
         "id" : "id1142-id385"
      },
      "id1195-id780" : {
         "extends" : "id1195",
         "value" : "&lt;required&gt;",
         "id" : "id1195-id780",
         "type" : "default",
         "name" : "package",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>"
      },
      "id1213" : {
         "intro" : "<p>The modules which use <code>Log::Report</code> will only specify the base of\nthe message string.  The base dispatcher and the back-ends will extend\nthis message with additional information:</p>\n\n<ul>\n<li>. the reason<br />\n<li>. the filename/line-number where the problem appeared<br />\n<li>. the filename/line-number where it problem was reported<br />\n<li>. the error text in <code>$!</code><br />\n<li>. a stack-trace<br />\n<li>. a trailing new-line<br />\n</ul>\n\n<p>When the message is a translatable object (<a class=\"jump\" href=\"id935\">Log::Report::Message</a>, for\ninstance created with <a class=\"jump\" href=\"id845\">Log::Report::__()</a>), then the added components\nwill get translated as well.  Otherwise, all will be in English.</p>\n\n<p>Exactly what will be added depends on the actual mode of the dispatcher\n(change it with <a class=\"jump\" href=\"id1181\">mode()</a>, initiate it with <a class=\"jump\" href=\"id1169\">new(mode)</a>).</p>\n<pre>\n                         mode mode mode mode\n  REASON   SOURCE   TE!  NORM VERB ASSE DEBUG\n  trace    program  ...                 S\n  assert   program  ...            SL   SL\n  info     program  T..       S    S    S\n  notice   program  T..  S    S    S    S\n  mistake  user     T..  S    S    S    SL\n  warning  program  T..  S    S    SL   SL\n  error    user     TE.  S    S    SL   SC\n  fault    system   TE!  S    S    SL   SC\n  alert    system   T.!  SL   SL   SC   SC\n  failure  system   TE!  SL   SL   SC   SC\n  panic    program  .E.  SC   SC   SC   SC\n\n  T - usually translated\n  E - exception (execution interrupted)\n  ! - will include $! text at display\n  L - include filename and linenumber\n  S - show/print when accepted\n  C - stack trace (like Carp::confess())\n</pre>\n",
         "id" : "id1213",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Addition information",
         "level" : 3,
         "name" : "Addition information"
      },
      "id468" : {
         "name" : "charset",
         "params" : "STRING",
         "intro" : "<p>The character-set which is used for the file.  When not specified, it is\ntaken from the \"Content-Type\" field in the PO-file.</p>\n",
         "id" : "id468",
         "type" : "option"
      },
      "id482" : {
         "id" : "id482",
         "type" : "fault",
         "name" : "cannot read translations from $fn, need $size at $loc: $!",
         "subroutine" : "id467"
      },
      "id807" : {
         "type" : "function",
         "id" : "id807",
         "options" : [
            [
               "id810",
               "id811"
            ],
            [
               "id818",
               "id819"
            ],
            [
               "id816",
               "id817"
            ],
            [
               "id814",
               "id815"
            ],
            [
               "id812",
               "id813"
            ],
            [
               "id808",
               "id809"
            ]
         ],
         "diagnostics" : [
            "id821",
            "id822",
            "id823",
            "id824"
         ],
         "call" : "<b><a name=\"id807\">report</a></b>(&nbsp;[\\%options], $reason, $message|&lt;$text,%params>,&nbsp;)",
         "examples" : [
            "id820"
         ],
         "intro" : "<p>The <code>report</code> function is sending (for some <tt class=\"parameter\">$reason</tt>) a <tt class=\"parameter\">$message</tt> to be\ndisplayed or logged (by a `dispatcher').  This function is the core\nfor <a class=\"jump\" href=\"id839\">error()</a>, <a class=\"jump\" href=\"id835\">info()</a> etc functions, which are nicer names for this\nexception throwing: better use those short names.</p>\n\n<p>The optional <tt class=\"parameter\">%options</tt> are listed below.  Quite differently from other\nfunctions and methods, they have to be passed in a HASH as first parameter.</p>\n\n<p>The <tt class=\"parameter\">$reason</tt> is a string like 'ERROR' (for function <code>error()</code>).\nThe <tt class=\"parameter\">$message</tt> is a <a class=\"jump\" href=\"id935\">Log::Report::Message</a> object (which is created with\nthe special translation syntax like <a class=\"jump\" href=\"id847\">__x()</a>).</p>\n\n<p>The message may also be a plain piece of <tt class=\"parameter\">$text</tt>, or a\n<a class=\"jump\" href=\"id1225\">Log::Report::Exception</a> object. The <tt class=\"parameter\">%params</tt> can be used to influence\nthe dispatchers, like real message objects can.</p>\n\n<p>This function returns the LIST of dispatchers which accepted the <tt class=\"parameter\">$message</tt>.\nWhen empty, no back-end has accepted it so the <tt class=\"parameter\">$message</tt> was \"lost\".\nEven when no back-end needs the message, the program will still exit\nwhen there is a <tt class=\"parameter\">$reason</tt> to <code>die()</code>.</p>\n",
         "name" : "report"
      },
      "id1042" : {
         "name" : "hides",
         "call" : "$obj-&gt;<b><a name=\"id1042\">hides</a></b>(&nbsp;$reason&nbsp;)",
         "id" : "id1042",
         "intro" : "<p>Check whether the try stops message which were produced for <tt class=\"parameter\">$reason</tt>.</p>\n",
         "type" : "i_method"
      },
      "id934" : {
         "call" : "$obj-&gt;<b><a name=\"id934\">reasonToPrio</a></b>(&nbsp;$reason&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Returns a level which is understood by syslog(3), based on a translation\ntable.  This can be changed with <a class=\"jump\" href=\"id919\">new(to_prio)</a>.</p>\n",
         "id" : "id934",
         "name" : "reasonToPrio"
      },
      "id989" : {
         "name" : "msgctxt",
         "id" : "id989",
         "intro" : "<p>The message context for the translation table lookup.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id989\">msgctxt</a></b>"
      },
      "id55" : {
         "value" : "<code>[ qr/^%\\S+/ =&gt; \\&amp;format_printf]</code>",
         "id" : "id55",
         "type" : "default",
         "name" : "modifiers"
      },
      "id247" : {
         "intro" : "<pre>  my $lexicon = $directory;  # f.i. $directory/&lt;domain>/nl_NL.utf-8.po\n  my $tables  = Log::Report::Translator::POT-&gt;new(lexicon =&gt; $lexicon);\n  (engine 'template')-&gt;addTextdomain(name =&gt; 'mydomain')-&gt;configure(translator =&gt; $tables);\n</pre>\n",
         "id" : "id247",
         "type" : "example"
      },
      "id142" : {
         "intro" : "<p>The domain for the registered <tt class=\"parameter\">$package</tt> is returned.</p>\n\n<p>With <tt class=\"parameter\">$domain</tt>, <tt class=\"parameter\">$filename</tt> and <tt class=\"parameter\">$line</tt>, this registers a location where\nthe textdomain is specified first.  Each <tt class=\"parameter\">$package</tt> can only belong to\none <tt class=\"parameter\">$domain</tt>.</p>\n",
         "name" : "pkg2domain",
         "call" : "<b><a name=\"id142\">pkg2domain</a></b>(&nbsp;$package, [$domain, $filename, $line]&nbsp;)",
         "diagnostics" : [
            "id143"
         ],
         "id" : "id142",
         "type" : "function"
      },
      "id466" : {
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id741-id461",
            "id467"
         ],
         "type" : "section",
         "id" : "id466",
         "name" : "Constructors",
         "level" : 2
      },
      "id991" : {
         "intro" : "<p>Deprecated alternative for <a class=\"jump\" href=\"id990\">tags()</a>.</p>\n",
         "id" : "id991",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id991\">classes</a></b>",
         "name" : "classes"
      },
      "id1039" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id1180-id1021",
            "id1179-id1021",
            "id1183-id1021",
            "id1181-id1021",
            "id1182-id1021",
            "id1045",
            "id1041",
            "id1042",
            "id1040",
            "id1043"
         ],
         "type" : "section",
         "id" : "id1039",
         "path" : "METHODS/Attributes"
      },
      "id1359" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Minimal\n   is an Exporter\n</pre>\n",
         "type" : "chapter",
         "id" : "id1359",
         "path" : "INHERITANCE"
      },
      "id522-id354" : {
         "params" : "$charset",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id522\">Log::Report::Extract::new(charset)</a></p>",
         "id" : "id522-id354",
         "name" : "charset",
         "extends" : "id522"
      },
      "id745" : {
         "call" : "$obj-&gt;<b><a name=\"id745\">msgid</a></b>(&nbsp;STRING, [$msgctxt]&nbsp;)",
         "intro" : "<p>Lookup the <a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a> with the <tt class=\"parameter\">STRING</tt>.\nReturns <code>undef</code> when not defined.</p>\n",
         "id" : "id745",
         "type" : "i_method",
         "name" : "msgid"
      },
      "id985-id221" : {
         "id" : "id985-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id985\">Log::Report::Message::append()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id985\">append</a></b>",
         "name" : "append",
         "extends" : "id985"
      },
      "id197" : {
         "name" : "fault",
         "id" : "id197",
         "type" : "function",
         "call" : "<b><a name=\"id197\">fault</a></b>(&nbsp;$message&nbsp;)"
      },
      "id1255" : {
         "type" : "example",
         "intro" : "<pre>  print $_-&gt;toString for $@-&gt;exceptions;\n  print $_ for $@-&gt;exceptions;   # via overloading\n</pre>\n",
         "id" : "id1255",
         "name" : "printing exceptions\n"
      },
      "id751-id561" : {
         "extends" : "id751",
         "type" : "i_method",
         "id" : "id751-id561",
         "call" : "$obj-&gt;<b><a name=\"id751\">pluralIndex</a></b>(&nbsp;$count&nbsp;)",
         "diagnostics" : [
            "id752-id561"
         ],
         "name" : "pluralIndex",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id751\">Log::Report::Lexicon::Table::pluralIndex()</a></p>"
      },
      "id448" : {
         "id" : "id448",
         "type" : "section",
         "subroutines" : [
            "id449"
         ],
         "path" : "METHODS/Attributes",
         "level" : 2,
         "name" : "Attributes"
      },
      "id532" : {
         "subroutines" : [
            "id538",
            "id534",
            "id533",
            "id540",
            "id537"
         ],
         "type" : "section",
         "id" : "id532",
         "path" : "METHODS/Processors",
         "level" : 2,
         "name" : "Processors"
      },
      "id292" : {
         "nest" : [
            "id293"
         ],
         "id" : "id292",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>[The Dancer2 plugin was contributed by Andrew Beverley]</p>\n\n<p>This logger allows the use of the many logging backends available\nin <a class=\"jump\" href=\"id801\">Log::Report</a>.  It will process all of the Dancer2 log messages,\nand also allow any other module to use the same logging facilities. The\nsame log messages can be sent to multiple destinations at the same time\nvia flexible dispatchers.</p>\n\n<p>If using this logger, you may also want to use\n<a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a></p>\n\n<p>Many log back-ends, like syslog, have more levels of system messages.\nModules who explicitly load this module can use the missing <code>assert</code>,\n<code>notice</code>, <code>panic</code>, and <code>alert</code> log levels.  The <code>trace</code> name is\nprovided as well: when you are debugging, you add a 'trace' to your\nprogram... it's just a better name than 'debug'. You will need to load\n<a class=\"jump\" href=\"id801\">Log::Report</a> in order to use the additional levels; if doing so directly within\na Dancer2 application (not a sub-module), then you will either need to load\n<a class=\"jump\" href=\"id801\">Log::Report</a> with <code>syntax, 'LONG'</code> or use <a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a> to\nprevent namespace clashes.</p>\n"
      },
      "id684" : {
         "intro" : "<p>The algorithm to be used to calculate which translated msgstr to use.</p>\n",
         "type" : "option",
         "id" : "id684",
         "params" : "EXPRESSION",
         "name" : "plural_alg"
      },
      "id639" : {
         "call" : "$obj-&gt;<b><a name=\"id639\">msgctxt</a></b>",
         "intro" : "<p>Returns the message context string, if provided.</p>\n",
         "id" : "id639",
         "type" : "i_method",
         "name" : "msgctxt"
      },
      "id1218" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Log::Report::Dispatcher::Perl - send messages to die and warn</p>\n",
         "type" : "chapter",
         "id" : "id1218"
      },
      "id883" : {
         "name" : "textdomain",
         "intro" : "<p>[1.00] Without CONFIGuration, this returns the <a class=\"jump\" href=\"id1122\">Log::Report::Domain</a> object\nwhich administers the <tt class=\"parameter\">$domain</tt>, by default the domain effective in the scope\nof the package.</p>\n\n<p>A very special case is \"<tt class=\"parameter\">DELETE</tt>\", which will remove the domain\nconfiguration. [1.20] \"<tt class=\"parameter\">EXISTS</tt>\" will check for existence: when it exists,\nit will be returned, but a domain will not be automagically created.</p>\n\n<p>[1.20] You may also pass a pre-configured domain.</p>\n",
         "type" : "function",
         "id" : "id883",
         "call" : "<b><a name=\"id883\">textdomain</a></b>(&nbsp;&lt;[$name],$config&gt;|&lt;$name, 'DELETE'|'EXISTS'>|$domain&nbsp;)"
      },
      "id186" : {
         "subroutine" : "id180",
         "name" : "odd length parameter list with '$msg'",
         "type" : "error",
         "id" : "id186"
      },
      "id1167-id1217" : {
         "params" : "LOCALE",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "type" : "option",
         "id" : "id1167-id1217",
         "name" : "locale",
         "extends" : "id1167"
      },
      "id339" : {
         "name" : "process",
         "call" : "$obj-&gt;<b><a name=\"id339\">process</a></b>(&nbsp;$template, [\\%vars, $output, \\%options]&nbsp;)",
         "intro" : "<p>Process the <tt class=\"parameter\">$template</tt> into <tt class=\"parameter\">$output</tt>, filling in the <tt class=\"parameter\">%vars</tt>.</p>\n",
         "id" : "id339",
         "type" : "i_method"
      },
      "id384" : {
         "intro" : "<p>This example extends the previous with using context sensitive translations,\nas implemented by <a class=\"jump\" href=\"id583\">Log::Report::Translator::Context</a>.</p>\n\n<p>Let's say that the translation of some of the sentences on the website depend\non the gender of the addressed person.  An example of the use in a TT2\ntemplate:</p>\n<pre>\n  [% loc(\"{name&lt;gender} forgot his key\", name =&gt; person.name) %]\n</pre>\n\n<p>The extraction script <i class=\"filename\">xgettext-perl</i> will expand this into two records\nin the PO file, respectively with msgctxt attribute 'gender=male' and\n'gender=female'.</p>\n\n<p>When your PO-files are not generated by 'xgettext-perl', you do not need\na separate domain configuration file:</p>\n<pre>\n  $domain-&gt;configure(\n    context_rules =&gt; +{gender =&gt; ['male','female']},\n    translator    =&gt; $translator,\n  );\n</pre>\n\n<p>When your PO-files are generated by 'xgettext-perl', you need to share\nthe context-rules between that msgid extractor and your runtime code. That\nsame file needs to be passed with the 'domain' parameter to the script.</p>\n<pre>\n  # add context_rules either explicit or via 'config' filename\n  $domain-&gt;configure(\n    config     =&gt; 'my/own/$domain.conf',\n    translator =&gt; $translator,\n  );\n</pre>\n\n<p>Now, when you generate the pages, you need to set-up the right context.\nIn this case, we set-up the gender of the person who gets addressed.\n(The name 'gender' is good for examples, but quite non-descriptive.\nMaybe 'user_gender' is more maintainable)</p>\n<pre>\n  $domain-&gt;setContext( +{gender =&gt; 'male'} );  # or ('gender=male')\n  $domain-&gt;setContext( \"gender=male\" );        # same\n</pre>\n",
         "type" : "section",
         "id" : "id384",
         "path" : "DETAILS/Use in combination with contexts",
         "level" : 2,
         "name" : "Use in combination with contexts"
      },
      "id498" : {
         "level" : 3,
         "name" : "What is extracted?",
         "id" : "id498",
         "intro" : "<p>This script will extract the msgids used in <code>__()</code>, <code>__x()</code>, <code>__xn()</code>,\nand <code>__n()</code> (implemented by <a class=\"jump\" href=\"id801\">Log::Report</a>) For instance</p>\n<pre>\n  __x\"msgid\", @more\n  __x'msgid', @more  &lt;--- no!  syntax error!\n  __x(\"msgid\", @more)\n  __x('msgid', @more)\n  __x(msgid =&gt; @more)\n</pre>\n\n<p>Besides, there are some helpers which are no-ops in the code, only to fill\nthe po-tables: <code>N__()</code>, <code>N__n()</code>, <code>N__()</code></p>\n",
         "type" : "subsection",
         "path" : "DESCRIPTION/The extraction process/What is extracted?"
      },
      "id585" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  # usually, the context information is in a separate file\n  textdomain 'my-domain', config =&gt; $filename;\n</pre>\n",
         "id" : "id585",
         "path" : "SYNOPSIS"
      },
      "id242" : {
         "intro" : "<p>Standard Moo with Dancer2::Core::Role::Template extensions.</p>\n",
         "type" : "section",
         "id" : "id242",
         "path" : "METHODS/Constructors",
         "level" : 2,
         "name" : "Constructors"
      },
      "id1280" : {
         "type" : "section",
         "id" : "id1280",
         "nest" : [
            "id1281",
            "id1282"
         ],
         "path" : "DETAILS/Automatic parameters",
         "level" : 2,
         "name" : "Automatic parameters"
      },
      "id718" : {
         "type" : "error",
         "id" : "id718",
         "subroutine" : "id717",
         "name" : "translation already exists for '$msgid' with '$ctxt'."
      },
      "id810" : {
         "name" : "errno",
         "type" : "option",
         "intro" : "<p>When the <tt class=\"parameter\">$reason</tt> includes the error text (See <a class=\"jump\" href=\"id894\">Run modes</a>), you can\noverrule the error code kept in <code>$!</code>.  In other cases, the return code\ndefaults to <code>1</code> (historical UNIX behavior). When the message <tt class=\"parameter\">$reason</tt>\n(combined with the run-mode) is severe enough to stop the program,\nthis value as return code of the program.  The use of this option itself\nwill not trigger an <code>die()</code>.</p>\n",
         "id" : "id810",
         "params" : "INTEGER"
      },
      "id1327" : {
         "id" : "id1327",
         "intro" : "<pre> MojoX::Log::Report\n   is a Mojo::Log\n</pre>\n",
         "type" : "chapter",
         "path" : "INHERITANCE",
         "level" : 1,
         "name" : "INHERITANCE"
      },
      "id1186-id760" : {
         "name" : "log",
         "extends" : "id1186",
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1186\">Log::Report::Dispatcher::log()</a></p>",
         "id" : "id1186-id760",
         "type" : "i_method"
      },
      "id802" : {
         "id" : "id802",
         "intro" : "<p>Log::Report - report a problem, with exceptions and translation support</p>\n",
         "type" : "chapter",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id754-id461" : {
         "subroutine" : "id753",
         "extends" : "id754",
         "name" : "invalid plural-form algorithm '$alg'.",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id753\">Log::Report::Lexicon::Table::setupPluralAlgorithm()</a></p>",
         "id" : "id754-id461",
         "type" : "error"
      },
      "id527-id354" : {
         "name" : "index",
         "extends" : "id527",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id527\">Log::Report::Extract::index()</a></p>",
         "type" : "i_method",
         "id" : "id527-id354",
         "call" : "$obj-&gt;<b><a name=\"id527\">index</a></b>"
      },
      "id795" : {
         "name" : "Log4perl level '$level' must be in 0-5",
         "subroutine" : "id789",
         "type" : "error",
         "id" : "id795"
      },
      "id1252" : {
         "intro" : "<p>Insert the message contained in the exception into the currently defined\ndispatchers.  The <code>throw</code> as method name is commonly known exception\nrelated terminology for <code>report</code>.</p>\n\n<p>The <tt class=\"parameter\">%options</tt> overrule the captured options to <a class=\"jump\" href=\"id807\">Log::Report::report()</a>.\nThis can be used to overrule a destination.  Also, the reason can\nbe changed.</p>\n\n<p>Returned is the LIST of dispatchers which have accepted the forwarded\nexception.</p>\n",
         "type" : "i_method",
         "id" : "id1252",
         "call" : "$obj-&gt;<b><a name=\"id1252\">throw</a></b>(&nbsp;%options&nbsp;)",
         "examples" : [
            "id1253"
         ],
         "name" : "throw"
      },
      "id923" : {
         "params" : "BOOLEAN",
         "id" : "id923",
         "intro" : "<p>[1.00] Include the text-domain of the message in each logged message.</p>\n",
         "type" : "option",
         "name" : "include_domain"
      },
      "id415" : {
         "id" : "id415",
         "type" : "error",
         "subroutine" : "id412",
         "name" : "message does not contain counting alternatives in '$msgid'"
      },
      "id476" : {
         "id" : "id476",
         "type" : "fault",
         "subroutine" : "id467",
         "name" : "cannot read originals from $fn, need $size at $loc: $!"
      },
      "id950" : {
         "intro" : "<p>When defined, the <tt class=\"parameter\">_plural</tt> need to be defined as well.  When an\nARRAY is provided, the length of the ARRAY is taken.  When a HASH\nis given, the number of keys in the HASH is used.</p>\n",
         "id" : "id950",
         "type" : "option",
         "params" : "INTEGER|ARRAY|HASH",
         "name" : "_count"
      },
      "id147" : {
         "type" : "chapter",
         "intro" : "<p>This module will allow libraries (helper modules) to have a dependency\nto a small module instead of the full Log-Report distribution.  The full\npower of <code>Log::Report</code> is only released when the main program uses that\nmodule.  In that case, the module using the 'Optional' will also use the\nfull <a class=\"jump\" href=\"id801\">Log::Report</a>, otherwise the dressed-down <a class=\"jump\" href=\"id173\">Log::Report::Minimal</a>\nversion.</p>\n\n<p>For the full documentation:</p>\n\n<ul>\n<li>see <a class=\"jump\" href=\"id801\">Log::Report</a> when it is used by main<br />\n<li>see <a class=\"jump\" href=\"id173\">Log::Report::Minimal</a> otherwise<br />\n</ul>\n\n<p>The latter provides the same functions from the former, but is the\nsimpelest possible way.</p>\n",
         "id" : "id147",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id1209-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "name" : "abstract",
         "type" : "default",
         "id" : "id1209-id760",
         "value" : "1",
         "extends" : "id1209"
      },
      "id1068" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  sub cb($$$)\n  {   my ($disp, $options, $reason, $message) = @_;\n      ...\n  }\n\n  dispatcher Log::Report::Dispatcher::Callback =&gt; 'cb',\n        callback =&gt; \\&amp;cb;\n\n  dispatcher CALLBACK =&gt; 'cb',   # same\n        callback =&gt; \\&amp;cb;\n</pre>\n",
         "type" : "chapter",
         "id" : "id1068",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id192" : {
         "name" : "info",
         "type" : "function",
         "id" : "id192",
         "call" : "<b><a name=\"id192\">info</a></b>(&nbsp;$message&nbsp;)"
      },
      "id169-id385" : {
         "name" : "formatter",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id168\">Log::Report::Minimal::Domain::configure(formatter)</a></p>",
         "extends" : "id169",
         "value" : "<code>PRINTI</code>",
         "type" : "default",
         "id" : "id169-id385"
      },
      "id941" : {
         "name" : "'&amp;{}'",
         "call" : "overload <b><a name=\"id941\">'&amp;{}'</a></b>; used as function",
         "intro" : "<p>When the object is called as function, a new object is created with\nthe data from the original one but updated with the new parameters.\nImplemented in <code>clone()</code>.</p>\n",
         "id" : "id941",
         "type" : "overload"
      },
      "id829" : {
         "subroutine" : "id825",
         "name" : "the 'filter' sub-command needs a CODE reference.",
         "id" : "id829",
         "type" : "error"
      },
      "id286" : {
         "path" : "DETAILS/In Use/Handling user errors",
         "id" : "id286",
         "intro" : "<p>Sometimes we write a function in a model, and it would be nice to have a\nnice easy way to return from the function with an error message. One\nway of doing this is with a separate error message variable, but that\ncan be messy code. An alternative is to use exceptions, but these\ncan be a pain to deal with in terms of catching them.\nHere's how to do it with <a class=\"jump\" href=\"id801\">Log::Report</a>.</p>\n\n<p>In this example, we do use exceptions, but in a neat, easier to use manner.</p>\n\n<p>First, your module/model:</p>\n<pre>\n  package MyApp::CD;\n\n  sub update {\n    my ($self, %values) = @_;\n    $values{title} or error \"Please enter a title\";\n    $values{description} or warning \"No description entered\";\n  }\n</pre>\n\n<p>Then, in your controller:</p>\n<pre>\n  package MyApp;\n  use Dancer2;\n\n  post '/cd' =&gt; sub {\n    my %values = (\n      title       =&gt; param('title');\n      description =&gt; param('description');\n    );\n    if (process sub { MyApp::CD-&gt;update(%values) } ) {\n      success \"CD updated successfully\";\n      redirect '/cd';\n    }\n\n    template 'cd' =&gt; { values =&gt; \\%values };\n  }\n</pre>\n\n<p>Now, when update() is called, any exceptions are caught. However, there is\nno need to worry about any error messages. Both the error and warning\nmessages in the above code will have been stored in the messages session\nvariable, where they can be displayed using the code in the previous section.\nThe <code>error</code> will have caused the code to stop running, and process()\nwill have returned <code>false</code>. <code>warning</code> will have simply logged the warning\nand not caused the function to stop running.</p>\n",
         "type" : "subsection",
         "name" : "Handling user errors",
         "level" : 3
      },
      "id1083" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "intro" : "<p>A module (or distribution) has a certain way of translating messages,\nusually <code>gettext</code>.  The translator is based on some <code>textdomain</code>\nfor the message, which can be specified as option per text element,\nbut usually is package scoped.</p>\n\n<p>This base class does not translate at all: it will use the MSGID\n(and MSGID_PLURAL if available).  It's a nice fallback if the\nlanguage packs are not installed.</p>\n",
         "type" : "chapter",
         "id" : "id1083",
         "path" : "DESCRIPTION"
      },
      "id736" : {
         "intro" : "<p>Log::Report::Lexicon::Table - generic interface to translation tables</p>\n",
         "type" : "chapter",
         "id" : "id736",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id1045" : {
         "id" : "id1045",
         "intro" : "<p>Returns the value of <a class=\"jump\" href=\"id1037\">new(on_die)</a>.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1045\">die2reason</a></b>",
         "name" : "die2reason"
      },
      "id537" : {
         "name" : "showStats",
         "call" : "$obj-&gt;<b><a name=\"id537\">showStats</a></b>(&nbsp;[$domains]&nbsp;)",
         "id" : "id537",
         "intro" : "<p>Show a status about the DOMAIN (by default all domains).  At least mode\nverbose is required to see this.</p>\n\n<p>The statistics are sent to (<a class=\"jump\" href=\"id801\">Log::Report</a>) dispatchers which accept\nnotice and info.  This could be syslog.  When you have no explicit\ndispatchers in your program, the level of detail get controlled by\nthe 'mode':</p>\n<pre>\n  use Log::Report mode =&gt; 'DEBUG';  # or 'VERBOSE'\n</pre>\n",
         "type" : "i_method"
      },
      "id1199-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "name" : "linenr",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id1199-id760",
         "extends" : "id1199"
      },
      "id1200-id905" : {
         "params" : "STRING",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "id" : "id1200-id905",
         "name" : "call",
         "extends" : "id1200"
      },
      "id1237" : {
         "type" : "option",
         "id" : "id1237",
         "params" : "$reason",
         "name" : "reason"
      },
      "id825" : {
         "name" : "dispatcher",
         "intro" : "<p>The <code>dispatcher</code> function controls access to dispatchers: the back-ends\nwhich process messages, do the logging.  Dispatchers are global entities,\naddressed by a symbolic <tt class=\"parameter\">$name</tt>.  Please read <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a> as\nwell.</p>\n\n<p>The <code>Log::Report</code> suite has its own dispatcher types, but also connects\nto external dispatching frameworks.  Each need some (minor) conversions,\nespecially with respect to translation of REASONS of the reports\ninto log-levels as the back-end understands.</p>\n\n<p>[1.10] When you open a dispatcher with a <tt class=\"parameter\">$name</tt> which is already in use,\nthat existing dispatcher gets closed.  Except when you have given an\n'dispatcher \"do-not-reopen\"' earlier, in which case the first object\nstays alive, and the second attempt ignored. [1.11] The automatically\ncreated default dispatcher will get replaced, even when this option\nis given, by another dispatcher which is named 'default'.</p>\n\n<p>The <tt class=\"parameter\">%options</tt> are a mixture of parameters needed for the\n<a class=\"jump\" href=\"id801\">Log::Report</a> dispatcher wrapper and the settings of the back-end.\nSee <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>, the documentation for the back-end specific\nwrappers, and the back-ends for more details.</p>\n\n<p>Implemented COMMANDs are <code>close</code>, <code>find</code>, <code>list</code>, <code>disable</code>,\n<code>enable</code>, <code>mode</code>, <code>filter</code>, <code>needs</code>, <code>active-try</code>, and <code>do-not-reopen</code>.</p>\n\n<p>Most commands are followed by a LIST of dispatcher <tt class=\"parameter\">@names</tt> to be addressed.\nFor <code>mode</code> see section <a class=\"jump\" href=\"id894\">Run modes</a>; it requires a MODE argument\nbefore the LIST of NAMEs.  Non-existing names will be ignored. When\n<code>ALL</code> is specified, then all existing dispatchers will get addressed.\nFor <code>filter</code> see <a class=\"jump\" href=\"id1214\">Filters</a>; it requires a CODE\nreference before the <tt class=\"parameter\">@names</tt> of the dispatchers which will have the it\napplied (defaults to all).</p>\n\n<p>With <code>needs</code>, you only provide a REASON: it will return the list of\ndispatchers which need to be called in case of a message with the REASON\nis triggered.  The <code>active-try</code> [1.09] returns the closest surrounding\nexception catcher, a <a class=\"jump\" href=\"id1021\">Log::Report::Dispatcher::Try</a> object.</p>\n\n<p>For both the creation as COMMANDs version of this method, all objects\ninvolved are returned as LIST, non-existing ones skipped.  In SCALAR\ncontext with only one name, the one object is returned.</p>\n",
         "examples" : [
            "id826"
         ],
         "type" : "function",
         "id" : "id825",
         "diagnostics" : [
            "id827",
            "id828",
            "id829"
         ],
         "call" : "<b><a name=\"id825\">dispatcher</a></b>(&nbsp;&lt;$type, $name, %options&gt;|&lt;$command, @names>&nbsp;)"
      },
      "id646" : {
         "name" : "references",
         "id" : "id646",
         "intro" : "<p>Returns an unsorted LIST of <tt class=\"parameter\">@locations</tt>.  When data are specified,\nthen those will be used to replace all currently defined references.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id646\">references</a></b>(&nbsp;[$locations|@locations|\\@locations]&nbsp;)"
      },
      "id346" : {
         "level" : 3,
         "name" : "Translation syntax",
         "id" : "id346",
         "intro" : "<p>Let say that your translation function is called 'loc', which is the\ndefault name.  Then, you can use that name as simple function.</p>\n\n<p>In these examples, <code>PAIRS</code> is a list of values to be inserted in the\n<code>msgid</code> string. When the <code>msgid</code> is specified with a <code>plural</code> alternative,\nthen a <code>COUNTER</code> value is required to indicate which alternative is\nrequired.</p>\n<pre>\n  [% loc(\"msgid\", PAIRS) %]\n  [% loc('msgid', PAIRS) %]\n  [% loc(\"msgid|plural\", COUNTER, PAIRS) %]\n  [% loc(\"msgid|plural\", _count =&gt; COUNTER, PAIRS) %]\n\n  [% INCLUDE\n       title = loc('something')\n   %]\n</pre>\n\n<p>But also as filter.  Although filters and functions work differently\ninternally in Template Toolkit, it is convenient to permit both syntaxes.</p>\n<pre>\n  [% | loc(PAIRS) %]msgid[% END %]\n  [% 'msgid' | loc(PAIRS) %]\n  [% \"msgid\" | loc(PAIRS) %]\n\n  [% \"msgid|plural\" | loc(COUNTER, PAIRS) %]\n  [% \"msgid|plural\" | loc(_count =&gt; COUNTER, PAIRS) %]\n  [% FILTER loc %]msgid[% END %]\n  [% FILTER loc(COUNTER, PAIRS) %]msgid|plural[% END %]\n</pre>\n\n<p>As examples</p>\n<pre>\n  [% loc(\"hi {n}\", n =&gt; name) %]\n  [% | loc(n =&gt; name) %]hi {n}[% END %]\n  [% \"hi {n}\" | loc(n =&gt; name) %]\n  [% loc(\"one person|{_count} people\", size) %]\n  [% | loc(size) %]one person|{_count} people[% END %]\n  [% 'one person|{_count} people' | loc(size) %]\n</pre>\n\n<p>These syntaxes work exacly like translations with <a class=\"jump\" href=\"id801\">Log::Report</a> for your\nPerl programs.  Compare this with:</p>\n<pre>\n  __x\"hi {n}\", n =&gt; name;    # equivalent to\n  __x(\"hi {n}\", n =&gt; name);  # replace __x() by loc()\n</pre>\n",
         "type" : "subsection",
         "path" : "DETAILS/Supported syntax/Translation syntax"
      },
      "id1198-id1021" : {
         "extends" : "id1198",
         "name" : "linenr",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "id" : "id1198-id1021",
         "params" : "INTEGER"
      },
      "id144" : {
         "inheritance" : {
            "extends" : [
               "Exporter"
            ]
         },
         "id" : "id144",
         "title" : "pick Log::Report or ::Minimal",
         "is_pure_pod" : false,
         "distribution" : "Log-Report-Optional",
         "package" : "Log::Report::Optional",
         "version" : "1.08",
         "chapters" : [
            "id145",
            "id1334",
            "id146",
            "id147",
            "id148"
         ],
         "name" : "Log::Report::Optional"
      },
      "id453" : {
         "name" : "find",
         "intro" : "<p>Lookup the best translation table, according to the rules described\nin chapter <a class=\"jump\" href=\"id456\">DETAILS</a>, below.</p>\n\n<p>Returned is a filename, or <code>undef</code> if nothing is defined for the\n<tt class=\"parameter\">$locale</tt> (there is no default on this level).</p>\n",
         "type" : "i_method",
         "id" : "id453",
         "call" : "$obj-&gt;<b><a name=\"id453\">find</a></b>(&nbsp;$textdomain, $locale&nbsp;)"
      },
      "id950-id221" : {
         "name" : "_count",
         "extends" : "id950",
         "params" : "INTEGER|ARRAY|HASH",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id950\">Log::Report::Message::new(_count)</a></p>",
         "id" : "id950-id221"
      },
      "id1114" : {
         "name" : "unable to rotate logfile $fn to $oldfn: $!",
         "subroutine" : "id1112",
         "id" : "id1114",
         "type" : "fault"
      },
      "id1102" : {
         "name" : "charset",
         "id" : "id1102",
         "value" : "LC_CTYPE",
         "type" : "default"
      },
      "id932" : {
         "id" : "id932",
         "intro" : "<p>Returns the <tt class=\"parameter\">CODE</tt> ref which formats the syslog line.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id932\">format</a></b>(&nbsp;[CODE]&nbsp;)",
         "name" : "format"
      },
      "id1022" : {
         "path" : "NAME",
         "intro" : "<p>Log::Report::Dispatcher::Try - capture all reports as exceptions</p>\n",
         "type" : "chapter",
         "id" : "id1022",
         "name" : "NAME",
         "level" : 1
      },
      "id95" : {
         "name" : "Interpolation: Serialization",
         "level" : 2,
         "path" : "DETAILS/Interpolation: Serialization",
         "id" : "id95",
         "intro" : "<p>The 'interpolation' functions have named VARIABLES to be filled-in, but\nalso additional OPTIONS.  To distinguish between the OPTIONS and VARIABLES\n(both a list of key-value pairs), the keys of the OPTIONS start with\nan underscore <code>_</code>.  As result of this, please avoid the use of keys\nwhich start with an underscore in variable names.  On the other hand,\nyou are allowed to interpolate OPTION values in your strings.</p>\n\n<p>There is no way of checking beforehand whether you have provided all\nvalues to be interpolated in the translated string.  When you refer to\nvalue which is missing, it will be interpreted as <code>undef</code>.</p>\n\n<ul>\n\n\n\n<p><li>strings<br />\nSimple scalar values are interpolated \"as is\"</p>\n\n\n\n<p><li>CODE<br />\nWhen a value is passed as CODE reference, that function will get called\nto return the value to be filled in.\nFor interpolating, the following rules apply:</p>\n\n\n\n<p><li>SCALAR<br />\nTakes the value where the scalar reference points to.</p>\n\n\n\n<p><li>ARRAY<br />\nAll members will be interpolated with <code>,␣</code> between the elements.\nAlternatively (maybe nicer), you can pass an interpolation parameter\nvia the <code>_join</code> OPTION.</p>\n<pre>\n  printi \"matching files: {files}\", files =&gt; \\@files, _join =&gt; ', '\n</pre>\n\n\n\n<p><li>HASH<br />\nBy default, HASHes are interpolated with sorted keys,</p>\n<pre>\n  $key =&gt; $value, $key2 =&gt; $value2, ...\n</pre>\n\n<p>There is no quoting on the keys or values (yet).  Usually, this will\nproduce an ugly result anyway.</p>\n\n\n\n<p><li>Objects<br />\nWith the <code>serialization</code> parameter, you can overrule the interpolation\nof above defaults, but also add rules for your own objects.  By default,\nobjects get stringified.</p>\n<pre>\n  serialization =&gt; [ $myclass =&gt; \\&amp;name_in_reverse ]\n\n  sub name_in_reverse($$$)\n  {   my ($formatter, $object, $args) = @_;\n      # the $args are all parameters to be filled-in\n      scalar reverse $object-&gt;name;\n  }\n</pre>\n\n</ul>\n",
         "type" : "section"
      },
      "id382" : {
         "type" : "section",
         "id" : "id382",
         "nest" : [
            "id383"
         ],
         "intro" : "<p>Various template systems use different conventions for denoting strings\nto be translated.</p>\n",
         "path" : "DETAILS/Scan Patterns",
         "level" : 2,
         "name" : "Scan Patterns"
      },
      "id1111" : {
         "level" : 2,
         "name" : "File maintenance",
         "subroutines" : [
            "id1112"
         ],
         "id" : "id1111",
         "type" : "section",
         "path" : "METHODS/File maintenance"
      },
      "id668" : {
         "call" : "$obj-&gt;<b><a name=\"id668\">useless</a></b>",
         "id" : "id668",
         "intro" : "<p>[1.02] The message-id has no references anymore <b>and</b> no translations.</p>\n",
         "type" : "i_method",
         "name" : "useless"
      },
      "id1182-id905" : {
         "name" : "isDisabled",
         "extends" : "id1182",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "id" : "id1182-id905",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>"
      },
      "id1006-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id1006\">freeze</a></b>(&nbsp;%options&nbsp;)",
         "id" : "id1006-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1006\">Log::Report::Message::freeze()</a></p>",
         "type" : "i_method",
         "options" : [
            [
               "id1007-id221",
               "id1008-id221"
            ]
         ],
         "extends" : "id1006",
         "name" : "freeze"
      },
      "id941-id221" : {
         "call" : "overload <b><a name=\"id941\">'&amp;{}'</a></b>; used as function",
         "intro" : "<p>Inherited, see Log::Report::Message subroutine '&amp;{}'</p>",
         "id" : "id941-id221",
         "type" : "overload",
         "name" : "'&amp;{}'",
         "extends" : "id941"
      },
      "id781" : {
         "intro" : "<p>Log::Report::Dispatcher::Log4perl - send messages to Log::Log4perl back-end</p>\n",
         "type" : "chapter",
         "id" : "id781",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id1075" : {
         "name" : "callback",
         "value" : "&lt;required&gt;",
         "id" : "id1075",
         "type" : "default"
      },
      "id682" : {
         "name" : "nr_plurals",
         "type" : "option",
         "intro" : "<p>The number of translations each of the translation with plural form\nneed to have.</p>\n",
         "id" : "id682",
         "params" : "INTEGER"
      },
      "id1208-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "type" : "option",
         "id" : "id1208-id1021",
         "params" : "INTEGER",
         "extends" : "id1208",
         "name" : "abstract"
      },
      "id294" : {
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS",
         "subroutines" : [
            "id295"
         ],
         "type" : "chapter",
         "id" : "id294"
      },
      "id534" : {
         "name" : "cleanup",
         "call" : "$obj-&gt;<b><a name=\"id534\">cleanup</a></b>(&nbsp;%options&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Remove all references.</p>\n",
         "id" : "id534",
         "options" : [
            [
               "id535",
               "id536"
            ]
         ]
      },
      "id589" : {
         "call" : "$class-&gt;<b><a name=\"id589\">new</a></b>(&nbsp;%options&nbsp;)",
         "id" : "id589",
         "type" : "c_method",
         "options" : [
            [
               "id590",
               "id591"
            ]
         ],
         "name" : "new"
      },
      "id368" : {
         "name" : "pattern",
         "type" : "i_method",
         "id" : "id368",
         "call" : "$obj-&gt;<b><a name=\"id368\">pattern</a></b>"
      },
      "id81" : {
         "params" : "STRING|OBJECT",
         "intro" : "<p>Text as STRING prepended before <tt class=\"parameter\">$format</tt>, without interpolation.  This\nmay also be an <tt class=\"parameter\">OBJECT</tt> which gets stringified, but variables not filled-in.</p>\n",
         "type" : "option",
         "id" : "id81",
         "name" : "_prepend"
      },
      "id799" : {
         "call" : "$obj-&gt;<b><a name=\"id799\">reasonToLevel</a></b>(&nbsp;$reason&nbsp;)",
         "id" : "id799",
         "intro" : "<p>Returns a level which is understood by Log::Dispatch, based on\na translation table.  This can be changed with <a class=\"jump\" href=\"id790\">new(to_level)</a>.</p>\n",
         "type" : "i_method",
         "examples" : [
            "id800"
         ],
         "name" : "reasonToLevel"
      },
      "id1292" : {
         "nest" : [
            "id1293",
            "id1294"
         ],
         "id" : "id1292",
         "type" : "chapter",
         "level" : 1,
         "name" : "DETAILS",
         "path" : "DETAILS"
      },
      "id231" : {
         "name" : "reason",
         "call" : "$obj-&gt;<b><a name=\"id231\">reason</a></b>(&nbsp;[$reason]&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Get or set the reason of a message.</p>\n",
         "id" : "id231"
      },
      "id591" : {
         "name" : "rules",
         "type" : "default",
         "value" : "{}",
         "id" : "id591"
      },
      "id1295" : {
         "level" : 3,
         "name" : "Addition information",
         "id" : "id1295",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Addition information"
      },
      "id989-id221" : {
         "name" : "msgctxt",
         "extends" : "id989",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id989\">Log::Report::Message::msgctxt()</a></p>",
         "type" : "i_method",
         "id" : "id989-id221",
         "call" : "$obj-&gt;<b><a name=\"id989\">msgctxt</a></b>"
      },
      "id749" : {
         "name" : "translations",
         "intro" : "<p>Returns a list with all defined <a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a> objects. When\nthe string <tt class=\"parameter\">$active</tt> is given as parameter, only objects which have\nreferences are returned.</p>\n",
         "diagnostics" : [
            "id750"
         ],
         "call" : "$obj-&gt;<b><a name=\"id749\">translations</a></b>(&nbsp;[$active]&nbsp;)",
         "id" : "id749",
         "type" : "i_method"
      },
      "id541" : {
         "id" : "id541",
         "type" : "error",
         "name" : "no context tags allowed in plural `$msgid'",
         "subroutine" : "id540"
      },
      "id752-id461" : {
         "subroutine" : "id751",
         "name" : "there is no Plural-Forms field in the header, but needed.",
         "extends" : "id752",
         "type" : "error",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id751\">Log::Report::Lexicon::Table::pluralIndex()</a></p>",
         "id" : "id752-id461"
      },
      "id804" : {
         "id" : "id804",
         "intro" : "<p>Get messages to users and logs.  <code>Log::Report</code> combines three tasks\nwhich are closely related in one:</p>\n\n<ol>\n<li>logging (like Log::Log4Perl and syslog), and<br />\n<li>exceptions (like 'error' and 'info'), with<br />\n<li>translations (like <code>gettext</code> and Locale::TextDomain)<br />\n</ol>\n\n<p>You <b>do not need</b> to use this module for all three reasons: pick what\nyou need now, maybe extend the usage later.  Read more about how and\nwhy in the <a class=\"jump\" href=\"id887\">DETAILS</a> section, below.  Especially, you should B<read\nabout the REASON parameter>.</p>\n\n<p>Also, you can study this module swiftly via the article published in\nthe German Perl <code>$foo-magazine</code>.  English version:\n<a href=\"https://perl.overmeer.net/log-report/papers/201306-PerlMagazine-article-en.html\" target=\"_blank\">https://perl.overmeer.net/log-report/papers/201306-PerlMagazine-article-en.html</a></p>\n",
         "type" : "chapter",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id1072" : {
         "path" : "METHODS/Constructors",
         "id" : "id1072",
         "type" : "section",
         "subroutines" : [
            "id1073"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id335" : {
         "name" : "filename_match",
         "id" : "id335",
         "value" : "qr/\\.tt2?$/",
         "type" : "default"
      },
      "id937" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  # Objects created by Log::Report's __ functions\n  # Full feature description in the DETAILS section\n\n  # no interpolation\n  __\"Hello, World\";\n\n  # with interpolation\n  __x\"age {years}\", years =&gt; 12;\n\n  # interpolation for one or many\n  my $nr_files = @files;\n  __nx\"one file\", \"{_count} files\", $nr_files;\n  __nx\"one file\", \"{_count} files\", \\@files;\n\n  # interpolation of arrays\n  __x\"price-list: {prices%.2f}\", prices =&gt; \\@prices, _join =&gt; ', ';\n\n  # white-spacing on msgid preserved\n  print __\"\\tCongratulations,\\n\";\n  print \"\\t\", __(\"Congratulations,\"), \"\\n\";  # same\n\n  # Object serialization support\n  my $clone = Log::Report::Message-&gt;thaw($msg-&gt;freeze);\n</pre>\n",
         "type" : "chapter",
         "id" : "id937",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id303" : {
         "type" : "chapter",
         "id" : "id303",
         "nest" : [
            "id304",
            "id317",
            "id320",
            "id336",
            "id337",
            "id338"
         ],
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1
      },
      "id1347" : {
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Dispatcher::Try\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "id" : "id1347",
         "type" : "chapter",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id635" : {
         "value" : "<code>[]</code>",
         "type" : "default",
         "id" : "id635",
         "name" : "format"
      },
      "id991-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id991\">classes</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id991\">Log::Report::Message::classes()</a></p>",
         "id" : "id991-id221",
         "name" : "classes",
         "extends" : "id991"
      },
      "id603" : {
         "nest" : [
            "id604",
            "id605"
         ],
         "id" : "id603",
         "type" : "chapter",
         "level" : 1,
         "name" : "DETAILS",
         "intro" : "<p>The \"contexts\" concept in (GNU's version of) gettext, has a\nvery restricted purpose: to separate two (accidental) uses of the\nsame message-id, under different circumstances.  The same msgid may\ntranslated diffently in one file or the other.</p>\n\n<p>For instance, two libraries used in the same application, or two\ncomponentent within a single library both want to used the same\ndefault text (which usually is very short)</p>\n<pre>\n  char * t1 = pgettext('interface', 'None');\n  char * t2 = pgettext('selections', 'None');\n</pre>\n\n<p>Some translation setups use the library name consequently as msgctxt.\nBut, the name \"context\" is pretending much more power than the gettext\nlibraries are capable of: it usually only behaves like a namespace.</p>\n",
         "path" : "DETAILS"
      },
      "id1185-id905" : {
         "name" : "close",
         "extends" : "id1185",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1185\">Log::Report::Dispatcher::close()</a></p>",
         "id" : "id1185-id905",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>"
      },
      "id244" : {
         "intro" : "<p>Returns the <a class=\"jump\" href=\"id299\">Log::Report::Template</a> object which is performing the\ntemplate processing.  This object gets instantiated based on values\nfound in the Dancer2 configuration file.</p>\n",
         "type" : "i_method",
         "id" : "id244",
         "call" : "$obj-&gt;<b><a name=\"id244\">tt</a></b>",
         "name" : "tt"
      },
      "id678" : {
         "name" : "textdomain",
         "type" : "option",
         "intro" : "<p>The package name, used in the directory structure to store the\nPO files.</p>\n",
         "id" : "id678",
         "params" : "STRING"
      },
      "id1105" : {
         "name" : "dispatcher $name needs parameter 'to'",
         "subroutine" : "id1097",
         "type" : "error",
         "id" : "id1105"
      },
      "id1025" : {
         "level" : 1,
         "name" : "OVERLOADED",
         "id" : "id1025",
         "type" : "chapter",
         "subroutines" : [
            "id1027",
            "id1026"
         ],
         "path" : "OVERLOADED"
      },
      "id687" : {
         "id" : "id687",
         "value" : "&lt;constructed from nr_plurals and plural_alg&gt;",
         "type" : "default",
         "name" : "plural_forms"
      },
      "id985" : {
         "name" : "append",
         "intro" : "<p>Returns the string or <a class=\"jump\" href=\"id935\">Log::Report::Message</a> object which is appended\nafter this one.  Usually <code>undef</code>.</p>\n",
         "id" : "id985",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id985\">append</a></b>"
      },
      "id378" : {
         "subroutine" : "id370",
         "name" : "unknown pattern $pattern.",
         "id" : "id378",
         "type" : "error"
      },
      "id131" : {
         "intro" : "<p>Run-modes are explained in <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>.</p>\n",
         "type" : "section",
         "id" : "id131",
         "subroutines" : [
            "id132",
            "id133",
            "id135",
            "id134"
         ],
         "path" : "FUNCTIONS/Modes",
         "level" : 2,
         "name" : "Modes"
      },
      "id387" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  my $templater = Log::Report::Template-&gt;new(...);\n  my $domain    = $templater-&gt;addTextdomain(%options);\n</pre>\n",
         "type" : "chapter",
         "id" : "id387",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id1169-id1066" : {
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "id" : "id1169-id1066",
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3",
         "extends" : "id1169",
         "name" : "mode"
      },
      "id550" : {
         "level" : 1,
         "name" : "NAME",
         "id" : "id550",
         "intro" : "<p>Log::Report::Win32Locale - unix/windows locales</p>\n",
         "type" : "chapter",
         "path" : "NAME"
      },
      "id696" : {
         "name" : "charset",
         "params" : "STRING",
         "intro" : "<p>The character-set which is used for the file.  You must specify\nthis explicitly.</p>\n",
         "type" : "option",
         "id" : "id696"
      },
      "id194" : {
         "name" : "warning",
         "type" : "function",
         "id" : "id194",
         "call" : "<b><a name=\"id194\">warning</a></b>(&nbsp;$message&nbsp;)"
      },
      "id396" : {
         "name" : "lexicon",
         "params" : "DIRECTORY",
         "id" : "id396",
         "type" : "option"
      },
      "id523" : {
         "value" : "'utf-8'",
         "id" : "id523",
         "type" : "default",
         "name" : "charset"
      },
      "id1166" : {
         "value" : "<code>depend on mode</code>",
         "id" : "id1166",
         "type" : "default",
         "name" : "accept"
      },
      "id1206-id1066" : {
         "extends" : "id1206",
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "type" : "option",
         "id" : "id1206-id1066",
         "params" : "INTEGER"
      },
      "id615" : {
         "nest" : [
            "id616",
            "id637",
            "id656"
         ],
         "type" : "chapter",
         "id" : "id615",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id676" : {
         "params" : "STRING",
         "intro" : "<p>The charset to be used for the createed file.  It is unwise to use anything\nelse than 'UTF-8', but allowed.  Before [1.09] this option was required.</p>\n",
         "type" : "option",
         "id" : "id676",
         "name" : "charset"
      },
      "id1147" : {
         "level" : 2,
         "name" : "Translating",
         "subroutines" : [
            "id172-id1122",
            "id1151",
            "id1153",
            "id1152",
            "id1148"
         ],
         "id" : "id1147",
         "type" : "section",
         "path" : "METHODS/Translating"
      },
      "id561" : {
         "chapters" : [
            "id562",
            "id1353",
            "id563",
            "id564",
            "id565"
         ],
         "name" : "Log::Report::Lexicon::POTcompact",
         "version" : "1.16",
         "is_pure_pod" : false,
         "distribution" : "Log-Report-Lexicon",
         "package" : "Log::Report::Lexicon::POTcompact",
         "id" : "id561",
         "inheritance" : {
            "extends" : [
               "Log::Report::Lexicon::Table"
            ]
         },
         "title" : "use translations from a POT file"
      },
      "id917" : {
         "type" : "option",
         "intro" : "<p>The possible values for this depend (a little) on the system.  POSIX\nonly defines <code>user</code>, and <code>local0</code> up to <code>local7</code>.</p>\n",
         "id" : "id917",
         "params" : "$facility",
         "name" : "facility"
      },
      "id315" : {
         "name" : "textdomain_class",
         "type" : "default",
         "value" : "<code>Log::Report::Template::Textdomain</code>",
         "id" : "id315"
      },
      "id376" : {
         "name" : "need pattern to scan for, either via new() or process().",
         "subroutine" : "id370",
         "id" : "id376",
         "type" : "error"
      },
      "id769" : {
         "id" : "id769",
         "intro" : "<p>Restrict the messages which are passed through based on the <tt class=\"parameter\">$level</tt>,\nso after the reason got translated into a Log::Dispatch compatible\nLEVEL.  The default will use <a class=\"jump\" href=\"id801\">Log::Report</a> restrictions only.</p>\n",
         "type" : "option",
         "params" : "$level",
         "name" : "min_level"
      },
      "id1209" : {
         "id" : "id1209",
         "value" : "1",
         "type" : "default",
         "name" : "abstract"
      },
      "id174" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Log::Report::Minimal - simulate Log::Report functions simple</p>\n",
         "id" : "id174"
      },
      "id698" : {
         "name" : "cannot read in $cs from file $fn: $!",
         "subroutine" : "id695",
         "id" : "id698",
         "type" : "fault"
      },
      "id1189-id1066" : {
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "id" : "id1189-id1066",
         "type" : "ci_method",
         "extends" : "id1189",
         "name" : "addSkipStack"
      },
      "id50" : {
         "type" : "chapter",
         "intro" : "<p>This module inserts values into (format) strings.  It provides <code>printf()</code>\nand <code>sprintf()</code> alternatives via both an object oriented and a functional\ninterface.</p>\n\n<p>Read in the <a class=\"jump\" href=\"id89\">DETAILS</a> chapter below, why this module provides a better\nalternative for <code>printf()</code>.  Also, some extended <b>examples</b> can be\nfound down there.  Take a look at them first, when you start using this\nmodule!</p>\n",
         "id" : "id50",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id264" : {
         "id" : "id264",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id264\">assert</a></b>",
         "name" : "assert"
      },
      "id1186" : {
         "type" : "i_method",
         "intro" : "<p>This method is called by <a class=\"jump\" href=\"id807\">Log::Report::report()</a> and should not be called\ndirectly.  Internally, it will call <a class=\"jump\" href=\"id1187\">translate()</a>, which does most of\nthe work.</p>\n",
         "id" : "id1186",
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)",
         "name" : "log"
      },
      "id398" : {
         "name" : "templater",
         "type" : "option",
         "id" : "id398",
         "params" : "Log::Report::Template-object"
      },
      "id1176-id1217" : {
         "type" : "error",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1164\">Log::Report::Dispatcher::new()</a></p>",
         "id" : "id1176-id1217",
         "subroutine" : "id1164",
         "extends" : "id1176",
         "name" : "illegal format_reason '$format' for dispatcher"
      },
      "id1170-id1021" : {
         "name" : "mode",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "extends" : "id1170",
         "value" : "'NORMAL'",
         "id" : "id1170-id1021",
         "type" : "default"
      },
      "id857" : {
         "name" : "N__n",
         "examples" : [
            "id858"
         ],
         "call" : "<b><a name=\"id857\">N__n</a></b>(&nbsp;$single_msgid, $plural_msgid&nbsp;)",
         "id" : "id857",
         "intro" : "<p>Label to indicate that the two MSGIDs are related, the first as\nsingle, the seconds as its plural.  Only used to find the text\nfragments to be translated.  The function itself does nothing.</p>\n",
         "type" : "function"
      },
      "id1196-id1066" : {
         "params" : "STRING",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id1066",
         "type" : "option",
         "name" : "filename",
         "extends" : "id1196"
      },
      "id971-id221" : {
         "extends" : "id971",
         "id" : "id971-id221",
         "value" : "<code>undef</code>",
         "type" : "default",
         "name" : "_to",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id970\">Log::Report::Message::new(_to)</a></p>"
      },
      "id1199" : {
         "name" : "linenr",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id1199"
      },
      "id111" : {
         "intro" : "<p>In pure Template Toolkit, you would write</p>\n<pre>\n  # in your TT-template\n  &lt;div&gt;Username: [% username | html %]&lt;/div>\n  # in your code\n  username =&gt; $user-&gt;name,\n</pre>\n\n<p>With plain <a class=\"jump\" href=\"id47\">String::Print</a> with output encoding enabled, you can do:</p>\n<pre>\n  # in your TT-template\n  &lt;div&gt;[% show_username %]&lt;/div>\n  # in your code with encodeFor('HTML')\n  show_username =&gt; printi(\"Username: {user}\", user =&gt; $user-&gt;name),\n  # or\n  show_username =&gt; printp(\"Username: %s\", $user-&gt;name),\n</pre>\n\n<p>That does not look very efficient, however it changes for the good when\nthis is combined with <a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a> (translations)  You can\neither do:</p>\n<pre>\n  # in your TT-template\n  &lt;div&gt;[% show_username %]&lt;/div>\n  # in your code with encodeFor('HTML')\n  show_username =&gt; __x(\"Username: {user}\", user =&gt; $user-&gt;name),\n</pre>\n\n<p>Shorter:</p>\n<pre>\n  # in your TT-template with encodeFor('HTML')\n  &lt;div&gt;[% loc(\"Username: {user}\", user =&gt; username) %]&lt;/div>\n  # in your code\n  username =&gt; $user-&gt;name,\n</pre>\n\n<p>Even shorter:</p>\n<pre>\n  # in your TT-template with encodeFor('HTML')\n  &lt;div&gt;[% loc(\"Username: {user.name}\", user =&gt; userobj) %]&lt;/div>\n  # in your code\n  userobj =&gt; $user,\n</pre>\n\n<p>Shortest:</p>\n<pre>\n  # in your TT-template with encodeFor('HTML')\n  &lt;div&gt;[% loc(\"Username: {user.name}\") %]&lt;/div>\n  # in your code\n  user =&gt; $user,\n</pre>\n\n<p>Shorter that the original, and translations for free!\nMore examples in <a class=\"jump\" href=\"id299\">Log::Report::Template</a>.</p>\n",
         "id" : "id111",
         "type" : "subsection",
         "path" : "DETAILS/Output encoding/Example with Log::Report::Template",
         "level" : 3,
         "name" : "Example with Log::Report::Template"
      },
      "id62" : {
         "name" : "defaults",
         "type" : "option",
         "intro" : "<p>[1.00] change the defaults for some modifiers.  This is a <tt class=\"parameter\">%map</tt> of\nmodifier name to HASH with modifier specific settings.</p>\n",
         "id" : "id62",
         "params" : "\\%map"
      },
      "id1165-id905" : {
         "id" : "id1165-id905",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "type" : "option",
         "params" : "$reasons|\\@reasons",
         "extends" : "id1165",
         "name" : "accept"
      },
      "id1305" : {
         "subroutines" : [
            "id751-id461",
            "id749-id461",
            "id755-id461",
            "id753-id461",
            "id748-id461",
            "id756-id461"
         ],
         "id" : "id1305",
         "type" : "subsection",
         "path" : "METHODS/Managing PO's/Administration",
         "level" : 3,
         "name" : "Administration"
      },
      "id521-id493" : {
         "type" : "default",
         "id" : "id521-id493",
         "value" : "&lt;required&gt;",
         "extends" : "id521",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id520\">Log::Report::Extract::new(lexicon)</a></p>",
         "name" : "lexicon"
      },
      "id1191-id1217" : {
         "id" : "id1191-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "name" : "skipStack",
         "extends" : "id1191"
      },
      "id666" : {
         "subroutine" : "id663",
         "name" : "too many plurals for '$msgid': $got > $expect.",
         "type" : "warning",
         "id" : "id666"
      },
      "id900" : {
         "name" : "Translation",
         "level" : 3,
         "path" : "DETAILS/Interpolation via formats/Translation",
         "intro" : "<p>Translating is optional.</p>\n\n<p>Distribution <a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a> handles translations.  It will help\nyou manage all <a class=\"jump\" href=\"id847\">__x()</a> (and friends) format strings in GNU's PO file\nformat (<i class=\"filename\">https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html</i>)</p>\n\n<p>With <a class=\"jump\" href=\"id299\">Log::Report::Template</a>, you can use <a class=\"jump\" href=\"id801\">Log::Report</a> with translations\nin various website template systems.</p>\n\n<p>Then, <a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a> brings <a class=\"jump\" href=\"id801\">Log::Report</a> with exceptions\nand translations to the Dancer2 web framework.</p>\n",
         "id" : "id900",
         "type" : "subsection"
      },
      "id912" : {
         "name" : "format_reason",
         "type" : "default",
         "value" : "'IGNORE'",
         "id" : "id912"
      },
      "id1302" : {
         "level" : 3,
         "name" : "Translation",
         "type" : "subsection",
         "id" : "id1302",
         "subroutines" : [
            "id716",
            "id715"
         ],
         "path" : "METHODS/Managing PO's/Translation"
      },
      "id1314" : {
         "level" : 3,
         "name" : "Addition information",
         "type" : "subsection",
         "id" : "id1314",
         "path" : "DETAILS/Processing the message/Addition information"
      },
      "id164" : {
         "call" : "$obj-&gt;<b><a name=\"id164\">format</a></b>",
         "type" : "i_method",
         "intro" : "<p>Returns the CODE which implements the formatting.  It needs to be called with a\nmsgid and a HASH with arguments, usually via <a class=\"jump\" href=\"id172\">interpolate()</a>.</p>\n",
         "id" : "id164",
         "name" : "format"
      },
      "id366" : {
         "path" : "METHODS/Attributes",
         "id" : "id366",
         "type" : "section",
         "subroutines" : [
            "id528-id354",
            "id529-id354",
            "id531-id354",
            "id530-id354",
            "id527-id354",
            "id368",
            "id367"
         ],
         "name" : "Attributes",
         "level" : 2
      },
      "id1174-id1066" : {
         "name" : "charset",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "extends" : "id1174",
         "id" : "id1174-id1066",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id779" : {
         "call" : "$obj-&gt;<b><a name=\"id779\">reasonToLevel</a></b>(&nbsp;$reason&nbsp;)",
         "intro" : "<p>Returns a level which is understood by Log::Dispatch, based on\na translation table.  This can be changed with <a class=\"jump\" href=\"id767\">new(to_level)</a>.</p>\n",
         "id" : "id779",
         "type" : "i_method",
         "name" : "reasonToLevel"
      },
      "id1193-id1021" : {
         "id" : "id1193-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "options" : [
            [
               "id1208-id1021",
               "id1209-id1021"
            ],
            [
               "id1200-id1021",
               "id1201-id1021"
            ],
            [
               "id1196-id1021",
               "id1197-id1021"
            ],
            [
               "id1198-id1021",
               "id1199-id1021"
            ],
            [
               "id1204-id1021",
               "id1205-id1021"
            ],
            [
               "id1206-id1021",
               "id1207-id1021"
            ],
            [
               "id1194-id1021",
               "id1195-id1021"
            ],
            [
               "id1202-id1021",
               "id1203-id1021"
            ]
         ],
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)",
         "extends" : "id1193",
         "name" : "stackTraceLine"
      },
      "id571" : {
         "type" : "fault",
         "id" : "id571",
         "name" : "cannot read in $charset from file $fn: $!",
         "subroutine" : "id567"
      },
      "id852" : {
         "id" : "id852",
         "intro" : "<p>It depends on the value of <tt class=\"parameter\">$count</tt> (and the selected language) which\ntext will be displayed.  See details in <a class=\"jump\" href=\"id850\">__n()</a>.  After translation,\nthe VARIABLES will be filled-in.</p>\n\n<p>The <tt class=\"parameter\">PAIRS</tt> are options for <a class=\"jump\" href=\"id945\">Log::Report::Message::new()</a> and variables\nto be filled in.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id852\">__nx</a></b>(&nbsp;$msgid, $plural_msgid, $count, PAIRS&nbsp;)",
         "examples" : [
            "id853"
         ],
         "name" : "__nx"
      },
      "id1197-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "name" : "filename",
         "id" : "id1197-id1091",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "extends" : "id1197"
      },
      "id1204-id1217" : {
         "name" : "max_line",
         "extends" : "id1204",
         "params" : "INTEGER",
         "id" : "id1204-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "type" : "option"
      },
      "id274" : {
         "call" : "$obj-&gt;<b><a name=\"id274\">success</a></b>",
         "id" : "id274",
         "intro" : "<p>This is a special additional type, equivalent to <code>notice</code>.  The difference is\nthat messages using this keyword will have the class <code>success</code> added, which\ncan be used to color the messages differently to the end user. For example,\n<a href=\"https://metacpan.org/dist/Dancer2_Plugin_LogReport_Message_bootstrap_color\">manual Dancer2::Plugin::LogReport::Message#bootstrap_color</a> uses this to display the\nmessage in green.</p>\n",
         "type" : "i_method",
         "name" : "success"
      },
      "id1201-id1217" : {
         "type" : "default",
         "id" : "id1201-id1217",
         "value" : "&lt;required&gt;",
         "extends" : "id1201",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "name" : "call"
      },
      "id211" : {
         "id" : "id211",
         "type" : "section",
         "subroutines" : [
            "id212"
         ],
         "path" : "FUNCTIONS/Configuration",
         "level" : 2,
         "name" : "Configuration"
      },
      "id648" : {
         "call" : "$obj-&gt;<b><a name=\"id648\">removeReferencesTo</a></b>(&nbsp;$filename&nbsp;)",
         "intro" : "<p>Remove all the references to the indicate <tt class=\"parameter\">$filename</tt> from the list.  Returns\nthe number of refs left.</p>\n",
         "id" : "id648",
         "type" : "i_method",
         "name" : "removeReferencesTo"
      },
      "id484" : {
         "type" : "error",
         "id" : "id484",
         "name" : "cannot detect charset in $fn.",
         "subroutine" : "id467"
      },
      "id439" : {
         "subroutine" : "id438",
         "name" : "unknown translation table extension '$ext' in $file.",
         "type" : "error",
         "id" : "id439"
      },
      "id348" : {
         "name" : "Translation into HTML",
         "level" : 3,
         "path" : "DETAILS/Supported syntax/Translation into HTML",
         "intro" : "<p>Usually, when data is passed from the program's internal to the template,\nit should get encoded into HTML to escape some characters.  Typical TT\ncode:</p>\n<pre>\n  Title: [% title | html %]\n</pre>\n\n<p>When your insert is produced by the localizer, you can do this as well\n(set <code>template_syntax</code> to 'UNKNOWN' first)</p>\n<pre>\n  [% loc(\"Title: {t}\", t =&gt; title) | html %]\n</pre>\n\n<p>The default TT syntax is 'HTML', which will circumvent the need to\nuse the html filter.  In that default case, you only say:</p>\n<pre>\n  [% loc(\"Title: {t}\", t =&gt; title) %]\n  [% loc(\"Title: {title}\") %]  # short form, see previous section\n</pre>\n\n<p>When the title is already escaped for HTML, you can circumvent that\nby using tags which end on 'html':</p>\n<pre>\n  [% loc(\"Title: {t_html}\", t_html =&gt; title) %]\n\n  [% SET title_html = html(title) %]\n  [% loc(\"Title: {title_html}\") %]\n</pre>\n",
         "type" : "subsection",
         "id" : "id348"
      },
      "id83" : {
         "name" : "_append",
         "intro" : "<p>Text as STRING appended after <tt class=\"parameter\">$format</tt>, without interpolation.</p>\n",
         "type" : "option",
         "id" : "id83",
         "params" : "STRING|OBJECT"
      },
      "id1203-id1021" : {
         "id" : "id1203-id1021",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "extends" : "id1203",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "name" : "params"
      },
      "id961-id221" : {
         "name" : "_append",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id960\">Log::Report::Message::new(_append)</a></p>",
         "extends" : "id961",
         "id" : "id961-id221",
         "type" : "default",
         "value" : "<code>undef</code>"
      },
      "id1207-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "name" : "max_params",
         "type" : "default",
         "id" : "id1207-id1091",
         "value" : "8",
         "extends" : "id1207"
      },
      "id1194-id1217" : {
         "extends" : "id1194",
         "name" : "package",
         "id" : "id1194-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "type" : "option",
         "params" : "CLASS"
      },
      "id1180-id780" : {
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "id" : "id1180-id780",
         "type" : "i_method",
         "extends" : "id1180",
         "name" : "type"
      },
      "id514" : {
         "level" : 1,
         "name" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Log::Report::Extract - Collect translatable strings</p>\n",
         "id" : "id514",
         "path" : "NAME"
      },
      "id1171-id1066" : {
         "extends" : "id1171",
         "name" : "format_reason",
         "id" : "id1171-id1066",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "type" : "option",
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE"
      },
      "id1311" : {
         "path" : "DETAILS",
         "level" : 1,
         "name" : "DETAILS",
         "id" : "id1311",
         "type" : "chapter",
         "nest" : [
            "id1312",
            "id1313"
         ]
      },
      "id1195" : {
         "name" : "package",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id1195"
      },
      "id866" : {
         "path" : "FUNCTIONS/Configuration",
         "id" : "id866",
         "type" : "section",
         "subroutines" : [
            "id867",
            "id883",
            "id882"
         ],
         "name" : "Configuration",
         "level" : 2
      },
      "id163" : {
         "name" : "isConfigured",
         "type" : "i_method",
         "id" : "id163",
         "call" : "$obj-&gt;<b><a name=\"id163\">isConfigured</a></b>"
      },
      "id1061" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  use MojoX::Log::Report;\n  my $log = MojoX::Log::Report-&gt;new(%options);\n  $app-&gt;log($log);  # install logger in the Mojo::App\n</pre>\n",
         "type" : "chapter",
         "id" : "id1061",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id273" : {
         "call" : "$obj-&gt;<b><a name=\"id273\">panic</a></b>",
         "type" : "i_method",
         "id" : "id273",
         "name" : "panic"
      },
      "id652" : {
         "call" : "$obj-&gt;<b><a name=\"id652\">format</a></b>(&nbsp;$language | &lt;PAIRS|ARRAY|HASH&gt;&nbsp;)",
         "intro" : "<p>When one <tt class=\"parameter\">$language</tt> is specified, it looks whether a \"language-format\" or\n\"no-language-format\" is present in the line of FLAGS.  This will return\n<code>1</code> (<code>true</code>) in the first case, <code>0</code> (<code>false</code>) in the second case.  It will\nreturn <code>undef</code> (also <code>false</code>) in case that both are not present.</p>\n\n<p>You can also specify <tt class=\"parameter\">PAIRS</tt>: the key is a language name, and the\nvalue is either <code>0</code>, <code>1</code>, or <code>undef</code>.</p>\n",
         "id" : "id652",
         "type" : "i_method",
         "name" : "format",
         "examples" : [
            "id653"
         ]
      },
      "id407" : {
         "name" : "lexicon",
         "id" : "id407",
         "intro" : "<p>Directory where the translation tables are kept.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id407\">lexicon</a></b>"
      },
      "id1309" : {
         "level" : 3,
         "name" : "Addition information",
         "id" : "id1309",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Addition information"
      },
      "id751" : {
         "intro" : "<p>Returns the msgstr index used to translate a value of <tt class=\"parameter\">$count</tt>.</p>\n",
         "name" : "pluralIndex",
         "call" : "$obj-&gt;<b><a name=\"id751\">pluralIndex</a></b>(&nbsp;$count&nbsp;)",
         "diagnostics" : [
            "id752"
         ],
         "type" : "i_method",
         "id" : "id751"
      },
      "id1169-id905" : {
         "extends" : "id1169",
         "name" : "mode",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "type" : "option",
         "id" : "id1169-id905",
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3"
      },
      "id559" : {
         "name" : "ms_install_codepage_id",
         "id" : "id559",
         "intro" : "<p>Returns the numeric language ID for the installed codepage language.\nThis is like <a class=\"jump\" href=\"id558\">ms_codepage_id()</a>, but refers to the codepage that was\nthe default when Windows was first installed.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id559\">ms_install_codepage_id</a></b>"
      },
      "id352" : {
         "name" : "Keeping translations up to date",
         "level" : 3,
         "path" : "DETAILS/Extracting PO-files/Keeping translations up to date",
         "intro" : "<p>You have to call <a class=\"jump\" href=\"id327\">extract()</a> when msgids have changed or added,\nto have the PO-tables updated.  The language specific tables will\nget updated automatically... look for msgids which are 'fuzzy'\n(need update)</p>\n\n<p>You may also use the external program <code>xgettext-perl</code>, which is\nshipped with the <a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a> distribution.</p>\n",
         "type" : "subsection",
         "id" : "id352"
      },
      "id98" : {
         "level" : 4,
         "name" : "POSIX modifier extension '%S'",
         "type" : "subsubsection",
         "intro" : "<p>The POSIX <code>printf()</code> does not handle unicode strings.  Perl does\nunderstand that the 's' modifier may need to insert utf8 so does not\ncount bytes but characters.  <a class=\"jump\" href=\"id85\">printi()</a> does not use characters but\n\"grapheme clusters\" via Unicode::GCString.  Now, also composed\ncharacters do work correctly.</p>\n\n<p>Additionally, you can use the <b>new 'S' conversion</b> to count in columns.\nIn fixed-width fonts, graphemes can have width 0, 1 or 2.  For instance,\nChinese characters have width 2.  When printing in fixed-width, this\n'S' is probably the better choice over 's'.  When the field does not\nspecify its width, then there is no performance penalty for using 'S'.</p>\n<pre>\n  # name right aligned, commas on same position, always\n  printp \"name: {name%20S},\\n\", name =&gt; $some_chinese;\n</pre>\n",
         "id" : "id98",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: POSIX format starts with '%'/POSIX modifier extension '%S'"
      },
      "id1205" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id1205",
         "name" : "max_line"
      },
      "id531-id493" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id531\">Log::Report::Extract::addPot()</a></p>",
         "type" : "i_method",
         "id" : "id531-id493",
         "call" : "$obj-&gt;<b><a name=\"id531\">addPot</a></b>(&nbsp;$domain, $pot, %options&nbsp;)",
         "name" : "addPot",
         "extends" : "id531"
      },
      "id848" : {
         "id" : "id848",
         "intro" : "<p>This is by far the most used message constructor.</p>\n<pre>\n  print __x\"Name {person.name}\", person =&gt; $person_obj;\n  error __x\"Too many options: max 5, got {count}\", count =&gt; $c;\n  fault __x\"Cannot open file {f}\", f =&gt; $input_filename;\n</pre>\n",
         "type" : "example",
         "name" : "how to use <code>__x()</code>\n"
      },
      "id740" : {
         "level" : 2,
         "name" : "Constructors",
         "subroutines" : [
            "id741"
         ],
         "type" : "section",
         "id" : "id740",
         "path" : "METHODS/Constructors"
      },
      "id980-id221" : {
         "extends" : "id980",
         "name" : "clone",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id980\">Log::Report::Message::clone()</a></p>",
         "type" : "i_method",
         "id" : "id980-id221",
         "call" : "$obj-&gt;<b><a name=\"id980\">clone</a></b>(&nbsp;%options, $variables&nbsp;)"
      },
      "id483" : {
         "name" : "the header is not the first entry, needed for charset in $fn.",
         "subroutine" : "id467",
         "id" : "id483",
         "type" : "error"
      },
      "id63" : {
         "name" : "defaults",
         "value" : "<code>see modifier docs</code>",
         "id" : "id63",
         "type" : "default"
      },
      "id208" : {
         "name" : "N__",
         "call" : "<b><a name=\"id208\">N__</a></b>(&nbsp;$msgid&nbsp;)",
         "id" : "id208",
         "type" : "function"
      },
      "id1185-id1066" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1185\">Log::Report::Dispatcher::close()</a></p>",
         "id" : "id1185-id1066",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>",
         "name" : "close",
         "extends" : "id1185"
      },
      "id1064" : {
         "level" : 2,
         "name" : "Constructors",
         "id" : "id1064",
         "type" : "section",
         "subroutines" : [
            "id1065"
         ],
         "path" : "METHODS/Constructors"
      },
      "id1266" : {
         "name" : "on_die",
         "value" : "'ERROR'",
         "id" : "id1266",
         "type" : "default"
      },
      "id513" : {
         "chapters" : [
            "id514",
            "id1338",
            "id515",
            "id516",
            "id517"
         ],
         "name" : "Log::Report::Extract",
         "version" : "1.16",
         "package" : "Log::Report::Extract",
         "distribution" : "Log-Report-Lexicon",
         "is_pure_pod" : false,
         "title" : "Collect translatable strings",
         "id" : "id513",
         "inheritance" : {
            "extended_by" : [
               "Log::Report::Extract::PerlPPI",
               "Log::Report::Template::Extract"
            ]
         }
      },
      "id1182-id1066" : {
         "name" : "isDisabled",
         "extends" : "id1182",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "id" : "id1182-id1066",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>"
      },
      "id173" : {
         "chapters" : [
            "id174",
            "id1359",
            "id175",
            "id176",
            "id177"
         ],
         "name" : "Log::Report::Minimal",
         "version" : "1.08",
         "is_pure_pod" : false,
         "package" : "Log::Report::Minimal",
         "distribution" : "Log-Report-Optional",
         "inheritance" : {
            "extends" : [
               "Exporter"
            ]
         },
         "id" : "id173",
         "title" : "simulate Log::Report functions simple"
      },
      "id1187-id1021" : {
         "extends" : "id1187",
         "name" : "translate",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "id" : "id1187-id1021",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)"
      },
      "id815" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id815",
         "name" : "location"
      },
      "id876" : {
         "id" : "id876",
         "intro" : "<pre>  use Log::Report mode =&gt; 3;      # '3' or 'DEBUG', no domain given\n\n  use Log::Report 'my-domain';    # in each package producing messages\n\n  use Log::Report 'my-domain',    # in one package, top of distr\n    mode            =&gt; 'VERBOSE',\n    syntax          =&gt; 'REPORT',  # report ERROR, not error()\n    translator      =&gt; Log::Report::Translator::POT-&gt;new(\n       lexicon =&gt; '/home/mine/locale', # translation tables\n    ),\n    native_language =&gt; 'nl_NL';   # untranslated msgs are Dutch\n\n  use Log::Report import =&gt; 'try';     # or ARRAY of functions\n</pre>\n",
         "type" : "example",
         "name" : "of import\n"
      },
      "id1137" : {
         "name" : "native_language",
         "id" : "id1137",
         "value" : "'en_US'",
         "type" : "default"
      },
      "id580" : {
         "type" : "i_method",
         "intro" : "<p>Lookup the translations with the <tt class=\"parameter\">$msgid</tt>.  Returns a SCALAR, when only\none translation is known, and an ARRAY where there are multiple.\nReturns <code>undef</code> when nothing about the translation is known.</p>\n",
         "id" : "id580",
         "call" : "$obj-&gt;<b><a name=\"id580\">msgid</a></b>(&nbsp;$msgid, [$msgctxt]&nbsp;)",
         "name" : "msgid"
      },
      "id898" : {
         "intro" : "<p>The simple view on live says: you 're dead when you die.  However,\nmore complex situations try to revive the dead.  Typically, the \"die\"\nis considered a terminating exception, but not terminating the whole\nprogram, but only some logical block.  Of course, a wrapper round\nthat block must decide what to do with these emerging problems.</p>\n\n<p>Java-like languages do not \"die\" but throw exceptions which contain the\ninformation about what went wrong.  Perl modules like <code>Exception::Class</code>\nsimulate this.  It's a hassle to create exception class objects for each\nemerging problem, and the same amount of work to walk through all the\noptions.</p>\n\n<p><a class=\"jump\" href=\"id801\">Log::Report</a> follows a simpler scheme.  Fatal messages will \"die\", which is\ncaught with \"eval\", just the Perl way (used invisible to you).  However,\nthe wrapper gets its hands on the message as the user has specified it:\nuntranslated, with all unprocessed parameters still at hand.</p>\n<pre>\n  try { fault __x \"cannot open file {file}\", file =&gt; $fn };\n  if($@)                         # is Log::Report::Dispatcher::Try\n  {   my $cause = $@-&gt;wasFatal;  # is Log::Report::Exception\n      $cause-&gt;throw if $cause-&gt;message-&gt;msgid =~ m/ open /;\n      # all other problems ignored\n  }\n</pre>\n\n<p>See <a class=\"jump\" href=\"id1021\">Log::Report::Dispatcher::Try</a> and <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a>.</p>\n",
         "id" : "id898",
         "type" : "subsection",
         "path" : "DETAILS/Error handling models/Exceptions",
         "level" : 3,
         "name" : "Exceptions"
      },
      "id955" : {
         "id" : "id955",
         "value" : "<code>undef</code>",
         "type" : "default",
         "name" : "_msgid"
      },
      "id1016" : {
         "intro" : "<pre>  # This tries to display the $param as useful and safe as possible,\n  # where you have totally no idea what its contents is.\n  error __x\"illegal parameter {p UNKNOWN}.\", p =&gt; $param;\n  # ---&gt; \"illegal parameter 'accidentally passed text'.\"\n  # ---&gt; \"illegal parameter Unexpected::Object::Type.\"\n\n  # fault() adds \": $!\", with $! translated when configured.\n  open my($fh), \"&lt;:encoding(utf-8)\", $filename\n  \t or fault __x\"cannot read {file}\", file =&gt; $filename;\n\n  # Auto-abbreviation\n  trace __x\"first lines: '{text EL}'\\n\", text =&gt; $t;\n  # ---&gt; \"first lines: 'This text is long, we sho⋯'.\\n\"\n\n  trace __x\"first lines: {text CHOP}\\n\", text =&gt; $t;\n  # ---&gt; \"This text is long, we [+3712 chars]\\n\"\n\n  info __x\"file {file} size {size BYTES}\\n\", file =&gt; $fn, size =&gt; -s $fn;\n  # --&gt; \"/etc/passwd size 23kB\\n\"\n\n  # HASH or object values\n  print __x\"Name: {user.first} {user.surname}\\n\", user =&gt; $login;\n</pre>\n\n<p>There are more nice standard interpolation modifiers, and you can add\nyour own.  Besides, you can add serializers which determine how\nobjects are inlined.</p>\n",
         "id" : "id1016",
         "type" : "example",
         "name" : "using format features\n"
      },
      "id357" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>This module helps maintaining the POT files which list translatable\nstrings from template files (or other flat text files) by updating the\nlist of message-ids which are kept in them.</p>\n\n<p>After initiation, the <a class=\"jump\" href=\"id370\">process()</a> method needs to be called for each file\nin the domain  and the existing PO files will get updated accordingly.</p>\n\n<p>If no translations exist yet, one <code>$textdomain.po</code> file will be\ncreated as point to start.  Copy that file into <code>$textdomain/$lang.po</code></p>\n",
         "type" : "chapter",
         "id" : "id357"
      },
      "id1214" : {
         "name" : "Filters",
         "examples" : [
            "id1215",
            "id1216"
         ],
         "level" : 3,
         "path" : "DETAILS/Processing the message/Filters",
         "intro" : "<p>With a filter, you can block or modify specific messages before\ntranslation.  There may be a wish to change the REASON of a report\nor its content.  It is not possible to avoid the exit which is\nrelated to the original message, because a module's flow depends\non it to happen.</p>\n\n<p>When there are filters defined, they will be called in order of\ndefinition.  For each of the dispatchers which are called for a\ncertain REASON (which <code>accept</code> that REASON), it is checked whether\nits name is listed for the filter (when no names where specified,\nthen the filter is applied to all dispatchers).</p>\n\n<p>When selected, the filter's CODE reference is called with four arguments:\nthe dispatcher object (a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>), the HASH-of-OPTIONS\npassed as optional first argument to <a class=\"jump\" href=\"id807\">Log::Report::report()</a>, the\nREASON, and the MESSAGE.  Returned is the new REASON and MESSAGE.\nWhen the returned REASON is <code>undef</code>, then the message will be ignored\nfor that dispatcher.</p>\n\n<p>Be warned about processing the MESSAGE: it is a <a class=\"jump\" href=\"id935\">Log::Report::Message</a>\nobject which may have a <code>prepend</code> string and <code>append</code> string or\nobject.  When the call to <a class=\"jump\" href=\"id807\">Log::Report::report()</a> contained multiple\ncomma-separated components, these will already have been joined together\nusing concatenation (see <a class=\"jump\" href=\"id1004\">Log::Report::Message::concat()</a>.</p>\n",
         "type" : "subsection",
         "id" : "id1214"
      },
      "id263" : {
         "call" : "$obj-&gt;<b><a name=\"id263\">trace</a></b>",
         "id" : "id263",
         "type" : "i_method",
         "name" : "trace"
      },
      "id1202" : {
         "name" : "params",
         "params" : "ARRAY",
         "id" : "id1202",
         "type" : "option"
      },
      "id410" : {
         "path" : "METHODS/Translating",
         "subroutines" : [
            "id172-id385",
            "id1151-id385",
            "id1153-id385",
            "id1152-id385",
            "id1148-id385",
            "id412",
            "id411"
         ],
         "type" : "section",
         "id" : "id410",
         "name" : "Translating",
         "level" : 2
      },
      "id790" : {
         "id" : "id790",
         "intro" : "<p>See <a class=\"jump\" href=\"id799\">reasonToLevel()</a>.</p>\n",
         "type" : "option",
         "params" : "ARRAY-of-PAIRS",
         "name" : "to_level"
      },
      "id1183-id1091" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "id" : "id1183-id1091",
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)",
         "extends" : "id1183",
         "name" : "needs"
      },
      "id402" : {
         "intro" : "<p>Upgrade a base class <a class=\"jump\" href=\"id1122\">Log::Report::Domain</a>-object into an Template\ndomain.</p>\n\n<p>This is a bit akward process, needed when one of the code packages\nuses the same domain as the templating system uses.  The generic domain\nconfiguration stays intact.</p>\n",
         "name" : "upgrade",
         "call" : "$class-&gt;<b><a name=\"id402\">upgrade</a></b>(&nbsp;$domain, %options&nbsp;)",
         "diagnostics" : [
            "id403"
         ],
         "type" : "c_method",
         "id" : "id402"
      },
      "id657" : {
         "name" : "fromText",
         "intro" : "<p>Parse the <tt class=\"parameter\">STRING</tt> into a new PO object.  The <tt class=\"parameter\">$where</tt> string should explain\nthe location of the <tt class=\"parameter\">STRING</tt>, to be used in error messages.</p>\n",
         "diagnostics" : [
            "id658",
            "id659",
            "id660",
            "id661",
            "id662"
         ],
         "call" : "$class-&gt;<b><a name=\"id657\">fromText</a></b>(&nbsp;STRING, [$where]&nbsp;)",
         "type" : "c_method",
         "id" : "id657"
      },
      "id1211" : {
         "level" : 2,
         "name" : "Available back-ends",
         "intro" : "<p>When a dispatcher is created (via <a class=\"jump\" href=\"id1164\">new()</a> or <a class=\"jump\" href=\"id825\">Log::Report::dispatcher()</a>),\nyou must specify the TYPE of the dispatcher.  This can either be a class\nname, which extends a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>, or a pre-defined\nabbreviation of a class name.</p>\n\n<p>Implemented are:</p>\n\n<ul>\n\n\n<p><li><a class=\"jump\" href=\"id1217\">Log::Report::Dispatcher::Perl</a> (abbreviation 'PERL')<br />\nUse Perl's own <code>print()</code>, <code>warn()</code> and <code>die()</code> to ventilate\nreports.  This is the default dispatcher.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id1091\">Log::Report::Dispatcher::File</a> (abbreviation 'FILE')<br />\nLogs the message into a file, which can either be opened by the\nclass or be opened before the dispatcher is created.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id905\">Log::Report::Dispatcher::Syslog</a> (abbreviation 'SYSLOG')<br />\nSend messages into the system's syslog infrastructure, using\nSys::Syslog.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id1066\">Log::Report::Dispatcher::Callback</a> (abbreviation 'CALLBACK')<br />\nCalls any CODE reference on receipt of each selected message, for\ninstance to send important message as email or SMS.</p>\n\n\n\n<p><li><code>Log::Dispatch::*</code><br />\nAll of the Log::Dispatch::Output extensions can be used directly.\nThe <a class=\"jump\" href=\"id760\">Log::Report::Dispatcher::LogDispatch</a> will wrap around that\nback-end.</p>\n\n\n\n<p><li><code>Log::Log4perl</code><br />\nUse the Log::Log4perl main object to write to dispatchers.  This\ninfrastructure uses a configuration file.</p>\n\n\n\n<p><li><a class=\"jump\" href=\"id1021\">Log::Report::Dispatcher::Try</a> (abbreviation 'TRY')<br />\nUsed by function <a class=\"jump\" href=\"id830\">Log::Report::try()</a>.  It collects the exceptions\nand can produce them on request.</p>\n\n</ul>\n",
         "type" : "section",
         "id" : "id1211",
         "path" : "DETAILS/Available back-ends"
      },
      "id959-id221" : {
         "extends" : "id959",
         "type" : "default",
         "id" : "id959-id221",
         "value" : "<code>undef</code>",
         "name" : "_prepend",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id958\">Log::Report::Message::new(_prepend)</a></p>"
      },
      "id82" : {
         "id" : "id82",
         "value" : "<code>undef</code>",
         "type" : "default",
         "name" : "_prepend"
      },
      "id429" : {
         "id" : "id429",
         "intro" : "<p>The <tt class=\"parameter\">$directory</tt> where the translations can be found.  See\n<a class=\"jump\" href=\"id441\">Log::Report::Lexicon::Index</a> for the expected structure of such\ndirectory.</p>\n\n<p>The default is based on the location of the module which instantiates\nthis translator.  The filename of the module is stripped from its <code>.pm</code>\nextension, and used as directory name.  Within that directory, there\nmust be a directory named <code>messages</code>, which will be the root directory\nof a <a class=\"jump\" href=\"id441\">Log::Report::Lexicon::Index</a>.</p>\n",
         "type" : "option",
         "params" : "$directory",
         "name" : "lexicons"
      },
      "id1192" : {
         "type" : "ci_method",
         "intro" : "<p>Collect the information to be displayed as line where the error occurred.</p>\n",
         "id" : "id1192",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>",
         "name" : "collectLocation"
      },
      "id1168-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "name" : "locale",
         "type" : "default",
         "id" : "id1168-id1091",
         "value" : "&lt;system locale&gt;",
         "extends" : "id1168"
      },
      "id108" : {
         "level" : 3,
         "name" : "Private modifiers",
         "type" : "subsection",
         "intro" : "<p>You may pass your own modifiers.  A modifier consists of a selector and\na CODE, which is called when the selector matches.  The selector is either\na string or a regular expression.</p>\n<pre>\n  # in Object Oriented syntax:\n  my $f = String::Print-&gt;new(\n    modifiers =&gt; [ qr/[€₤]/ =&gt; \\&amp;money ],\n  );\n\n  # in function syntax:\n  use String::Print 'printi', 'sprinti',\n    modifiers =&gt; [ qr/[€₤]/ =&gt; \\&amp;money ];\n\n  # the implementation:\n  sub money$$$$)\n  { my ($formatter, $modif, $value, $args) = @_;\n\n      $modif eq '€' ? sprintf(\"%.2f EUR\", $value+0.0001)\n    : $modif eq '₤' ? sprintf(\"%.2f GBP\", $value/1.16+0.0001)\n    :                 'ERROR';\n  }\n</pre>\n\n<p>Using <a class=\"jump\" href=\"id86\">printp()</a> makes it a little shorter, but will become quite\ncomplex when there are more parameter in one string.</p>\n<pre>\n  printi \"price: {p€}\", p =&gt; $pi;   # price: 3.14 EUR\n  printi \"price: {p₤}\", p =&gt; $pi;   # price: 2.71 GBP\n\n  printp \"price: %{€}s\", $pi;       # price: 3.14 EUR\n  printp \"price: %{₤}s\", $pi;       # price: 2.71 GBP\n</pre>\n\n<p>This is very useful in the translation context, where the translator can\nspecify abstract formatting rules.  As example, see the (GNU) gettext\nfiles, in the translation table for Dutch into English.  The translator\ntells us which currency to use in the display.</p>\n<pre>\n  msgid  \"kostprijs: {p€}\"\n  msgstr \"price: {p₤}\"\n</pre>\n\n<p>Another example.  Now, we want to add timestamps.  In this case, we\ndecide for modifier names in <code>\\w</code>, so we need a blank to separate\nthe parameter from the modifer.</p>\n",
         "id" : "id108",
         "path" : "DETAILS/Interpolation: Modifiers/Private modifiers"
      },
      "id1079" : {
         "level" : 2,
         "name" : "Logging",
         "id" : "id1079",
         "type" : "section",
         "subroutines" : [
            "id1186-id1066",
            "id1189-id1066",
            "id1188-id1066",
            "id1185-id1066",
            "id1192-id1066",
            "id1191-id1066",
            "id1193-id1066",
            "id1187-id1066"
         ],
         "path" : "METHODS/Logging"
      },
      "id430" : {
         "name" : "lexicons",
         "id" : "id430",
         "value" : "&lt;see text&gt;",
         "type" : "default"
      },
      "id922" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id922",
         "name" : "logsocket"
      },
      "id604" : {
         "path" : "DETAILS/Contexts in Log::Report",
         "type" : "section",
         "intro" : "<p>For <a class=\"jump\" href=\"id801\">Log::Report</a>, the power of \"context\" is extended with selecting\nbetween alternatives for the use of a msgid <b>on the same spot</b>.</p>\n\n<p>For instance, the gender of the user of the website determines whether\n`he' or `she' needs to be used in the translation.  In this example,\nthe gender is set as context keyword in the message:</p>\n<pre>\n  my ($name, $sex) = ('Jack', 'male');\n  print __x\"{name&lt;gender} found his key\", name =&gt; $name,\n    _context =&gt; \"gender=$sex\";\n</pre>\n\n<p>This would also be possible in traditional gettext, although probably\nrarely used.  A complication is that the scripts to maintain the po\ntables are not too smart; do not understand complex code constructs.\nProbably this would beed needed:</p>\n<pre>\n  if(sex==MALE)\n  {   printf pgettext('male', \"%s found his key\\n\", name);\n  }\n  else\n  {   printf pgettext('female', \"%s found her key\\n\", name);\n  }\n</pre>\n",
         "id" : "id604",
         "name" : "Contexts in Log::Report",
         "level" : 2
      },
      "id243" : {
         "level" : 2,
         "name" : "Attributes",
         "subroutines" : [
            "id244"
         ],
         "type" : "section",
         "id" : "id243",
         "path" : "METHODS/Attributes"
      },
      "id106" : {
         "level" : 3,
         "name" : "Modifier: CHOP or CHOP($width, [$units])",
         "intro" : "<p>[1.00] When the string is larger than <code>$width</code> columns (defaults to\n20), then chop it short and add <code>[+42]</code>: the number of character\nchopped off.  The <code>$width</code> is the size of the result string.\nThe comma is optional.</p>\n<pre>\n  \"Intro: {text CHOP(10)}\";        # Intro: 12345[+42]\n  \"Intro: {text CHOP(19 chars)}\";  # Intro: 1234578[+33 chars]\n  \"Intro: {text CHOP(19, chars)}\"; # Intro: 1234578[+33 chars]\n</pre>\n\n<p>The same effect can be reached by setting the defaults</p>\n<pre>\n  $sp-&gt;setDefaults(CHOP =&gt; +{width =&gt; 19, units =&gt; ' chars'});\n  $sp-&gt;printi(\"Intro: {text CHOP}\", text =&gt; $t); # Intro: 1234578[+33 chars]\n</pre>\n\n<p>Other defaults are <code>head</code> (<code>[</code>) and <code>tail</code> (<code>]</code>).</p>\n<pre>\n  $sp-&gt;setDefaults(CHOP =&gt; +{head =&gt; '«', tail =&gt; '»'});\n  $sp-&gt;printi(\"Intro: {text CHOP}\", text =&gt; $t); # Intro: 1234578«+12»\n</pre>\n",
         "type" : "subsection",
         "id" : "id106",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: CHOP or CHOP($width, [$units])"
      },
      "id835" : {
         "id" : "id835",
         "intro" : "<p>Short for <code>report INFO =&gt; $message</code></p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id835\">info</a></b>(&nbsp;$message&nbsp;)",
         "name" : "info"
      },
      "id1337" : {
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Domain\n   is a <a class=\"jump\" href=\"id150\">Log::Report::Minimal::Domain</a>\n\n Log::Report::Domain is extended by\n   <a class=\"jump\" href=\"id385\">Log::Report::Template::Textdomain</a>\n</pre>\n",
         "id" : "id1337",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id1188-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "id" : "id1188-id1091",
         "type" : "ci_method",
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "name" : "collectStack",
         "extends" : "id1188"
      },
      "id304" : {
         "level" : 2,
         "name" : "Constructors",
         "id" : "id304",
         "type" : "section",
         "subroutines" : [
            "id305"
         ],
         "path" : "METHODS/Constructors"
      },
      "id534-id354" : {
         "call" : "$obj-&gt;<b><a name=\"id534\">cleanup</a></b>(&nbsp;%options&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id534\">Log::Report::Extract::cleanup()</a></p>",
         "id" : "id534-id354",
         "type" : "i_method",
         "options" : [
            [
               "id535-id354",
               "id536-id354"
            ]
         ],
         "extends" : "id534",
         "name" : "cleanup"
      },
      "id803" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "id" : "id803",
         "intro" : "<pre>  # Invocation with 'mode' to get trace and verbose messages\n  use Log::Report mode =&gt; 'DEBUG';\n\n  # Usually invoked with a domain, which groups packages for translation\n  use Log::Report 'my-domain', %options;\n\n  # Interpolation syntax via String::Print\n  # First step to translations, once you need it.\n  print __x\"my name is {name}\", name =&gt; $n;  # print, so no exception\n  print __\"Hello World\\n\";      # no interpolation, optional translation\n  print __x'Hello World';       # SYNTAX ERROR: quote is alternative for ::\n\n  # Functions replacing die/warn/carp, casting exceptions but not message\n  # objects and no translation support.\n  error \"oops\";                 # exception like die(), no translation\n  -f $config or panic \"Help!\";  # alert/error/fault/info/...more\n\n  # Combined exception, interpolation, and optional translation\n  error __x\"Help!\";             # __x() creates ::Message object\n  error __x('gettext msgid', param =&gt; $value, ...)\n      if $condition;\n\n  # Also non fatal \"exceptions\" find their way to dispatchers\n  info __x\"started {pid}\", pid =&gt; $$;   # translatable\n  debug \"$i was here!\";         # you probably do not want to translate debug\n  panic \"arrghhh\";              # like Carp::Confess\n\n  # Many destinations for an exception message (may exist in parallel)\n  dispatcher PERL =&gt; 'default', # see Log::Report::Dispatcher: use die/warn\n    reasons =&gt; 'NOTICE-';       # this dispatcher is already present at start\n\n  dispatcher SYSLOG =&gt; 'syslog' # also send to syslog,\n    charset =&gt; 'iso-8859-1',    # explicit character conversions\n    locale  =&gt; 'en_US';         # overrule user's locale\n\n  dispatcher close =&gt; 'default' # stop default die/warn dispatcher\n\n  # Fill-in values, like Locale::TextDomain and gettext\n  # See Log::Report::Message section DETAILS\n  fault __x\"cannot allocate {size} bytes\", size =&gt; $size;\n  fault \"cannot allocate $size bytes\";     # no translation, ok\n  fault __x\"cannot allocate $size bytes\";  # not translatable, wrong\n\n  # Output (optionally with translation) depending on count\n  # Leading and trailing whitespace stay magically outside translation\n  # tables.  @files in scalar context.  Special parameter with _\n  print __xn\"found one file\\n\", \"found {_count} files\", @files;\n\n  # Borrow from an other text-domain (see Log::Report::Message)\n  print __x(+\"errors in {line}\", _domain =&gt; 'global', line =&gt; $line);\n\n  # catch errors (implements hidden eval/die)\n  try { error };\n  if($@) {...}      # $@ isa Log::Report::Dispatcher::Try\n  if(my $exception = $@-&gt;wasFatal)         # ::Exception object\n\n  # Language translations at the output component\n  # Translation management via Log::Report::Lexicon\n  use POSIX::1003::Locale qw/setlocale LC_ALL/;\n  setlocale(LC_ALL, 'nl_NL');\n  info __\"Hello World!\";      # in Dutch, if translation table found\n\n  # Exception classes, see Log::Report::Exception\n  try { error __x\"something\", _tags =&gt; 'parsing,schema' };\n  if($@-&gt;wasFatal-&gt;taggedWith('parsing')) ...\n</pre>\n",
         "type" : "chapter"
      },
      "id1171-id905" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "type" : "option",
         "id" : "id1171-id905",
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE",
         "extends" : "id1171",
         "name" : "format_reason"
      },
      "id1057" : {
         "name" : "class",
         "value" : "<code>undef</code>",
         "id" : "id1057",
         "type" : "default"
      },
      "id1167-id1021" : {
         "extends" : "id1167",
         "name" : "locale",
         "id" : "id1167-id1021",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "type" : "option",
         "params" : "LOCALE"
      },
      "id221" : {
         "package" : "Dancer2::Plugin::LogReport::Message",
         "distribution" : "Dancer2-Plugin-LogReport",
         "is_pure_pod" : false,
         "title" : "extended Log::Report::Message class",
         "id" : "id221",
         "inheritance" : {
            "extends" : [
               "Log::Report::Message"
            ]
         },
         "chapters" : [
            "id222",
            "id1326",
            "id223",
            "id224",
            "id1273",
            "id225",
            "id1275"
         ],
         "name" : "Dancer2::Plugin::LogReport::Message",
         "version" : "2.03"
      },
      "id909" : {
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS",
         "nest" : [
            "id910",
            "id931",
            "id933"
         ],
         "type" : "chapter",
         "id" : "id909"
      },
      "id748-id461" : {
         "name" : "add",
         "extends" : "id748",
         "call" : "$obj-&gt;<b><a name=\"id748\">add</a></b>(&nbsp;$po&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id748\">Log::Report::Lexicon::Table::add()</a></p>",
         "type" : "i_method",
         "id" : "id748-id461"
      },
      "id878" : {
         "type" : "error",
         "id" : "id878",
         "name" : "message_class $class does not extend $base",
         "subroutine" : "id867"
      },
      "id887" : {
         "path" : "DETAILS",
         "level" : 1,
         "name" : "DETAILS",
         "id" : "id887",
         "type" : "chapter",
         "nest" : [
            "id888",
            "id891",
            "id899",
            "id901"
         ]
      },
      "id770" : {
         "value" : "<code>debug</code>",
         "id" : "id770",
         "type" : "default",
         "name" : "min_level"
      },
      "id524" : {
         "id" : "id524",
         "type" : "error",
         "subroutine" : "id519",
         "name" : "extractions require an explicit lexicon directory."
      },
      "id193" : {
         "call" : "<b><a name=\"id193\">notice</a></b>(&nbsp;$message&nbsp;)",
         "id" : "id193",
         "type" : "function",
         "name" : "notice"
      },
      "id896" : {
         "name" : "the mode of a dispatcher\n",
         "type" : "example",
         "intro" : "<pre>  my $mode = dispatcher(find =&gt; 'myname')-&gt;mode;\n</pre>\n",
         "id" : "id896"
      },
      "id143" : {
         "type" : "warning",
         "id" : "id143",
         "name" : "conflict: package {pkg} in translation domain {domain1} in {file1} line {line1}, but in {domain2} in {file2} line {line2}.",
         "subroutine" : "id142"
      },
      "id1196-id905" : {
         "params" : "STRING",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id905",
         "name" : "filename",
         "extends" : "id1196"
      },
      "id625" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id625",
         "name" : "msgctxt"
      },
      "id846" : {
         "name" : "how to use <code>__()</code>\n",
         "intro" : "<pre>  print __\"Hello World\";      # translated into user's language\n  print __'Hello World';      # syntax error!\n  print __('Hello World');    # ok, translated\n  print __\"Hello\", \" World\";  # World not translated\n\n  my $s = __\"Hello World\";    # creates object, not yet translated\n  print ref $s;               # Log::Report::Message\n  print $s;                   # ok, translated\n  print $s-&gt;toString('fr');   # ok, forced into French\n</pre>\n",
         "type" : "example",
         "id" : "id846"
      },
      "id927" : {
         "intro" : "<p>[1.10] With a CODE reference you get your hands on the text before\nit gets sent to syslog.  The three parameters are: the (translated) text,\nthe related text domain object, and the message object.  You may want to\nuse context information from the latter.</p>\n\n<p>[1.19] After the three positional parameters, there may be a list of\npairs (named parameters) with additional info.  This may contain a\n<code>location</code> with an ARRAY of information produced by caller() about the\norigin of the exception.</p>\n",
         "type" : "option",
         "id" : "id927",
         "params" : "CODE",
         "name" : "format"
      },
      "id206" : {
         "id" : "id206",
         "type" : "function",
         "call" : "<b><a name=\"id206\">__nx</a></b>(&nbsp;$msgid, $plural_msgid, $count, PAIRS&nbsp;)",
         "name" : "__nx"
      },
      "id1247" : {
         "intro" : "<pre>  $e-&gt;message-&gt;concat('!!')); # will not work!\n  $e-&gt;message($e-&gt;message-&gt;concat('!!'));\n\n  $e-&gt;message(__x\"some message {xyz}\", xyz =&gt; $xyz);\n</pre>\n",
         "id" : "id1247",
         "type" : "example"
      },
      "id1029" : {
         "level" : 2,
         "name" : "Constructors",
         "subroutines" : [
            "id1030"
         ],
         "id" : "id1029",
         "type" : "section",
         "path" : "METHODS/Constructors"
      },
      "id1109" : {
         "name" : "format",
         "type" : "i_method",
         "id" : "id1109",
         "call" : "$obj-&gt;<b><a name=\"id1109\">format</a></b>"
      },
      "id325" : {
         "name" : "domains",
         "call" : "$obj-&gt;<b><a name=\"id325\">domains</a></b>",
         "intro" : "<p>Returns a LIST with all defined textdomains, unsorted.</p>\n",
         "id" : "id325",
         "type" : "i_method"
      },
      "id523-id354" : {
         "id" : "id523-id354",
         "value" : "'utf-8'",
         "type" : "default",
         "extends" : "id523",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id522\">Log::Report::Extract::new(charset)</a></p>",
         "name" : "charset"
      },
      "id1180-id760" : {
         "name" : "type",
         "extends" : "id1180",
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "id" : "id1180-id760",
         "type" : "i_method"
      },
      "id1286" : {
         "level" : 3,
         "name" : "Addition information",
         "type" : "subsection",
         "id" : "id1286",
         "path" : "DETAILS/Processing the message/Addition information"
      },
      "id1084" : {
         "nest" : [
            "id1085",
            "id1087",
            "id1088"
         ],
         "id" : "id1084",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id1165-id1066" : {
         "name" : "accept",
         "extends" : "id1165",
         "params" : "$reasons|\\@reasons",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "id" : "id1165-id1066",
         "type" : "option"
      },
      "id454" : {
         "examples" : [
            "id455"
         ],
         "name" : "list",
         "id" : "id454",
         "intro" : "<p>Returned is a list of filenames which is used to update the list of\nMSGIDs when source files have changed.  All translation files which\nbelong to a certain <tt class=\"parameter\">$domain</tt> are listed.</p>\n\n<p>The <tt class=\"parameter\">$extension</tt> filter can be used to reduce the filenames further, for\ninstance to select only <code>po</code>, <code>mo</code> or <code>gmo</code> files, and ignore readme's.\nUse an string, without dot and interpreted case-insensitive, or a\nregular expression.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id454\">list</a></b>(&nbsp;$domain, [$extension]&nbsp;)"
      },
      "id293" : {
         "name" : "Log Format",
         "level" : 2,
         "path" : "DESCRIPTION/Log Format",
         "type" : "section",
         "intro" : "<p>If using this module on its own (such as a drop-in replacement for\nDancer2::Logger::Syslog), then the logging format is configured as with any\nother Dancer logger. If using this module with <a class=\"jump\" href=\"id252\">Dancer2::Plugin::LogReport</a>,\nthen log_format is ignored and messages are not formatted, in order to keep the\nmessage format consistent regardless of where the message was generated (be it\nanother module using <a class=\"jump\" href=\"id801\">Log::Report</a>, the plugin, or Dancer itself). In this case,\nthe log format should be configured using the applicable dispatcher (such as\n<a class=\"jump\" href=\"id927\">Log::Report::Dispatcher::Syslog::new(format)</a>).</p>\n\n<p>If also using with the <a class=\"jump\" href=\"id801\">Log::Report</a> logging functions, then you probably want\nto set a very simple <code>logger_format</code>, because the dispatchers do already add\nsome of the fields that the default <code>simple</code> format adds.  For instance, to\nget the filename/line-number in messages depends on the dispatcher 'mode' (f.i.\n'DEBUG').</p>\n\n<p>You also want to set the Dancer2 log level to <code>debug</code>, because level filtering\nis controlled per dispatcher (as well).</p>\n\n<p>See <a class=\"jump\" href=\"id276\">DETAILS</a> for examples.</p>\n",
         "id" : "id293"
      },
      "id533" : {
         "type" : "i_method",
         "intro" : "<p>Update the domains mentioned in the <tt class=\"parameter\">$filename</tt>.  All text-domains defined\nin the file will get updated automatically, but should not written before\nall files are processed.</p>\n\n<p>Returned is the number of messages found in this particular file.</p>\n",
         "id" : "id533",
         "call" : "$obj-&gt;<b><a name=\"id533\">process</a></b>(&nbsp;$filename, %options&nbsp;)",
         "name" : "process"
      },
      "id505" : {
         "id" : "id505",
         "intro" : "<p>PPI v1.284 still does not support unicode by itself, so you need to help\nit by specifying the character-set which is used in the file.</p>\n",
         "type" : "option",
         "params" : "$charset",
         "name" : "charset"
      },
      "id868" : {
         "name" : "syntax",
         "intro" : "<p>The SHORT syntax will add the report abbreviations (like function\n<a class=\"jump\" href=\"id839\">error()</a>) to your name-space.  Otherwise, each message must be produced\nwith <a class=\"jump\" href=\"id807\">report()</a>. <code>LONG</code> is an alternative to <code>REPORT</code>: both do not\npollute your namespace with the useful abbrev functions.</p>\n",
         "id" : "id868",
         "type" : "option",
         "params" : "'REPORT'|'SHORT'|'LONG'"
      },
      "id1206-id905" : {
         "params" : "INTEGER",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "id" : "id1206-id905",
         "name" : "max_params",
         "extends" : "id1206"
      },
      "id882" : {
         "name" : "default_dispatcher_mode",
         "call" : "<b><a name=\"id882\">default_dispatcher_mode</a></b>",
         "id" : "id882",
         "intro" : "<p>[1.46] Returns the default run mode.</p>\n",
         "type" : "function"
      },
      "id1081" : {
         "path" : "NAME",
         "intro" : "<p>Log::Report::Translator - base implementation for translating messages</p>\n",
         "id" : "id1081",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id1299" : {
         "name" : "Processing the message",
         "level" : 2,
         "path" : "DETAILS/Processing the message",
         "nest" : [
            "id1300",
            "id1301"
         ],
         "id" : "id1299",
         "type" : "section"
      },
      "id760" : {
         "package" : "Log::Report::Dispatcher::LogDispatch",
         "distribution" : "Log-Report",
         "is_pure_pod" : false,
         "title" : "send messages to Log::Dispatch back-end",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "id" : "id760",
         "chapters" : [
            "id761",
            "id1358",
            "id762",
            "id763",
            "id764",
            "id1320"
         ],
         "name" : "Log::Report::Dispatcher::LogDispatch",
         "version" : "1.46"
      },
      "id1189-id905" : {
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "type" : "ci_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "id" : "id1189-id905",
         "name" : "addSkipStack",
         "extends" : "id1189"
      },
      "id121" : {
         "path" : "FUNCTIONS",
         "name" : "FUNCTIONS",
         "level" : 1,
         "id" : "id121",
         "type" : "chapter",
         "nest" : [
            "id122",
            "id131",
            "id136"
         ]
      },
      "id61" : {
         "name" : "missing_key",
         "type" : "default",
         "value" : "&lt;warning&gt;",
         "id" : "id61"
      },
      "id541-id354" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id540\">Log::Report::Extract::store()</a></p>",
         "type" : "error",
         "id" : "id541-id354",
         "subroutine" : "id540",
         "name" : "no context tags allowed in plural `$msgid'",
         "extends" : "id541"
      },
      "id772" : {
         "name" : "max_level",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id772"
      },
      "id671" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "intro" : "<pre>  # this is usually not for end-users, See ::Extract::PerlPPI\n  # using a PO table\n\n  my $pot = Log::Report::Lexicon::POT-&gt;read('po/nl.po', charset =&gt; 'utf-8')\n     or die;\n\n  my $po = $pot-&gt;msgid('msgid');\n  my $po = $pot-&gt;msgid($msgid, $msgctxt);\n  print $pot-&gt;nrPlurals;\n  print $pot-&gt;msgstr('msgid', 3);\n  print $pot-&gt;msgstr($msgid, 3, $msgctxt);\n  $pot-&gt;write;  # update the file\n\n  # fill the table, by calling the next a lot\n  my $po  = Log::Report::Lexicon::PO-&gt;new(...);\n  $pot-&gt;add($po);\n\n  # creating a PO table\n  $pot-&gt;write('po/nl.po')\n      or die;\n</pre>\n",
         "id" : "id671",
         "type" : "chapter"
      },
      "id1168-id780" : {
         "name" : "locale",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "extends" : "id1168",
         "type" : "default",
         "id" : "id1168-id780",
         "value" : "&lt;system locale&gt;"
      },
      "id371" : {
         "name" : "charset",
         "intro" : "<p>The character encoding used in this template file.</p>\n",
         "id" : "id371",
         "type" : "option",
         "params" : "STRING"
      },
      "id767" : {
         "name" : "to_level",
         "params" : "\\@PAIRS",
         "intro" : "<p>See <a class=\"jump\" href=\"id779\">reasonToLevel()</a>.</p>\n",
         "type" : "option",
         "id" : "id767"
      },
      "id566" : {
         "path" : "METHODS/Constructors",
         "id" : "id566",
         "type" : "section",
         "subroutines" : [
            "id741-id561",
            "id567"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id138" : {
         "name" : "unescape_chars",
         "id" : "id138",
         "intro" : "<p>Replace all backslash-something escapes by their escape character.\nFor instance, backslash-t is replaced by a tab character.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id138\">unescape_chars</a></b>(&nbsp;STRING&nbsp;)"
      },
      "id919" : {
         "name" : "to_prio",
         "type" : "option",
         "intro" : "<p>See <a class=\"jump\" href=\"id934\">reasonToPrio()</a>.</p>\n",
         "id" : "id919",
         "params" : "\\@PAIRS"
      },
      "id752-id669" : {
         "subroutine" : "id751",
         "extends" : "id752",
         "name" : "there is no Plural-Forms field in the header, but needed.",
         "type" : "error",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id751\">Log::Report::Lexicon::Table::pluralIndex()</a></p>",
         "id" : "id752-id669"
      },
      "id1137-id385" : {
         "extends" : "id1137",
         "value" : "'en_US'",
         "id" : "id1137-id385",
         "type" : "default",
         "name" : "native_language",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1136\">Log::Report::Domain::configure(native_language)</a></p>"
      },
      "id859" : {
         "examples" : [
            "id860"
         ],
         "name" : "N__w",
         "type" : "function",
         "intro" : "<p>This extension to the Locale::TextDomain syntax, is a combined\n<code>qw</code> (list of quoted words) and <a class=\"jump\" href=\"id855\">N__()</a> into a list of translatable\nwords.</p>\n",
         "id" : "id859",
         "call" : "<b><a name=\"id859\">N__w</a></b>(&nbsp;$string&nbsp;)"
      },
      "id1196-id1217" : {
         "extends" : "id1196",
         "name" : "filename",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "id" : "id1196-id1217",
         "type" : "option",
         "params" : "STRING"
      },
      "id265" : {
         "name" : "info",
         "id" : "id265",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id265\">info</a></b>"
      },
      "id1183-id780" : {
         "name" : "needs",
         "extends" : "id1183",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "id" : "id1183-id780",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)"
      },
      "id1316" : {
         "path" : "METHODS/Managing PO's/Translation",
         "subroutines" : [
            "id581",
            "id580"
         ],
         "type" : "subsection",
         "id" : "id1316",
         "name" : "Translation",
         "level" : 3
      },
      "id953" : {
         "name" : "_plural",
         "id" : "id953",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id1179" : {
         "name" : "name",
         "intro" : "<p>Returns the unique name of this dispatcher.</p>\n",
         "type" : "i_method",
         "id" : "id1179",
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>"
      },
      "id1189-id1217" : {
         "name" : "addSkipStack",
         "extends" : "id1189",
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1189\">Log::Report::Dispatcher::addSkipStack()</a></p>",
         "id" : "id1189-id1217",
         "type" : "ci_method"
      },
      "id976-id221" : {
         "name" : "_context",
         "extends" : "id976",
         "params" : "$keyword|\\@keywords",
         "id" : "id976-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id976\">Log::Report::Message::new(_context)</a></p>",
         "type" : "option"
      },
      "id548" : {
         "type" : "i_method",
         "id" : "id548",
         "call" : "$obj-&gt;<b><a name=\"id548\">translate</a></b>(&nbsp;$msg, $lang, $ctxt&nbsp;)",
         "name" : "translate"
      },
      "id432" : {
         "name" : "charset",
         "id" : "id432",
         "value" : "&lt;<code>undef</code>>",
         "type" : "default"
      },
      "id920" : {
         "type" : "default",
         "value" : "[]",
         "id" : "id920",
         "name" : "to_prio"
      },
      "id813" : {
         "value" : "<code>undef</code>",
         "id" : "id813",
         "type" : "default",
         "name" : "stack"
      },
      "id1157" : {
         "id" : "id1157",
         "intro" : "<p>Say, you log for a (Dancer) webserver, where you wish to include the website\nname in some of the log lines.  For this, (ab)use the translation context:</p>\n<pre>\n  ### first, enable translation contexts\n  use Log::Report 'my-domain', context_rules =&gt; { ... };\n\n  # or\n  use Log::Report 'my-domain';\n  textdomain-&gt;configure(context_rules =&gt; { ... });\n\n  # or\n  textdomain 'my-domain', content_rules =&gt; { ... };\n\n  ### every time you start working for a different virtual host\n  (textdomain 'my-domain')-&gt;setContext(host =&gt; $host);\n\n  ### now you can use that in your code\n  package My::Package;\n  use Log::Report 'my-domain';\n  error __x\"in {_context.host} not logged-in {user}\", user =&gt; $username;\n</pre>\n",
         "type" : "subsection",
         "path" : "DETAILS/Configuring/configuring global values",
         "level" : 3,
         "name" : "configuring global values"
      },
      "id314" : {
         "name" : "textdomain_class",
         "params" : "CLASS",
         "intro" : "<p>Use your own extension to <a class=\"jump\" href=\"id385\">Log::Report::Template::Textdomain</a>.</p>\n",
         "id" : "id314",
         "type" : "option"
      },
      "id175" : {
         "intro" : "<pre>  # See Log::Report, most functions get \"hollow\" behavior\n  use Log::Report::Optional mode =&gt; 'DEBUG';\n</pre>\n",
         "type" : "chapter",
         "id" : "id175",
         "path" : "SYNOPSIS",
         "level" : 1,
         "name" : "SYNOPSIS"
      },
      "id1200-id1021" : {
         "params" : "STRING",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "id" : "id1200-id1021",
         "type" : "option",
         "name" : "call",
         "extends" : "id1200"
      },
      "id998-id221" : {
         "extends" : "id998",
         "name" : "taggedWith",
         "call" : "$obj-&gt;<b><a name=\"id998\">taggedWith</a></b>(&nbsp;$tag|Regexp&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id998\">Log::Report::Message::taggedWith()</a></p>",
         "id" : "id998-id221",
         "type" : "i_method"
      },
      "id1206-id1217" : {
         "params" : "INTEGER",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "id" : "id1206-id1217",
         "type" : "option",
         "name" : "max_params",
         "extends" : "id1206"
      },
      "id614" : {
         "intro" : "<p>This module is administering one translation object.  Sets of PO\nrecords are kept in a POT file, implemented in <a class=\"jump\" href=\"id669\">Log::Report::Lexicon::POT</a>.</p>\n",
         "type" : "chapter",
         "id" : "id614",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id880" : {
         "subroutine" : "id867",
         "name" : "textdomain `$domain' for translator not defined",
         "type" : "error",
         "id" : "id880"
      },
      "id1171-id1217" : {
         "extends" : "id1171",
         "name" : "format_reason",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "type" : "option",
         "id" : "id1171-id1217",
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE"
      },
      "id1181" : {
         "name" : "mode",
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>",
         "type" : "i_method",
         "intro" : "<p>Returns the mode in use for the dispatcher as number.  See <a class=\"jump\" href=\"id1169\">new(mode)</a>\nand <a class=\"jump\" href=\"id894\">Run modes</a>.</p>\n",
         "id" : "id1181"
      },
      "id661" : {
         "type" : "warning",
         "id" : "id661",
         "name" : "do not understand line at $where:\\n  $line",
         "subroutine" : "id657"
      },
      "id762" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "intro" : "<pre>  use Log::Dispatch::File;\n  dispatcher Log::Dispatch::File =&gt; 'logger', accept =&gt; 'NOTICE-',\n    filename =&gt; 'logfile', to_level =&gt; [ 'ALERT-' =&gt; 'err' ];\n\n  # disable default dispatcher\n  dispatcher close =&gt; 'logger';\n</pre>\n",
         "type" : "chapter",
         "id" : "id762"
      },
      "id788" : {
         "name" : "Constructors",
         "level" : 2,
         "path" : "METHODS/Constructors",
         "type" : "section",
         "id" : "id788",
         "subroutines" : [
            "id789"
         ]
      },
      "id948-id221" : {
         "name" : "_domain",
         "extends" : "id948",
         "params" : "$name|$object",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id948\">Log::Report::Message::new(_domain)</a></p>",
         "id" : "id948-id221"
      },
      "id1173-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "id" : "id1173-id1021",
         "type" : "option",
         "params" : "CHARSET",
         "extends" : "id1173",
         "name" : "charset"
      },
      "id576" : {
         "id" : "id576",
         "type" : "section",
         "subroutines" : [
            "id577",
            "id578"
         ],
         "path" : "METHODS/Attributes",
         "level" : 2,
         "name" : "Attributes"
      },
      "id515" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  # See the extensions\n</pre>\n",
         "type" : "chapter",
         "id" : "id515",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id361" : {
         "name" : "domain",
         "intro" : "<p>There is no syntax for specifying domains in templates (yet), so you\nmust be explicit about the collection we are making now.</p>\n",
         "id" : "id361",
         "type" : "option",
         "params" : "DOMAIN"
      },
      "id1194-id1066" : {
         "name" : "package",
         "extends" : "id1194",
         "params" : "CLASS",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "id" : "id1194-id1066"
      },
      "id777" : {
         "name" : "backend",
         "call" : "$obj-&gt;<b><a name=\"id777\">backend</a></b>",
         "intro" : "<p>Returns the Log::Dispatch::Output object which is used for logging.</p>\n",
         "id" : "id777",
         "type" : "i_method"
      },
      "id60" : {
         "intro" : "<p>[0.91] During interpolation, it may be discovered that a key is missing\nfrom the parameter list.  In that case, a warning is produced and <code>undef</code>\ninserted.  May can overrule that behavior.</p>\n",
         "id" : "id60",
         "type" : "option",
         "params" : "CODE",
         "name" : "missing_key"
      },
      "id598" : {
         "id" : "id598",
         "type" : "warning",
         "subroutine" : "id595",
         "name" : "unknown alternative `$alt' for tag `$tag' in context of `$msgid'"
      },
      "id1201-id1066" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "name" : "call",
         "value" : "&lt;required&gt;",
         "id" : "id1201-id1066",
         "type" : "default",
         "extends" : "id1201"
      },
      "id238" : {
         "path" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Dancer2::Template::TTLogReport - Template toolkit engine with Log::Report translations for Dancer2</p>\n",
         "id" : "id238",
         "name" : "NAME",
         "level" : 1
      },
      "id485" : {
         "name" : "unsupported charset $charset in $fn.",
         "subroutine" : "id467",
         "id" : "id485",
         "type" : "error"
      },
      "id437" : {
         "name" : "Translating",
         "level" : 2,
         "path" : "METHODS/Translating",
         "id" : "id437",
         "type" : "section",
         "subroutines" : [
            "id438",
            "id1090-id422"
         ]
      },
      "id1009" : {
         "intro" : "<pre>  my $clone = Log::Report::Message-&gt;thaw($msg-&gt;freeze);\n</pre>\n",
         "id" : "id1009",
         "type" : "example",
         "name" : "to thaw a frozen\n"
      },
      "id1129" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "id" : "id1129",
         "type" : "section",
         "subroutines" : [
            "id162-id1122",
            "id1133",
            "id164-id1122",
            "id163-id1122",
            "id1130",
            "id1144",
            "id1131",
            "id1132"
         ]
      },
      "id966-id221" : {
         "params" : "$tags|\\@tags",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id966\">Log::Report::Message::new(_classes)</a></p>",
         "type" : "option",
         "id" : "id966-id221",
         "name" : "_classes",
         "extends" : "id966"
      },
      "id1204-id1066" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "id" : "id1204-id1066",
         "type" : "option",
         "params" : "INTEGER",
         "extends" : "id1204",
         "name" : "max_line"
      },
      "id165" : {
         "id" : "id165",
         "type" : "i_method",
         "options" : [
            [
               "id168",
               "id169"
            ],
            [
               "id166",
               "id167"
            ]
         ],
         "diagnostics" : [
            "id170"
         ],
         "call" : "$obj-&gt;<b><a name=\"id165\">configure</a></b>(&nbsp;%options&nbsp;)",
         "intro" : "<p>Collect the settings for this domain.</p>\n",
         "name" : "configure"
      },
      "id1184" : {
         "level" : 2,
         "name" : "Logging",
         "subroutines" : [
            "id1186",
            "id1189",
            "id1188",
            "id1185",
            "id1192",
            "id1191",
            "id1193",
            "id1187"
         ],
         "id" : "id1184",
         "type" : "section",
         "path" : "METHODS/Logging"
      },
      "id1174-id1217" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id1174-id1217",
         "extends" : "id1174",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "name" : "charset"
      },
      "id52" : {
         "level" : 2,
         "name" : "Constructors",
         "intro" : "<p>When you use this package with functions, then you do not call the\nconstructor explicitly.  In that case, these <a class=\"jump\" href=\"id53\">new()</a> parameters are\nadded to the <code>use String::Print</code> line.</p>\n",
         "id" : "id52",
         "type" : "section",
         "subroutines" : [
            "id53"
         ],
         "path" : "METHODS/Constructors"
      },
      "id1191-id1066" : {
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "id" : "id1191-id1066",
         "type" : "i_method",
         "name" : "skipStack",
         "extends" : "id1191"
      },
      "id742" : {
         "path" : "METHODS/Attributes",
         "type" : "section",
         "id" : "id742",
         "name" : "Attributes",
         "level" : 2
      },
      "id218" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Dancer::Logger::LogReport - reroute Dancer logs into Log::Report</p>\n",
         "type" : "chapter",
         "id" : "id218"
      },
      "id641" : {
         "call" : "$obj-&gt;<b><a name=\"id641\">msgstr</a></b>(&nbsp;[$index, [$translation]]&nbsp;)",
         "intro" : "<p>Returns a <tt class=\"parameter\">$translation</tt>, optionally after setting it.\nWhen no plural is defined, the <tt class=\"parameter\">$index</tt> is ignored.</p>\n",
         "id" : "id641",
         "type" : "i_method",
         "name" : "msgstr"
      },
      "id341" : {
         "level" : 1,
         "name" : "DETAILS",
         "path" : "DETAILS",
         "nest" : [
            "id342",
            "id345",
            "id349"
         ],
         "id" : "id341",
         "type" : "chapter"
      },
      "id1225" : {
         "title" : "a single generated event",
         "inheritance" : {},
         "id" : "id1225",
         "package" : "Log::Report::Exception",
         "distribution" : "Log-Report",
         "is_pure_pod" : false,
         "version" : "1.46",
         "name" : "Log::Report::Exception",
         "chapters" : [
            "id1226",
            "id1227",
            "id1228",
            "id1229",
            "id1232"
         ]
      },
      "id1197-id760" : {
         "extends" : "id1197",
         "id" : "id1197-id760",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "name" : "filename",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>"
      },
      "id968-id221" : {
         "params" : "$tags|\\@tags",
         "id" : "id968-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id968\">Log::Report::Message::new(_class)</a></p>",
         "type" : "option",
         "name" : "_class",
         "extends" : "id968"
      },
      "id503" : {
         "name" : "Processors",
         "level" : 2,
         "path" : "METHODS/Processors",
         "subroutines" : [
            "id538-id493",
            "id534-id493",
            "id504",
            "id540-id493",
            "id537-id493"
         ],
         "id" : "id503",
         "type" : "section"
      },
      "id1164" : {
         "name" : "new",
         "intro" : "<p>Create a dispatcher.  The <tt class=\"parameter\">$type</tt> of back-end to start is required, and listed\nin the <a class=\"jump\" href=\"id1161\">DESCRIPTION</a> part of this manual-page. For various external\nback-ends, special wrappers are created.</p>\n\n<p>The <tt class=\"parameter\">$name</tt> must be uniquely identifying this dispatcher.  When a second\ndispatcher is created (via <a class=\"jump\" href=\"id825\">Log::Report::dispatcher()</a>) with the name\nof an existing dispatcher, the existing one will get replaced.</p>\n\n<p>All <tt class=\"parameter\">%options</tt> which are not consumed by this base constructor are passed\nto the wrapped back-end.  Some of them will check whether all <tt class=\"parameter\">%options</tt>\nare understood, other ignore unknown <tt class=\"parameter\">%options</tt>.</p>\n",
         "call" : "$class-&gt;<b><a name=\"id1164\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "diagnostics" : [
            "id1175",
            "id1176",
            "id1177"
         ],
         "options" : [
            [
               "id1165",
               "id1166"
            ],
            [
               "id1173",
               "id1174"
            ],
            [
               "id1171",
               "id1172"
            ],
            [
               "id1167",
               "id1168"
            ],
            [
               "id1169",
               "id1170"
            ]
         ],
         "type" : "c_method",
         "id" : "id1164"
      },
      "id535" : {
         "id" : "id535",
         "intro" : "<p>Keep the information about these filename, either specified as ARRAY of\nnames, or a HASH where the keys are the named.</p>\n",
         "type" : "option",
         "params" : "HASH|ARRAY",
         "name" : "keep"
      },
      "id295" : {
         "name" : "log",
         "id" : "id295",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id295\">log</a></b>(&nbsp;$level, $params&nbsp;)"
      },
      "id1161" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "intro" : "<p>In <a class=\"jump\" href=\"id801\">Log::Report</a>, dispatchers are used to handle (exception) messages\nwhich are created somewhere else.  Those message were produced (thrown)\nby <a class=\"jump\" href=\"id839\">Log::Report::error()</a> and friends.</p>\n\n<p>This base-class handles the creation of dispatchers, plus the common\nfiltering rules.  See the <a class=\"jump\" href=\"id1210\">DETAILS</a> section, below.</p>\n",
         "id" : "id1161",
         "type" : "chapter",
         "path" : "DESCRIPTION"
      },
      "id587" : {
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS",
         "id" : "id587",
         "type" : "chapter",
         "nest" : [
            "id588",
            "id592",
            "id594"
         ]
      },
      "id1207-id760" : {
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "extends" : "id1207",
         "type" : "default",
         "value" : "8",
         "id" : "id1207-id760"
      },
      "id946-id221" : {
         "params" : "BOOLEAN",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id946\">Log::Report::Message::new(_expand)</a></p>",
         "id" : "id946-id221",
         "name" : "_expand",
         "extends" : "id946"
      },
      "id786" : {
         "level" : 3,
         "name" : "Limitiations",
         "intro" : "<p>The global <code>$caller_depth</code> concept of Log::Log4perl is broken.\nThat variable is used to find the filename and line number of the logged\nmessages.  But these messages may have been caught, rerouted, eval'ed, and\notherwise followed a unpredictable multi-leveled path before it reached\nthe Log::Log4perl dispatcher.  This means that layout patterns <code>%F</code>\nand <code>%L</code> are not useful in the generic case, maybe in your specific case.</p>\n",
         "type" : "subsection",
         "id" : "id786",
         "path" : "DESCRIPTION/Categories/Limitiations"
      },
      "id578" : {
         "name" : "originalCharset",
         "call" : "$obj-&gt;<b><a name=\"id578\">originalCharset</a></b>",
         "id" : "id578",
         "intro" : "<p>[1.09] Returns the character-set of the strings found in the file.  They will\nget translated into utf8 before being used in Perl.</p>\n",
         "type" : "i_method"
      },
      "id1095" : {
         "id" : "id1095",
         "type" : "chapter",
         "nest" : [
            "id1096",
            "id1107",
            "id1111",
            "id1116"
         ],
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS"
      },
      "id623" : {
         "value" : "\"\" or []",
         "id" : "id623",
         "type" : "default",
         "name" : "msgstr"
      },
      "id350" : {
         "name" : "Setting-up translations",
         "level" : 3,
         "path" : "DETAILS/Extracting PO-files/Setting-up translations",
         "id" : "id350",
         "intro" : "<p>Start with desiging a domain structure.  Probably, you want to create\na separate domain for the templates (external texts in many languages)\nand your Perl program (internal texts with few languages).</p>\n\n<p>Pick a lexicon directory, which is also inside your version control setup,\nfor instance your GIT repository.  Some po-editors can work together\nwith various version control systems.</p>\n\n<p>Now, start using this module.  There are two ways: either by creating it\nas object, or by extension.</p>\n<pre>\n  ### As object\n  # Somewhere in your code\n  use Log::Report::Template;\n  my $templater = Log::Report::Template-&gt;new(%config);\n  $templater-&gt;addTextdomain(...);\n\n  $templater-&gt;process('template_file.tt', \\%vars); # runtime\n  $templater-&gt;extract(...);    # rarely, \"off-line\"\n</pre>\n\n<p>Some way or another, you want to be able to share the creation of the\ntemplater and configuration of the textdomain between the run-time use\nand the irregular (off-line) extraction of msgids.</p>\n\n<p>The alternative is via extension:</p>\n<pre>\n  ### By extension\n  # Somewhere in your code:\n  use My::Template;\n  my $templater = My::Template-&gt;new;\n  $templater-&gt;process('template_file.tt', \\%vars);\n\n  # File lib/My/Template.pm\n  package My::Template;\n  use parent 'Log::Report::Template';\n\n  sub init($) {\n     my ($self, $args) = @_;\n     # add %config into %$args\n     $self-&gt;SUPER::init($args);\n     $self-&gt;addTextdomain(...);\n     $self;\n  }\n\n  1;\n</pre>\n\n<p>The second solution requires a little bit of experience with OO, but is\neasier to maintain and to share.</p>\n",
         "type" : "subsection"
      },
      "id164-id385" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id164\">Log::Report::Minimal::Domain::format()</a></p>",
         "id" : "id164-id385",
         "call" : "$obj-&gt;<b><a name=\"id164\">format</a></b>",
         "name" : "format",
         "extends" : "id164"
      },
      "id145" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "id" : "id145",
         "intro" : "<p>Log::Report::Optional - pick Log::Report or ::Minimal</p>\n",
         "type" : "chapter"
      },
      "id323" : {
         "subroutine" : "id321",
         "name" : "directory $dir not in INCLUDE_PATH, used by $option",
         "type" : "error",
         "id" : "id323"
      },
      "id650" : {
         "name" : "isActive",
         "type" : "i_method",
         "intro" : "<p>Returns whether the translation has any references, or is the header.</p>\n",
         "id" : "id650",
         "call" : "$obj-&gt;<b><a name=\"id650\">isActive</a></b>"
      },
      "id236" : {
         "name" : "THAW",
         "intro" : "<p>=encoding UTF-8</p>\n",
         "type" : "c_method",
         "id" : "id236",
         "call" : "$class-&gt;<b><a name=\"id236\">THAW</a></b>(&nbsp;$serializer, $msg&nbsp;)"
      },
      "id596" : {
         "id" : "id596",
         "type" : "error",
         "name" : "no context definition for `$tag' in `$msgid'",
         "subroutine" : "id595"
      },
      "id1329" : {
         "intro" : "<pre> Log::Report::Win32Locale\n   is an Exporter\n</pre>\n",
         "type" : "chapter",
         "id" : "id1329",
         "path" : "INHERITANCE",
         "level" : 1,
         "name" : "INHERITANCE"
      },
      "id824" : {
         "name" : "odd length parameter list with object '$msg'.",
         "subroutine" : "id807",
         "id" : "id824",
         "type" : "error"
      },
      "id797" : {
         "name" : "logger",
         "call" : "$obj-&gt;<b><a name=\"id797\">logger</a></b>(&nbsp;[$domain]&nbsp;)",
         "id" : "id797",
         "intro" : "<p>Returns the Log::Log4perl::Logger object which is used for logging.\nWhen there is no specific logger for this <tt class=\"parameter\">$domain</tt> (logger with the exact\nname of the <tt class=\"parameter\">$domain</tt>) the default logger is being used, with the name of\nthis dispatcher.</p>\n",
         "type" : "i_method"
      },
      "id417" : {
         "name" : "superfluous positional parameters for '$msgid'",
         "subroutine" : "id412",
         "id" : "id417",
         "type" : "error"
      },
      "id1272" : {
         "level" : 3,
         "name" : "Filters",
         "id" : "id1272",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Filters"
      },
      "id1004-id221" : {
         "extends" : "id1004",
         "name" : "concat",
         "call" : "$obj-&gt;<b><a name=\"id1004\">concat</a></b>(&nbsp;$text|$message, [$prepend]&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1004\">Log::Report::Message::concat()</a></p>",
         "type" : "i_method",
         "id" : "id1004-id221"
      },
      "id195" : {
         "call" : "<b><a name=\"id195\">mistake</a></b>(&nbsp;$message&nbsp;)",
         "type" : "function",
         "id" : "id195",
         "name" : "mistake"
      },
      "id1275" : {
         "nest" : [
            "id1276",
            "id1277",
            "id1278",
            "id1280"
         ],
         "type" : "chapter",
         "id" : "id1275",
         "name" : "DETAILS",
         "level" : 1,
         "path" : "DETAILS"
      },
      "id978-id221" : {
         "name" : "_msgctxt",
         "extends" : "id978",
         "params" : "$context",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id978\">Log::Report::Message::new(_msgctxt)</a></p>",
         "type" : "option",
         "id" : "id978-id221"
      },
      "id546" : {
         "nest" : [
            "id1318",
            "id1319",
            "id547"
         ],
         "id" : "id546",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "path" : "METHODS"
      },
      "id1169-id1217" : {
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "id" : "id1169-id1217",
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3",
         "extends" : "id1169",
         "name" : "mode"
      },
      "id987-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id987\">count</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id987\">Log::Report::Message::count()</a></p>",
         "type" : "i_method",
         "id" : "id987-id221",
         "name" : "count",
         "extends" : "id987"
      },
      "id747" : {
         "name" : "Administration",
         "level" : 3,
         "path" : "METHODS/Managing PO's/Administration",
         "subroutines" : [
            "id751",
            "id749",
            "id755",
            "id753",
            "id748",
            "id756"
         ],
         "type" : "subsection",
         "id" : "id747"
      },
      "id984" : {
         "name" : "msgid",
         "id" : "id984",
         "intro" : "<p>Returns the msgid which will later be translated.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id984\">msgid</a></b>"
      },
      "id939" : {
         "path" : "OVERLOADED",
         "subroutines" : [
            "id940",
            "id942",
            "id941"
         ],
         "id" : "id939",
         "type" : "chapter",
         "name" : "OVERLOADED",
         "level" : 1
      },
      "id118" : {
         "path" : "NAME",
         "intro" : "<p>Log::Report::Util - helpful routines to Log::Report</p>\n",
         "type" : "chapter",
         "id" : "id118",
         "name" : "NAME",
         "level" : 1
      },
      "id157-id1122" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id157\">Log::Report::Minimal::Domain::new(name)</a></p>",
         "type" : "option",
         "id" : "id157-id1122",
         "params" : "STRING",
         "extends" : "id157",
         "name" : "name"
      },
      "id1092" : {
         "path" : "NAME",
         "intro" : "<p>Log::Report::Dispatcher::File - send messages to a file or file-handle</p>\n",
         "type" : "chapter",
         "id" : "id1092",
         "name" : "NAME",
         "level" : 1
      },
      "id528-id493" : {
         "call" : "$obj-&gt;<b><a name=\"id528\">charset</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id528\">Log::Report::Extract::charset()</a></p>",
         "id" : "id528-id493",
         "type" : "i_method",
         "extends" : "id528",
         "name" : "charset"
      },
      "id634" : {
         "name" : "format",
         "intro" : "<p>See <a class=\"jump\" href=\"id652\">format()</a>.  Either an ARRAY with PAIRS or a HASH with that same\ninformation.</p>\n",
         "type" : "option",
         "id" : "id634",
         "params" : "ARRAY|HASH"
      },
      "id689" : {
         "name" : "index",
         "value" : "{}",
         "id" : "id689",
         "type" : "default"
      },
      "id245" : {
         "name" : "Action",
         "level" : 2,
         "path" : "METHODS/Action",
         "id" : "id245",
         "type" : "section",
         "subroutines" : [
            "id246",
            "id248"
         ]
      },
      "id1188-id780" : {
         "id" : "id1188-id780",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "type" : "ci_method",
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "extends" : "id1188",
         "name" : "collectStack"
      },
      "id582" : {
         "name" : "string '$text' not between quotes at $location",
         "subroutine" : "id581",
         "id" : "id582",
         "type" : "warning"
      },
      "id136" : {
         "path" : "FUNCTIONS/Other",
         "type" : "section",
         "id" : "id136",
         "subroutines" : [
            "id138",
            "id140",
            "id137",
            "id139",
            "id142"
         ],
         "name" : "Other",
         "level" : 2
      },
      "id568" : {
         "id" : "id568",
         "intro" : "<p>When the charset is not specified, it will be taken from the content-type\nfield in the po-file header.</p>\n",
         "type" : "option",
         "params" : "STRING",
         "name" : "charset"
      },
      "id1037" : {
         "name" : "on_die",
         "intro" : "<p>When code which runs in this block exits with a die(), it will get\ntranslated into a <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a> using\n<a class=\"jump\" href=\"id1264\">Log::Report::Die::die_decode()</a>.  How serious are we about these\nerrors?</p>\n",
         "id" : "id1037",
         "type" : "option",
         "params" : "'ERROR'|'PANIC'"
      },
      "id805" : {
         "id" : "id805",
         "type" : "chapter",
         "nest" : [
            "id806",
            "id832",
            "id844",
            "id861",
            "id866",
            "id884"
         ],
         "path" : "FUNCTIONS",
         "level" : 1,
         "name" : "FUNCTIONS"
      },
      "id389" : {
         "type" : "chapter",
         "id" : "id389",
         "nest" : [
            "id390",
            "id404",
            "id410"
         ],
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1
      },
      "id334" : {
         "name" : "filename_match",
         "type" : "option",
         "intro" : "<p>Process all files from the INCLUDE_PATH directories which match this\nregular expression.</p>\n",
         "id" : "id334",
         "params" : "RegEx"
      },
      "id1357" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Message is extended by\n   <a class=\"jump\" href=\"id221\">Dancer2::Plugin::LogReport::Message</a>\n</pre>\n",
         "id" : "id1357",
         "path" : "INHERITANCE"
      },
      "id833" : {
         "intro" : "<p>Short for <code>report TRACE =&gt; $message</code></p>\n",
         "type" : "function",
         "id" : "id833",
         "call" : "<b><a name=\"id833\">trace</a></b>(&nbsp;$message&nbsp;)",
         "name" : "trace"
      },
      "id412" : {
         "diagnostics" : [
            "id413",
            "id414",
            "id415",
            "id416",
            "id417",
            "id418"
         ],
         "call" : "$obj-&gt;<b><a name=\"id412\">translationFunction</a></b>",
         "type" : "i_method",
         "id" : "id412",
         "intro" : "<p>This method returns a CODE which is able to handle a call for\ntranslation by Template Toolkit.</p>\n",
         "name" : "translationFunction"
      },
      "id1222" : {
         "level" : 2,
         "name" : "Constructors",
         "subroutines" : [
            "id1164-id1217"
         ],
         "id" : "id1222",
         "type" : "section",
         "path" : "METHODS/Constructors"
      },
      "id691" : {
         "id" : "id691",
         "value" : "now",
         "type" : "default",
         "name" : "date"
      },
      "id792" : {
         "params" : "FILENAME|SCALAR",
         "id" : "id792",
         "intro" : "<p>When a SCALAR reference is passed in, that must refer to a string which\ncontains the configuration text.  Otherwise, specify an existing FILENAME.</p>\n\n<p>By default, it is expected that Log::Log4perl has been initialized\nexternally.  That module uses global variables to communicate, which\nshould be present before any logging is attempted.</p>\n",
         "type" : "option",
         "name" : "config"
      },
      "id400" : {
         "name" : "lang",
         "params" : "LANGUAGES",
         "intro" : "<p>[1.01] Initial language to translate to.  Usually, this language which change\nfor each user connection via <a class=\"jump\" href=\"id411\">translateTo()</a>.</p>\n",
         "type" : "option",
         "id" : "id400"
      },
      "id1001-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1001\">Log::Report::Message::toHTML()</a></p>",
         "id" : "id1001-id221",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1001\">toHTML</a></b>(&nbsp;[$locale]&nbsp;)",
         "extends" : "id1001",
         "name" : "toHTML"
      },
      "id391" : {
         "type" : "c_method",
         "id" : "id391",
         "options" : [
            [
               "id400",
               "id401"
            ],
            [
               "id396",
               "id397"
            ],
            [
               "id157-id385",
               "id158-id385"
            ],
            [
               "id392",
               "id393"
            ],
            [
               "id398",
               "id399"
            ],
            [
               "id394",
               "id395"
            ]
         ],
         "call" : "$class-&gt;<b><a name=\"id391\">new</a></b>(&nbsp;%options&nbsp;)",
         "name" : "new"
      },
      "id1116" : {
         "name" : "Logging",
         "level" : 2,
         "path" : "METHODS/Logging",
         "type" : "section",
         "id" : "id1116",
         "subroutines" : [
            "id1186-id1091",
            "id1189-id1091",
            "id1188-id1091",
            "id1117",
            "id1192-id1091",
            "id1191-id1091",
            "id1193-id1091",
            "id1187-id1091"
         ]
      },
      "id1099" : {
         "name" : "to",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id1099"
      },
      "id1281" : {
         "name" : "Handling white-spaces",
         "level" : 3,
         "path" : "DETAILS/Automatic parameters/Handling white-spaces",
         "type" : "subsection",
         "id" : "id1281"
      },
      "id1183-id760" : {
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "type" : "i_method",
         "id" : "id1183-id760",
         "name" : "needs",
         "extends" : "id1183"
      },
      "id1204-id905" : {
         "extends" : "id1204",
         "name" : "max_line",
         "id" : "id1204-id905",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id525" : {
         "type" : "fault",
         "id" : "id525",
         "subroutine" : "id519",
         "name" : "cannot create lexicon directory $dir: $!"
      },
      "id1325" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Dispatcher::Log4perl\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "id" : "id1325",
         "type" : "chapter"
      },
      "id1191-id905" : {
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1191\">Log::Report::Dispatcher::skipStack()</a></p>",
         "id" : "id1191-id905",
         "type" : "i_method",
         "name" : "skipStack",
         "extends" : "id1191"
      },
      "id101" : {
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: HTML",
         "intro" : "<p>[0.95] interpolate the parameter with HTML entity encoding.</p>\n",
         "id" : "id101",
         "type" : "subsection",
         "name" : "Modifier: HTML",
         "level" : 3
      },
      "id983" : {
         "type" : "i_method",
         "intro" : "<p>Returns the string which is prepended to this one.  Usually <code>undef</code>.</p>\n",
         "id" : "id983",
         "call" : "$obj-&gt;<b><a name=\"id983\">prepend</a></b>",
         "name" : "prepend"
      },
      "id1168-id760" : {
         "name" : "locale",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "extends" : "id1168",
         "type" : "default",
         "value" : "&lt;system locale&gt;",
         "id" : "id1168-id760"
      },
      "id889" : {
         "name" : "Lightweight Log::Report::Optional",
         "level" : 3,
         "path" : "DETAILS/Introduction/Lightweight Log::Report::Optional",
         "type" : "subsection",
         "intro" : "<p>When you want to use <a class=\"jump\" href=\"id801\">Log::Report</a> features as cheap as possible, you\nmay use <a class=\"jump\" href=\"id144\">Log::Report::Optional</a> in your module.  In this case, your\nmodule can use <code>error()</code> and <code>__x()</code> with very little cost: they\nwill not build internal objects and support translations.  It's fast\nand few dependencies.</p>\n\n<p>The beauty is, then when the main program which uses module does\ninitiate the full <a class=\"jump\" href=\"id801\">Log::Report</a> functionality, then your module will\nalso switch to full support mode.</p>\n",
         "id" : "id889"
      },
      "id834" : {
         "name" : "assert",
         "call" : "<b><a name=\"id834\">assert</a></b>(&nbsp;$message&nbsp;)",
         "intro" : "<p>Short for <code>report ASSERT =&gt; $message</code></p>\n",
         "type" : "function",
         "id" : "id834"
      },
      "id305" : {
         "intro" : "<p>Create a new translator object.  You may pass the <tt class=\"parameter\">%options</tt> as HASH or\nPAIRS.  By convension, all basic Template Toolkit options are in capitals.\nRead Template::Config about what they mean.  Extension options provided\nby this module are all in lower-case.</p>\n\n<p>In a web-environment, you want to start this before your webserver starts\nforking.</p>\n",
         "name" : "new",
         "options" : [
            [
               "id310",
               "id311"
            ],
            [
               "id306",
               "id307"
            ],
            [
               "id308",
               "id309"
            ],
            [
               "id314",
               "id315"
            ],
            [
               "id312",
               "id313"
            ]
         ],
         "id" : "id305",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id305\">new</a></b>(&nbsp;%options&nbsp;)",
         "diagnostics" : [
            "id316"
         ]
      },
      "id226" : {
         "type" : "section",
         "id" : "id226",
         "subroutines" : [
            "id980-id221",
            "id227"
         ],
         "path" : "METHODS/Constructors",
         "level" : 2,
         "name" : "Constructors"
      },
      "id535-id354" : {
         "id" : "id535-id354",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id535\">Log::Report::Extract::cleanup(keep)</a></p>",
         "type" : "option",
         "params" : "HASH|ARRAY",
         "extends" : "id535",
         "name" : "keep"
      },
      "id333" : {
         "name" : "filenames",
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id333"
      },
      "id907" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "intro" : "<pre>  # add syslog dispatcher\n  dispatcher SYSLOG =&gt; 'syslog', accept =&gt; 'NOTICE-',\n    format_reason =&gt; 'IGNORE',\n    to_prio =&gt; [ 'ALERT-' =&gt; 'err' ];\n\n  # disable default dispatcher, when daemon\n  dispatcher close =&gt; 'default';\n</pre>\n",
         "type" : "chapter",
         "id" : "id907"
      },
      "id1229" : {
         "level" : 1,
         "name" : "OVERLOADED",
         "subroutines" : [
            "id1230",
            "id1231"
         ],
         "type" : "chapter",
         "id" : "id1229",
         "path" : "OVERLOADED"
      },
      "id1047" : {
         "name" : "log",
         "id" : "id1047",
         "intro" : "<p>Other dispatchers translate the message here, and make it leave the\nprogram.  However, messages in a \"try\" block are only captured in\nan intermediate layer: they may never be presented to an end-users.\nAnd for sure, we do not know the language yet.</p>\n\n<p>The <tt class=\"parameter\">$message</tt> is either a STRING or a <a class=\"jump\" href=\"id935\">Log::Report::Message</a>.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1047\">log</a></b>(&nbsp;$opts, $reason, $message&nbsp;)"
      },
      "id1194-id905" : {
         "name" : "package",
         "extends" : "id1194",
         "params" : "CLASS",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "id" : "id1194-id905",
         "type" : "option"
      },
      "id605" : {
         "type" : "section",
         "id" : "id605",
         "nest" : [
            "id606",
            "id607",
            "id608",
            "id609",
            "id610"
         ],
         "intro" : "<p>In <a class=\"jump\" href=\"id801\">Log::Report</a>'s extended concept of \"contexts\", you can select between\nmultiple translations for the same msgid, when they</p>\n\n<ul>\n<li>appear with different purpose (like gnu's concept of contexts)<br />\n<li>need alternative translation sets <b>on the same spot</b><br />\n<li>interpolate global parameters in messages<br />\n</ul>\n\n<p>In the standard gettext set-up, some msgid may accidentally collide\nbetween two different uses.  For instance, whether you translate the word\n\"Open\" in the menu for \"Files\" to mean \"open a file\", and the word \"Open\"\nin the status display meaning \"the file is open\".  In some languages,\nthese translations may differ.  Using a msgctxt keyword will cause the\nsame msgid to appear twice in the PO-file.</p>\n\n<p>But, there is a much broader need for context sensitive translations,\nwhich is not in the provided by standard gettext: environmental\ninformation or parameters may influence the translation more than simply\nsolvable by inserted parameters.</p>\n\n<p>For instance, the gender of the user of the website determines whether\n`he' or `she' needs to be used.  In this example, the gender is set as\ncontext keyword in the message:</p>\n<pre>\n  $name = 'Jack';\n  print __x\"{name} found her key\", name =&gt; $name;\n</pre>\n\n<p>You may try to solve this via:</p>\n<pre>\n  my ($name, $gender) = ('Jack', 'male');\n  print __x\"{name} found {personal} key\", name =&gt; $name,\n    personal =&gt; ($gender eq 'male' ? 'his' : 'her');    # No!\n</pre>\n\n<p>This does not translate!  For one, you would need to translate <code>his</code> and\n<code>her</code> to the language as well.  But in some languages, the differences\nbetween addressed genders have more impact on the whole sentence.</p>\n\n<p>So, <a class=\"jump\" href=\"id801\">Log::Report</a> translations add extra syntax:</p>\n<pre>\n  my ($name, $gender) = ('Jack', 'male');\n  print __x\"{name&lt;gender} found her key\", name =&gt; $name,\n    _context =&gt; \"gender=$gender\";\n</pre>\n\n<p>The <code>gender</code> marking tells the translation table builder (xgettext-perl)\nand the translation handler that there is a context active.</p>\n\n<p>Now, the English PO-file has</p>\n<pre>\n  # gender alternatives 'male' and 'female'\n\n  msgctxt \"gender=male\"\n  msgid  \"{name} found his key\"\n  msgstr \"{name} found his key\"\n\n  msgctxt \"gender=female\"\n  msgid   \"{name} found his key\"\n  msgstr  \"{name} found her key\"\n</pre>\n\n<p>To make this work, both the application and the <code>xgettext-perl</code> script\nmust share information to understand which genders are available.  See\nthe section on \"Configuration\" below.</p>\n\n<p>Another example:</p>\n<pre>\n  print __x\"greetings{&lt;style}\";\n  # style alternatives 'formal' and 'informal'\n\n  msgctxt \"style=formal\"\n  msgid   \"greetings\"\n  msgstr  \"Dear Sir/Madam,\"\n\n  msgctxt \"style=informal\"\n  msgid   \"greetings\"\n  msgstr  \"Hey buddy,\"\n</pre>\n\n<p>As can be seen, the '&lt;style' marking may be added inside the '{}' of\na filled-in parameter, or may appear on its own.  These markings are\nremoved from the msgid in the PO file, so that you may freely add them to\nthe strings used in your program without disturbing existing translations.</p>\n",
         "path" : "DETAILS/Using context_rules",
         "level" : 2,
         "name" : "Using context_rules"
      },
      "id48" : {
         "path" : "NAME",
         "type" : "chapter",
         "intro" : "<p>String::Print - printf alternative</p>\n",
         "id" : "id48",
         "name" : "NAME",
         "level" : 1
      },
      "id633" : {
         "value" : "[]",
         "type" : "default",
         "id" : "id633",
         "name" : "references"
      },
      "id891" : {
         "name" : "Error handling models",
         "level" : 2,
         "path" : "DETAILS/Error handling models",
         "intro" : "<p>There are two approaches to handling errors and warnings.  In the first\napproach, as produced by <code>die</code>, <code>warn</code> and the <code>carp</code> family of\ncommands, the program handles the problem immediately on the location\nwhere the problem appears.  In the second approach, an <i>exception</i>\nis thrown on the spot where the problem is created, and then somewhere\nelse in the program the condition is handled.</p>\n\n<p>The implementation of exceptions in Perl5 is done with a eval-die pair:\non the spot where the problem occurs, <code>die</code> is called.  But, because of\nthe execution of that routine is placed within an <code>eval</code>, the program\nas a whole will not die, just the execution of a part of the program\nwill seize.  However, what if the condition which caused the routine to die\nis solvable on a higher level?  Or what if the user of the code doesn't\nbother that a part fails, because it has implemented alternatives for\nthat situation?  Exception handling is quite clumsy in Perl5.</p>\n\n<p>The <code>Log::Report</code> set of distributions let modules concentrate on the\nprogram flow, and let the main program decide on the report handling\nmodel.  The infrastructure to translate messages into multiple languages,\nwhether to create exceptions or carp/die, to collect longer explanations\nwith the messages, to log to mail or syslog, and so on, is decided in\npluggable back-ends.</p>\n",
         "nest" : [
            "id892",
            "id894",
            "id898"
         ],
         "type" : "section",
         "id" : "id891"
      },
      "id1284" : {
         "id" : "id1284",
         "type" : "section",
         "path" : "DETAILS/Available back-ends",
         "level" : 2,
         "name" : "Available back-ends"
      },
      "id1086" : {
         "name" : "new",
         "call" : "$class-&gt;<b><a name=\"id1086\">new</a></b>(&nbsp;%options&nbsp;)",
         "type" : "c_method",
         "id" : "id1086"
      },
      "id51" : {
         "nest" : [
            "id52",
            "id65",
            "id72"
         ],
         "id" : "id51",
         "type" : "chapter",
         "level" : 1,
         "name" : "METHODS",
         "intro" : "<p>See functions <a class=\"jump\" href=\"id85\">printi()</a>, <a class=\"jump\" href=\"id76\">sprinti()</a>, <a class=\"jump\" href=\"id86\">printp()</a>, and <a class=\"jump\" href=\"id87\">sprintp()</a>: you\ncan also call them as method.</p>\n<pre>\n  use String::Print 'oo';\n  my $f = String::Print-&gt;new(%config);\n  $f-&gt;printi($format, @params);\n\n  # exactly the same functionality:\n  use String::Print 'printi', %config;\n  printi $format, @params;\n</pre>\n\n<p>The Object Oriented interface wins when you need the same configuration\nin multiple source files, or when you need different configurations\nwithin one program.  In these cases, the hassle of explicitly using the\nobject has some benefits.</p>\n",
         "path" : "METHODS"
      },
      "id1201-id905" : {
         "name" : "call",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "extends" : "id1201",
         "type" : "default",
         "id" : "id1201-id905",
         "value" : "&lt;required&gt;"
      },
      "id841" : {
         "name" : "alert",
         "call" : "<b><a name=\"id841\">alert</a></b>(&nbsp;$message&nbsp;)",
         "intro" : "<p>Short for <code>report ALERT =&gt; $message</code></p>\n",
         "type" : "function",
         "id" : "id841"
      },
      "id538-id493" : {
         "extends" : "id538",
         "diagnostics" : [
            "id539-id493"
         ],
         "call" : "$obj-&gt;<b><a name=\"id538\">write</a></b>(&nbsp;[$domain], %options&nbsp;)",
         "id" : "id538-id493",
         "type" : "i_method",
         "name" : "write",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id538\">Log::Report::Extract::write()</a></p>"
      },
      "id166-id1122" : {
         "id" : "id166-id1122",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id166\">Log::Report::Minimal::Domain::configure(where)</a></p>",
         "type" : "option",
         "params" : "ARRAY",
         "extends" : "id166",
         "name" : "where"
      },
      "id929" : {
         "id" : "id929",
         "type" : "error",
         "name" : "max one active syslog dispatcher, attempt for $new have $old",
         "subroutine" : "id911"
      },
      "id201" : {
         "path" : "FUNCTIONS/Language Translations",
         "subroutines" : [
            "id206",
            "id207",
            "id202",
            "id203",
            "id209",
            "id208",
            "id210",
            "id205"
         ],
         "type" : "section",
         "intro" : "<p>No translations, no <a class=\"jump\" href=\"id935\">Log::Report::Message</a> objects returned.</p>\n",
         "id" : "id201",
         "name" : "Language Translations",
         "level" : 2
      },
      "id504" : {
         "intro" : "<p>Update the domains mentioned in the <tt class=\"parameter\">$filename</tt>.  All textdomains defined\nin the file will get updated automatically, but not written before\nall files where processed.</p>\n",
         "name" : "process",
         "diagnostics" : [
            "id507",
            "id508",
            "id509",
            "id510",
            "id511",
            "id512"
         ],
         "call" : "$obj-&gt;<b><a name=\"id504\">process</a></b>(&nbsp;$filename, %options&nbsp;)",
         "id" : "id504",
         "type" : "i_method",
         "options" : [
            [
               "id505",
               "id506"
            ]
         ]
      },
      "id1165-id1217" : {
         "name" : "accept",
         "extends" : "id1165",
         "params" : "$reasons|\\@reasons",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "type" : "option",
         "id" : "id1165-id1217"
      },
      "id455" : {
         "type" : "example",
         "intro" : "<pre>  my @l = $index-&gt;list('my-domain');\n  my @l = $index-&gt;list('my-domain', 'po');\n  my @l = $index-&gt;list('my-domain', qr/^readme/i);\n</pre>\n",
         "id" : "id455"
      },
      "id1279" : {
         "level" : 3,
         "name" : "Interpolation with String::Print",
         "id" : "id1279",
         "type" : "subsection",
         "path" : "DETAILS/Messages with plural forms/Interpolation with String::Print"
      },
      "id902" : {
         "name" : "die/warn/Carp",
         "level" : 3,
         "path" : "DETAILS/Compared to other solutions in Perl/die/warn/Carp",
         "intro" : "<p>Perl's built-in exception system is very primitive: \"die\" and \"warn\".\nMost programming languages provide a much more detailed exception\nmechanism.</p>\n\n<p>A typical perl program can look like this:</p>\n<pre>\n  my $dir = '/etc';\n\n  File::Spec-&gt;file_name is_absolute($dir)\n      or die \"ERROR: directory name must be absolute.\\n\";\n\n  -d $dir\n      or die \"ERROR: what platform are you on?\";\n\n  until(opendir DIR, $dir)\n  {   warn \"ERROR: cannot read system directory $dir: $!\";\n      sleep 60;\n  }\n\n  print \"Processing directory $dir\\n\"\n      if $verbose;\n\n  while(defined(my $file = readdir DIR))\n  {   if($file =~ m/\\.bak$/)\n      {   warn \"WARNING: found backup file $dir/$f\\n\";\n          next;\n      }\n\n      die \"ERROR: file $dir/$file is binary\"\n          if $debug &amp;&amp; -B \"$dir/$file\";\n\n      print \"DEBUG: processing file $dir/$file\\n\"\n          if $debug;\n\n      open my $fh, \"&lt;:encoding(UTF-8)\", \"$dir/$file\"\n          or die \"ERROR: cannot read from $dir/$f: $!\";\n\n      $fh-&gt;close\n          or croak \"ERROR: read errors in $dir/$file: $!\";\n  }\n</pre>\n\n<p>Where <code>die</code>, <code>warn</code>, and <code>print</code> are used for various tasks.  With\n<code>Log::Report</code>, you would write</p>\n<pre>\n  use Log::Report;\n\n  # can be left-out when there is no debug/verbose\n  dispatcher PERL =&gt; 'default', mode =&gt; 'DEBUG';\n\n  my $dir = '/etc';\n\n  File::Spec-&gt;file_name is_absolute($dir)\n      or mistake \"directory name must be absolute\";\n\n  -d $dir\n      or panic \"what platform are you on?\";\n\n  until(opendir DIR, $dir)\n  {   alert \"cannot read system directory $dir\";\n      sleep 60;\n  }\n\n  info \"Processing directory $dir\";\n\n  while(defined(my $file = readdir DIR))\n  {   if($file =~ m/\\.bak$/)\n      {   notice \"found backup file $dir/$f\";\n          next;\n      }\n\n      assert \"file $dir/$file is binary\"\n          if -B \"$dir/$file\";\n\n      trace \"processing file $dir/$file\";\n\n      unless(open my $fh, \"&lt;:encoding(UTF-8)\", \"$dir/$file\")\n      {   error \"no permission to read from $dir/$f\" if $!==ENOPERM;\n          fault \"unable to read from $dir/$f\";  # or better\n      }\n\n      $fh-&gt;close\n          or failure \"read errors in $dir/$file\";\n  }\n</pre>\n\n<p>A lot of things are quite visibly different, and there are a few smaller\nchanges.  There is no need for a new-line after the text of the message.\nWhen applicable (error about system problem), then the <code>$!</code> is added\nautomatically.</p>\n",
         "type" : "subsection",
         "id" : "id902"
      },
      "id1322" : {
         "nest" : [
            "id1323",
            "id1324"
         ],
         "id" : "id1322",
         "type" : "section",
         "level" : 2,
         "name" : "Processing the message",
         "path" : "DETAILS/Processing the message"
      },
      "id910" : {
         "type" : "section",
         "id" : "id910",
         "subroutines" : [
            "id911"
         ],
         "path" : "METHODS/Constructors",
         "level" : 2,
         "name" : "Constructors"
      },
      "id1257" : {
         "name" : "print",
         "examples" : [
            "id1258"
         ],
         "type" : "i_method",
         "intro" : "<p>The default filehandle is STDOUT.</p>\n",
         "id" : "id1257",
         "call" : "$obj-&gt;<b><a name=\"id1257\">print</a></b>(&nbsp;[$fh]&nbsp;)"
      },
      "id823" : {
         "subroutine" : "id807",
         "name" : "a message object is reported with more parameters.",
         "type" : "error",
         "id" : "id823"
      },
      "id126" : {
         "id" : "id126",
         "type" : "error",
         "subroutine" : "id123",
         "name" : "reason '$begin' more serious than '$end' in '$reasons'."
      },
      "id324" : {
         "id" : "id324",
         "type" : "error",
         "subroutine" : "id321",
         "name" : "translation function '$func' already in use by textdomain '$name'"
      },
      "id163-id385" : {
         "name" : "isConfigured",
         "extends" : "id163",
         "call" : "$obj-&gt;<b><a name=\"id163\">isConfigured</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id163\">Log::Report::Minimal::Domain::isConfigured()</a></p>",
         "type" : "i_method",
         "id" : "id163-id385"
      },
      "id850" : {
         "name" : "__n",
         "examples" : [
            "id851"
         ],
         "call" : "<b><a name=\"id850\">__n</a></b>(&nbsp;$msgid, $plural_msgid, $count, PAIRS&nbsp;)",
         "id" : "id850",
         "intro" : "<p>It depends on the value of <tt class=\"parameter\">$count</tt> (and the selected language) which\ntext will be displayed.  When translations can not be performed, then\n<tt class=\"parameter\">$msgid</tt> will be used when <tt class=\"parameter\">$count</tt> is 1, and PLURAL_MSGSID in other cases.\nHowever, some languages have more complex schemes than English.</p>\n\n<p>The <tt class=\"parameter\">PAIRS</tt> are options for <a class=\"jump\" href=\"id945\">Log::Report::Message::new()</a> and variables\nto be filled in.</p>\n",
         "type" : "function"
      },
      "id624" : {
         "name" : "msgctxt",
         "params" : "$context",
         "id" : "id624",
         "intro" : "<p>Context string: specifies where the <tt class=\"parameter\">msgid</tt> belongs.</p>\n",
         "type" : "option"
      },
      "id680" : {
         "params" : "STRING",
         "type" : "option",
         "id" : "id680",
         "name" : "version"
      },
      "id1175" : {
         "type" : "alert",
         "id" : "id1175",
         "subroutine" : "id1164",
         "name" : "cannot use class $backend:\\n$@: $!"
      },
      "id861" : {
         "name" : "Messages with Context",
         "level" : 2,
         "path" : "FUNCTIONS/Messages with Context",
         "subroutines" : [
            "id863",
            "id865",
            "id862",
            "id864"
         ],
         "id" : "id861",
         "intro" : "<p>In <a class=\"jump\" href=\"id801\">Log::Report</a>, the message context (<code>mgsctxt</code> in the PO-files --in the\ntranslation tables) can be used in a very powerful way.  Read all about\nit in <a class=\"jump\" href=\"id583\">Log::Report::Translator::Context</a></p>\n\n<p>The msgctxt versions of the tranditional gettext infrastructure are far\nless useful for <a class=\"jump\" href=\"id801\">Log::Report</a>, because we can easily work with different\ntext domains within the same program.  That should avoid most of the\naccidental translation conflicts between components of the code.</p>\n\n<p>Just for compatibility with Locale::TextDomain and completeness, the\n'p' versions of above methods are supported.  See examples for these\nfunctions in Locale::TextDomain.</p>\n\n<p><b>Warnings:</b> Functions <code>N__p()</code> and <code>N__np()</code> seem not to be usable in\nreality, hence not implemented.  The script <i class=\"filename\">xgettext-perl</i> and\n<a class=\"jump\" href=\"id493\">Log::Report::Extract::PerlPPI</a> (both in the <a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a>\ndistribution) do not yet support these functions.</p>\n",
         "type" : "section"
      },
      "id1185-id1217" : {
         "extends" : "id1185",
         "name" : "close",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1185\">Log::Report::Dispatcher::close()</a></p>",
         "id" : "id1185-id1217",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>"
      },
      "id380" : {
         "name" : "template syntax error, no END in $fn line $line.",
         "subroutine" : "id370",
         "id" : "id380",
         "type" : "error"
      },
      "id1011" : {
         "nest" : [
            "id1012",
            "id1013",
            "id1014",
            "id1017"
         ],
         "id" : "id1011",
         "type" : "chapter",
         "name" : "DETAILS",
         "level" : 1,
         "path" : "DETAILS",
         "intro" : "<p>The message cast by the <a class=\"jump\" href=\"id801\">Log::Report</a> exception framework can be\nplain strings.  This is sufficient for some cases, for instance:\nwhich would you bother much about the content of <code>trace</code> messages?\nMessage which are destined for end-users or log-files however, need\nmore care; require a higher quality.  In this case, you can better\nuse cast message objects which support interpolation.</p>\n"
      },
      "id1180-id1091" : {
         "extends" : "id1180",
         "name" : "type",
         "id" : "id1180-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>"
      },
      "id1207-id780" : {
         "extends" : "id1207",
         "type" : "default",
         "id" : "id1207-id780",
         "value" : "8",
         "name" : "max_params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>"
      },
      "id128" : {
         "name" : "is_reason",
         "call" : "<b><a name=\"id128\">is_reason</a></b>(&nbsp;$name&nbsp;)",
         "intro" : "<p>Returns <code>true</code> if the STRING is one of the predefined REASONS.</p>\n",
         "type" : "function",
         "id" : "id128"
      },
      "id557" : {
         "call" : "<b><a name=\"id557\">charset_encoding</a></b>",
         "id" : "id557",
         "intro" : "<p>Returns the encoding name (usable with module Encode) based on the current\ncodepage.  For example, <code>cp1252</code> for iso-8859-1 (latin-1) or <code>cp932</code> for\nShift-JIS Japanese.  Returns <code>undef</code> if the encoding cannot be identified.</p>\n",
         "type" : "function",
         "name" : "charset_encoding"
      },
      "id409" : {
         "call" : "$obj-&gt;<b><a name=\"id409\">lang</a></b>",
         "intro" : "<p>The language we are going to translate to.  Change this with <a class=\"jump\" href=\"id411\">translateTo()</a>\nfor this domain, or better <a class=\"jump\" href=\"id319\">Log::Report::Template::translateTo()</a>.</p>\n",
         "type" : "i_method",
         "id" : "id409",
         "name" : "lang"
      },
      "id756" : {
         "name" : "header",
         "call" : "$obj-&gt;<b><a name=\"id756\">header</a></b>(&nbsp;$field&nbsp;)",
         "intro" : "<p>The translation of a blank MSGID is used to store a MIME header, which\ncontains some meta-data.  The <tt class=\"parameter\">$field</tt> value is looked-up (case-insensitive)\nand returned.</p>\n",
         "type" : "i_method",
         "id" : "id756"
      },
      "id80" : {
         "value" : "', '",
         "id" : "id80",
         "type" : "default",
         "name" : "_join"
      },
      "id536-id493" : {
         "type" : "default",
         "value" : "[]",
         "id" : "id536-id493",
         "extends" : "id536",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id535\">Log::Report::Extract::cleanup(keep)</a></p>",
         "name" : "keep"
      },
      "id1197-id780" : {
         "id" : "id1197-id780",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "extends" : "id1197",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "name" : "filename"
      },
      "id168-id1122" : {
         "extends" : "id168",
         "name" : "formatter",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id168\">Log::Report::Minimal::Domain::configure(formatter)</a></p>",
         "id" : "id168-id1122",
         "params" : "CODE|\\%config|'PRINTI'"
      },
      "id930" : {
         "name" : "syslog level '$level' not understood",
         "subroutine" : "id911",
         "type" : "error",
         "id" : "id930"
      },
      "id422" : {
         "title" : "translation based on POT files",
         "inheritance" : {
            "extends" : [
               "Log::Report::Translator"
            ]
         },
         "id" : "id422",
         "package" : "Log::Report::Translator::POT",
         "distribution" : "Log-Report-Lexicon",
         "is_pure_pod" : false,
         "version" : "1.16",
         "name" : "Log::Report::Translator::POT",
         "chapters" : [
            "id423",
            "id1335",
            "id424",
            "id425",
            "id426"
         ]
      },
      "id1122" : {
         "is_pure_pod" : false,
         "distribution" : "Log-Report",
         "package" : "Log::Report::Domain",
         "id" : "id1122",
         "inheritance" : {
            "extended_by" : [
               "Log::Report::Template::Textdomain"
            ],
            "extends" : [
               "Log::Report::Minimal::Domain"
            ]
         },
         "title" : "administer one text-domain",
         "chapters" : [
            "id1123",
            "id1337",
            "id1124",
            "id1125",
            "id1126",
            "id1154"
         ],
         "name" : "Log::Report::Domain",
         "version" : "1.46"
      },
      "id1002" : {
         "intro" : "<pre>  print $msg-&gt;toHTML('NL');\n</pre>\n",
         "id" : "id1002",
         "type" : "example"
      },
      "id1014" : {
         "nest" : [
            "id1015"
         ],
         "type" : "section",
         "id" : "id1014",
         "level" : 2,
         "name" : "Messages with plural forms",
         "intro" : "<p>The <a class=\"jump\" href=\"id854\">Log::Report::__xn()</a> message constructor is used when you need\na different translation based on the count of one of the inserted\nfields.</p>\n<pre>\n  fault __x\"cannot read {file}\", file =&gt; $fn;\n  # --&gt; FAULT: cannot read /etc/shadow: Permission denied\\n\n\n  print __xn\"directory {dir} contains one file\",\n            \"directory {dir} contains {nr_files} files\",\n            scalar(@files),            # (1) (2) (3)\n            nr_files =&gt; scalar @files, # (4)\n            dir      =&gt; $dir;\n</pre>\n\n<p>(1) this required third parameter is used to switch between the different\nplural forms.  English has only two forms, but some languages have many\nmore.</p>\n\n<p>(2) the \"scalar\" keyword is not needed, because the third parameter is\nin SCALAR context.  You may also pass <code> \\@files </code> there, because ARRAYs\nwill be converted into their length.  A HASH will be converted into the\nnumber of keys in the HASH.</p>\n\n<p>(3) you could also simply pass a reference to the ARRAY: it will take\nthe length as counter.  With a HASH, it will count the number of keys.</p>\n\n<p>(4) the <code>scalar</code> keyword is required here, because it is LIST context:\notherwise all filenames will be filled-in as parameters to <code>__xn()</code>.\nSee below for the available <code>_count</code> value, to see how the <code>nr_files</code>\nparameter can disappear.</p>\n<pre>\n  print __xn\"directory {dir} contains one file\",\n            \"directory {dir} contains {_count} files\",\n            \\@files, dir =&gt; $dir;\n</pre>\n\n<p>Some languages need more than two translations based on the counter.\nThis is solved by the translation table definition.  The two msgids\ngive here are simply the fallback, when there is not translation table\nactive.</p>\n",
         "path" : "DETAILS/Messages with plural forms"
      },
      "id1216" : {
         "name" : "take all mistakes and warnings serious\n",
         "intro" : "<pre>  dispatch filter =&gt; \\&amp;take_warns_seriously;\n  sub take_warns_seriously($$$$)\n  {   my ($disp, $opts, $reason, $message) = @_;\n        $reason eq 'MISTAKE' ? (ERROR   =&gt; $message)\n      : $reason eq 'WARNING' ? (FAULT   =&gt; $message)\n      :                        ($reason =&gt; $message);\n  }\n</pre>\n",
         "id" : "id1216",
         "type" : "example"
      },
      "id952-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id952\">Log::Report::Message::new(_plural)</a></p>",
         "type" : "option",
         "id" : "id952-id221",
         "params" : "$msgid",
         "extends" : "id952",
         "name" : "_plural"
      },
      "id228" : {
         "name" : "reason",
         "params" : "$reason",
         "id" : "id228",
         "intro" : "<p>The <tt class=\"parameter\">$reason</tt> reflects the exception level which is attached to message,\noften derived from a caught exception.</p>\n",
         "type" : "option"
      },
      "id741-id461" : {
         "name" : "new",
         "extends" : "id741",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id741\">Log::Report::Lexicon::Table::new()</a></p>",
         "id" : "id741-id461",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id741\">new</a></b>(&nbsp;%options&nbsp;)"
      },
      "id871" : {
         "name" : "mode",
         "value" : "'NORMAL'",
         "type" : "default",
         "id" : "id871"
      },
      "id1188-id760" : {
         "name" : "collectStack",
         "extends" : "id1188",
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "id" : "id1188-id760",
         "type" : "ci_method"
      },
      "id1125" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p><a class=\"jump\" href=\"id801\">Log::Report</a> can handle multiple sets of packages used by your program at the same\ntime.  In the common case, your program consists of more than one imported software\ndistribution, each containing a number of packages.  So separate the <a class=\"jump\" href=\"id801\">Log::Report</a>\nconfiguration for each distribution, you should explicitly assign each package\nto a set, to a namespace.  This is (in translation lingo) a <i>domain</i> or <i>text domain</i>.\nThe default domain has name <code>default</code>.</p>\n\n<p>For <code>Log::Report</code>, those package sets are selected with the text-domain\nvalue in the <code>use</code> statement:</p>\n<pre>\n  use Log::Report 'my-domain';\n</pre>\n\n<p>There are many things you can configure per (text)domain.  This is\nnot only related to translations, but also -for instance- for text\nformatting configuration (<a class=\"jump\" href=\"id47\">String::Print</a> options).  The administration\nfor the configuration is managed in this package.</p>\n\n<p>This class extends <a class=\"jump\" href=\"id150\">Log::Report::Minimal::Domain</a>, which can be used when your\nprogram does not want any overhead from the powerful <a class=\"jump\" href=\"id801\">Log::Report</a> features.\nIn that case, your program invokes <a class=\"jump\" href=\"id144\">Log::Report::Optional</a>.</p>\n",
         "type" : "chapter",
         "id" : "id1125"
      },
      "id1005" : {
         "name" : "of concatenation\n",
         "type" : "example",
         "intro" : "<pre>  print __\"Hello\" . ' ' . __\"World!\\n\";\n  print __(\"Hello\")-&gt;concat(' ')-&gt;concat(__\"World!\")-&gt;concat(\"\\n\");\n</pre>\n",
         "id" : "id1005"
      },
      "id359" : {
         "path" : "METHODS/Constructors",
         "id" : "id359",
         "type" : "section",
         "subroutines" : [
            "id360"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id1066" : {
         "is_pure_pod" : false,
         "package" : "Log::Report::Dispatcher::Callback",
         "distribution" : "Log-Report",
         "id" : "id1066",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "title" : "call a code-ref for each log-line",
         "chapters" : [
            "id1067",
            "id1331",
            "id1068",
            "id1069",
            "id1071",
            "id1292"
         ],
         "name" : "Log::Report::Dispatcher::Callback",
         "version" : "1.46"
      },
      "id1264" : {
         "options" : [
            [
               "id1265",
               "id1266"
            ]
         ],
         "intro" : "<p>The <tt class=\"parameter\">STRING</tt> is the content of <code>$@</code> after an eval() caught a die().\ncroak(), or confess().  This routine tries to convert this into\nparameters for <a class=\"jump\" href=\"id807\">Log::Report::report()</a>.  This is done in a very\nsmart way, even trying to find the stringifications of <code>$!</code>.</p>\n\n<p>Returned are four elements: the error string or object which triggered\nthe death originally (the original $@), and the opts, reason, and plain\ntext message.  The opts is a HASH which, amongst other things, may contain\na stack trace and location extracted from the death text or object.</p>\n\n<p>Translated components will have exception classes <code>perl</code>, and <code>die</code> or\n<code>confess</code>.  On the moment, the <code>croak</code> cannot be distiguished from the\n<code>confess</code> (when used in package main) or <code>die</code> (otherwise).</p>\n\n<p>The returned reason depends on whether the translation of the current\n<code>$!</code> is found in the <tt class=\"parameter\">STRING</tt>, and the presence of a stack trace.  The\nfollowing table is used:</p>\n<pre>\n  errstr  stack  =&gt;  reason\n    no      no       ERROR   (die) application internal problem\n    yes     no       FAULT   (die) external problem, think open()\n    no      yes      PANIC   (confess) implementation error\n    yes     yes      ALERT   (confess) external problem, caught\n</pre>\n",
         "type" : "function",
         "id" : "id1264",
         "call" : "<b><a name=\"id1264\">die_decode</a></b>(&nbsp;STRING, %options&nbsp;)",
         "name" : "die_decode"
      },
      "id659" : {
         "subroutine" : "id657",
         "name" : "do not understand command '$cmd' at $where.",
         "id" : "id659",
         "type" : "warning"
      },
      "id552" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "intro" : "<p>Windows uses different locales to represent languages: codepages. Programs\nwhich are written with <a class=\"jump\" href=\"id801\">Log::Report</a> however, will contain ISO encoded\nlanguage names; this module translates between them.</p>\n\n<p>The algorithms in this module are based on Win32::Locale and Win32::Codepage.</p>\n",
         "id" : "id552",
         "type" : "chapter",
         "path" : "DESCRIPTION"
      },
      "id1261" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "intro" : "<pre>  # use internally only\n</pre>\n",
         "id" : "id1261",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id53" : {
         "call" : "$class-&gt;<b><a name=\"id53\">new</a></b>(&nbsp;%options&nbsp;)",
         "intro" : "<p>The <tt class=\"parameter\">%options</tt> of the constructure configure processing options.</p>\n",
         "type" : "c_method",
         "id" : "id53",
         "options" : [
            [
               "id62",
               "id63"
            ],
            [
               "id58",
               "id59"
            ],
            [
               "id60",
               "id61"
            ],
            [
               "id54",
               "id55"
            ],
            [
               "id56",
               "id57"
            ]
         ],
         "examples" : [
            "id64"
         ],
         "name" : "new"
      },
      "id954" : {
         "params" : "$msgid",
         "intro" : "<p>The message label, which refers to some translation information.\nUsually a string which is close the English version of the message.\nThis will also be used if there is no translation possible/known.</p>\n\n<p>Leading white-space <code>\\s</code> will be added to <tt class=\"parameter\">_prepend</tt>.  Trailing\nwhite-space will be added before <tt class=\"parameter\">_append</tt>.</p>\n",
         "id" : "id954",
         "type" : "option",
         "name" : "_msgid"
      },
      "id613" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "type" : "chapter",
         "id" : "id613",
         "path" : "SYNOPSIS"
      },
      "id957-id221" : {
         "name" : "_category",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id956\">Log::Report::Message::new(_category)</a></p>",
         "extends" : "id957",
         "id" : "id957-id221",
         "value" : "<code>undef</code>",
         "type" : "default"
      },
      "id750-id461" : {
         "extends" : "id750",
         "name" : "only acceptable parameter is 'ACTIVE'",
         "subroutine" : "id749",
         "id" : "id750-id461",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id749\">Log::Report::Lexicon::Table::translations()</a></p>",
         "type" : "error"
      },
      "id313" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id313",
         "name" : "translate_to"
      },
      "id1182-id1217" : {
         "name" : "isDisabled",
         "extends" : "id1182",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1182\">Log::Report::Dispatcher::isDisabled()</a></p>",
         "id" : "id1182-id1217"
      },
      "id427" : {
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id428"
         ],
         "id" : "id427",
         "type" : "section",
         "name" : "Constructors",
         "level" : 2
      },
      "id1172" : {
         "name" : "format_reason",
         "id" : "id1172",
         "value" : "'LOWERCASE'",
         "type" : "default"
      },
      "id814" : {
         "name" : "location",
         "id" : "id814",
         "intro" : "<p>When defined, this location is used in the display.  Otherwise, it\nis determined automatically if needed.  An empty string will disable\nany attempt to display this line.</p>\n",
         "type" : "option",
         "params" : "$location"
      },
      "id746" : {
         "call" : "$obj-&gt;<b><a name=\"id746\">msgstr</a></b>(&nbsp;$msgid, [$count, $msgctxt]&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Returns the translated string for <tt class=\"parameter\">$msgid</tt>.  When not specified, <tt class=\"parameter\">$count</tt> is 1.</p>\n",
         "id" : "id746",
         "name" : "msgstr"
      },
      "id1189" : {
         "call" : "$any-&gt;<b><a name=\"id1189\">addSkipStack</a></b>(&nbsp;@CODE&nbsp;)",
         "type" : "ci_method",
         "intro" : "<p>[1.13] Add one or more <tt class=\"parameter\">CODE</tt> blocks of caller lines which should not be\ncollected for stack-traces or location display.  A <tt class=\"parameter\">CODE</tt> gets\ncalled with an ARRAY of caller information, and returns <code>true</code>\nwhen that line should get skipped.</p>\n\n<p><b>Warning:</b> this logic is applied globally: on all dispatchers.</p>\n",
         "id" : "id1189",
         "examples" : [
            "id1190"
         ],
         "name" : "addSkipStack"
      },
      "id986-id221" : {
         "call" : "$obj-&gt;<b><a name=\"id986\">domain</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id986\">Log::Report::Message::domain()</a></p>",
         "id" : "id986-id221",
         "name" : "domain",
         "extends" : "id986"
      },
      "id1179-id1217" : {
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "type" : "i_method",
         "id" : "id1179-id1217",
         "extends" : "id1179",
         "name" : "name"
      },
      "id547" : {
         "name" : "Translating",
         "level" : 2,
         "path" : "METHODS/Translating",
         "id" : "id547",
         "type" : "section",
         "subroutines" : [
            "id548",
            "id1090-id542"
         ]
      },
      "id1265" : {
         "params" : "REASON",
         "id" : "id1265",
         "type" : "option",
         "name" : "on_die"
      },
      "id1173-id780" : {
         "params" : "CHARSET",
         "id" : "id1173-id780",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "type" : "option",
         "name" : "charset",
         "extends" : "id1173"
      },
      "id994" : {
         "call" : "$obj-&gt;<b><a name=\"id994\">errno</a></b>(&nbsp;[$errno]&nbsp;)",
         "intro" : "<p>[1.38] Returns the value of the <code>_errno</code> key, to indicate the error\nnumber (to be returned from your script).  Usually, this method will\nreturn <code>undef</code>.  For FAILURE, FAULT, and ALERT, the errno is by default\ntaken from <code>$!</code> and <code>$?</code>.</p>\n",
         "id" : "id994",
         "type" : "i_method",
         "name" : "errno"
      },
      "id1186-id1066" : {
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1186\">Log::Report::Dispatcher::log()</a></p>",
         "type" : "i_method",
         "id" : "id1186-id1066",
         "name" : "log",
         "extends" : "id1186"
      },
      "id1124" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "id" : "id1124",
         "intro" : "<pre>  # internal usage\n  use Log::Report::Domain;\n  my $domain = Log::Report::Domain-&gt;new(name =&gt; $name);\n\n  # find a ::Domain object\n  use Log::Report 'my-domain';\n  my $domain = textdomain 'my-domain'; # find domain config\n  my $domain = textdomain;             # config of this package\n\n  # explicit domain configuration\n  package My::Package;\n  use Log::Report 'my-domain';         # set textdomain for package\n\n  textdomain $name, %configure;        # set config, once per program\n  (textdomain $name)-&gt;configure(%configure); # same\n  textdomain-&gt;configure(%configure);   # same if current package in $name\n\n  # implicit domain configuration\n  package My::Package;\n  use Log::Report 'my-domain', %configure;\n\n  # external file for configuration (perl or json format)\n  use Log::Report 'my-domain', config =&gt; $filename;\n\n  use Log::Report 'my-domain';\n  textdomain-&gt;configure(config =&gt; $filename);\n</pre>\n",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id1004" : {
         "examples" : [
            "id1005"
         ],
         "name" : "concat",
         "call" : "$obj-&gt;<b><a name=\"id1004\">concat</a></b>(&nbsp;$text|$message, [$prepend]&nbsp;)",
         "intro" : "<p>This method implements the overloading of concatenation, which is used\nto delay translations even longer.  When <tt class=\"parameter\">$prepend</tt> is <code>true</code>, the <tt class=\"parameter\">$text</tt>\nor <tt class=\"parameter\">$message</tt> (another <code>Log::Report::Message</code>) will be prepended, otherwise\nit is appended in the final display.</p>\n",
         "id" : "id1004",
         "type" : "i_method"
      },
      "id1206" : {
         "name" : "max_params",
         "params" : "INTEGER",
         "id" : "id1206",
         "type" : "option"
      },
      "id185" : {
         "subroutine" : "id180",
         "name" : "token '$token' not recognized as reason",
         "id" : "id185",
         "type" : "error"
      },
      "id1209-id1066" : {
         "name" : "abstract",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "extends" : "id1209",
         "value" : "1",
         "id" : "id1209-id1066",
         "type" : "default"
      },
      "id1012" : {
         "path" : "DETAILS/Message-IDs",
         "type" : "section",
         "intro" : "<p>An exception message as a string is pretty inflexible.  It cannot\nbe translated anymore, and it cannot contain related information\nlike an error code.  An exception message as an object (as this\nmodule implements) is able to contain additional information.</p>\n\n<p>The easiest way to create <a class=\"jump\" href=\"id935\">Log::Report::Message</a> objects, is via the\n<code>__x()</code> (and friends) functions which are exported by <a class=\"jump\" href=\"id801\">Log::Report</a>.\nThese are nearly equivalent:</p>\n<pre>\n  my $msg = Log::Report::Message-&gt;new(_msgid =&gt; \"Hello, World!\");\n  my $msg = __\"Hello, World!\";\n</pre>\n\n<p>The name <code>msgid</code> is used, because this object can do translations.\nIn the GNU gettext library for translations, the term <code>msgid</code> is\nused to describe the string which has to be looked-up in translation\ntables.  When there are no tables, or the <code>msgid</code> is not found,\nthen the output string is equivalent to the <code>msgid</code>.</p>\n\n<p>So, without any translation configuration, this happens:</p>\n<pre>\n  my $msg = __\"Hello, World!\";\n  print \"$msg\\n\";      # Hello, World!⏎\n</pre>\n\n<p>The <code>__()</code> function can be used with a static string, although you\ncould do this:</p>\n<pre>\n  my $msg = __\"Hello $name!\";      #XXX Don't do this!\n  print \"$msg\\n\";      # Hello Mark!⏎\n</pre>\n\n<p>With the <code>__x()</code> or <code>__nx()</code>, interpolation will take place on the\n(optionally) translated <code>msgid</code> string.  This is how to write above:</p>\n<pre>\n  my $msg = __x\"Hello {name}!\", name =&gt; $name;\n</pre>\n\n<p>So: the <code>msgid</code> is usually a <i>format string</i>.  Only when you use\nformats correctly, you will be able to introduce translation later.</p>\n",
         "id" : "id1012",
         "name" : "Message-IDs",
         "level" : 2
      },
      "id931" : {
         "path" : "METHODS/Attributes",
         "id" : "id931",
         "type" : "section",
         "subroutines" : [
            "id1180-id905",
            "id1179-id905",
            "id1183-id905",
            "id1181-id905",
            "id1182-id905",
            "id932"
         ],
         "name" : "Attributes",
         "level" : 2
      },
      "id768" : {
         "name" : "to_level",
         "id" : "id768",
         "value" : "[]",
         "type" : "default"
      },
      "id1121" : {
         "intro" : "<p>This profile will log DBIx::Class queries via <a class=\"jump\" href=\"id801\">Log::Report</a> to a\nselected back-end (via a dispatcher, see <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>)</p>\n",
         "type" : "chapter",
         "id" : "id1121",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id137" : {
         "intro" : "<p>Replace all escape characters into their readable counterpart.  For\ninstance, a new-line is replaced by backslash-n.</p>\n",
         "type" : "function",
         "id" : "id137",
         "call" : "<b><a name=\"id137\">escape_chars</a></b>(&nbsp;STRING&nbsp;)",
         "name" : "escape_chars"
      },
      "id1140-id385" : {
         "extends" : "id1140",
         "name" : "config",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1140\">Log::Report::Domain::configure(config)</a></p>",
         "type" : "option",
         "id" : "id1140-id385",
         "params" : "$file"
      },
      "id1001" : {
         "call" : "$obj-&gt;<b><a name=\"id1001\">toHTML</a></b>(&nbsp;[$locale]&nbsp;)",
         "intro" : "<p>[1.11] Translate the message, and then entity encode HTML volatile characters.</p>\n\n<p>[1.20] When used in combination with a templating system, you may want to\nuse <code>content_for =&gt; 'HTML'</code> in <a class=\"jump\" href=\"id168\">Log::Report::Domain::configure(formatter)</a>.</p>\n",
         "id" : "id1001",
         "type" : "i_method",
         "name" : "toHTML",
         "examples" : [
            "id1002"
         ]
      },
      "id381" : {
         "level" : 1,
         "name" : "DETAILS",
         "path" : "DETAILS",
         "nest" : [
            "id382",
            "id384"
         ],
         "id" : "id381",
         "type" : "chapter"
      },
      "id754-id561" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id753\">Log::Report::Lexicon::Table::setupPluralAlgorithm()</a></p>",
         "id" : "id754-id561",
         "type" : "error",
         "extends" : "id754",
         "name" : "invalid plural-form algorithm '$alg'.",
         "subroutine" : "id753"
      },
      "id860" : {
         "name" : "of <a class=\"jump\" href=\"id859\">N__w()</a>\n",
         "id" : "id860",
         "intro" : "<pre>  my @colors = (N__\"red\", N__\"green\", N__\"blue\");\n  my @colors = N__w\"red green blue\";  # same\n  print __ $colors[1];\n</pre>\n",
         "type" : "example"
      },
      "id681" : {
         "name" : "version",
         "value" : "<code>undef</code>",
         "id" : "id681",
         "type" : "default"
      },
      "id1248" : {
         "type" : "error",
         "id" : "id1248",
         "name" : "message() of exception expects Log::Report::Message, got $what.",
         "subroutine" : "id1246"
      },
      "id782" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "id" : "id782",
         "intro" : "<pre>  # start using log4perl via a config file\n  # The name of the dispatcher is the name of the default category.\n  dispatcher LOG4PERL =&gt; 'logger',\n    accept =&gt; 'NOTICE-',\n    config =&gt; \"$ENV{HOME}/.log.conf\";\n\n  # disable default dispatcher\n  dispatcher close =&gt; 'logger';\n\n  # configuration inline, not in file: adapted from the Log4perl manpage\n  my $name    = 'logger';\n  my $outfile = '/tmp/a.log';\n  my $config  = &lt;&lt;__CONFIG;\n  log4perl.category.$name            = INFO, Logfile\n  log4perl.logger.Logfile          = Log::Log4perl::Appender::File\n  log4perl.logger.Logfile.filename = $outfn\n  log4perl.logger.Logfile.layout   = Log::Log4perl::Layout::PatternLayout\n  log4perl.logger.Logfile.layout.ConversionPattern = %d %F{1} %L> %m\n  __CONFIG\n\n  dispatcher LOG4PERL =&gt; $name, config =&gt; \\$config;\n</pre>\n",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id942-id221" : {
         "extends" : "id942",
         "name" : "'.'",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id942\">Log::Report::Message::'.'()</a></p>",
         "type" : "overload",
         "id" : "id942-id221",
         "call" : "overload <b><a name=\"id942\">'.'</a></b>; concatenation"
      },
      "id465" : {
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1,
         "type" : "chapter",
         "id" : "id465",
         "nest" : [
            "id466",
            "id486",
            "id490"
         ]
      },
      "id1196" : {
         "name" : "filename",
         "type" : "option",
         "id" : "id1196",
         "params" : "STRING"
      },
      "id399" : {
         "name" : "templater",
         "value" : "&lt;required&gt;",
         "id" : "id399",
         "type" : "default"
      },
      "id1199-id1066" : {
         "extends" : "id1199",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "id" : "id1199-id1066",
         "name" : "linenr",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>"
      },
      "id592" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "type" : "section",
         "id" : "id592",
         "subroutines" : [
            "id593"
         ]
      },
      "id232" : {
         "name" : "bootstrapColor",
         "call" : "$obj-&gt;<b><a name=\"id232\">bootstrapColor</a></b>",
         "id" : "id232",
         "intro" : "<p>[2.03] Get a suitable bootstrap context color for the message. This can be\nused as per the SYNOPSIS.</p>\n\n<p>CSS class <code>success</code> is used for <a class=\"jump\" href=\"id274\">Dancer2::Plugin::LogReport::success()</a>\nmessages, <code>info</code> colors are used for messages <code>notice</code> and below,\n<code>warning</code> is used for <code>warning</code> and <code>mistake</code>, <code>danger</code> is used for\nall other messages.</p>\n",
         "type" : "i_method"
      },
      "id699" : {
         "subroutine" : "id695",
         "name" : "cannot read from file $fn (unknown charset): $!",
         "id" : "id699",
         "type" : "fault"
      },
      "id1168-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "name" : "locale",
         "value" : "&lt;system locale&gt;",
         "type" : "default",
         "id" : "id1168-id1021",
         "extends" : "id1168"
      },
      "id349" : {
         "id" : "id349",
         "type" : "section",
         "nest" : [
            "id350",
            "id351",
            "id352",
            "id353"
         ],
         "intro" : "<p>You may define a textdomain without doing any translations (yet)  However,\nwhen you start translating, you will need to maintain translation tables\nwhich are in PO-format.  PO-files can be maintained with a wide variety\nof tools, for instance poedit, Pootle, virtaal, GTranslator, Lokalize,\nor Webtranslateit.</p>\n",
         "path" : "DETAILS/Extracting PO-files",
         "level" : 2,
         "name" : "Extracting PO-files"
      },
      "id542" : {
         "chapters" : [
            "id543",
            "id1356",
            "id544",
            "id545",
            "id546"
         ],
         "name" : "Log::Report::Translator::Gettext",
         "version" : "1.16",
         "is_pure_pod" : false,
         "distribution" : "Log-Report-Lexicon",
         "package" : "Log::Report::Translator::Gettext",
         "id" : "id542",
         "inheritance" : {
            "extends" : [
               "Log::Report::Translator"
            ]
         },
         "title" : "the GNU gettext infrastructure"
      },
      "id285" : {
         "path" : "DETAILS/In Use/Sending messages to the user",
         "intro" : "<p>To make it easier to send messages to your users, messages at the following\nlevels are also stored in the user's session: <code>notice</code>, <code>warning</code>, <code>mistake</code>,\n<code>error</code>, <code>fault</code>, <code>alert</code>, <code>failure</code> and <code>panic</code>.</p>\n\n<p>You can pass these to your template and display them at each page render:</p>\n<pre>\n  hook before_template =&gt; sub {\n    my $tokens = shift;\n    $tokens-&gt;{messages} = session 'messages';\n    session 'messages' =&gt; []; # Clear the message queue\n  }\n</pre>\n\n<p>Then in your template (for example the main layout):</p>\n<pre>\n  [% FOR message IN messages %]\n    &lt;div class=\"alert alert-[% message.bootstrap_color %]\"&gt;\n      [% message.toString | html_entity %]\n    &lt;/div&gt;\n  [% END %]\n</pre>\n\n<p>The <code>bootstrap_color</code> of the message is compatible with Bootstrap contextual\ncolors: <code>success</code>, <code>info</code>, <code>warning</code> or <code>danger</code>.</p>\n\n<p>When you use <a class=\"jump\" href=\"id237\">Dancer2::Template::TTLogReport</a> as well, which enables the\ntranslations of your whole templates, then add <code>locale</code>:</p>\n<pre>\n  [% message.toString(locale) | html_entity %]\n</pre>\n\n<p>Now, anywhere in your application that you have used <a class=\"jump\" href=\"id801\">Log::Report</a>, you can</p>\n<pre>\n  warning \"Hey user, you should now about this\";\n</pre>\n\n<p>and the message will be sent to the next page the user sees.</p>\n",
         "id" : "id285",
         "type" : "subsection",
         "name" : "Sending messages to the user",
         "level" : 3
      },
      "id438" : {
         "diagnostics" : [
            "id439",
            "id440"
         ],
         "call" : "$obj-&gt;<b><a name=\"id438\">translate</a></b>(&nbsp;$msg, $lang, $context&nbsp;)",
         "id" : "id438",
         "type" : "i_method",
         "name" : "translate"
      },
      "id1153-id385" : {
         "call" : "$obj-&gt;<b><a name=\"id1153\">translate</a></b>(&nbsp;$message, $language&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1153\">Log::Report::Domain::translate()</a></p>",
         "id" : "id1153-id385",
         "type" : "i_method",
         "name" : "translate",
         "extends" : "id1153"
      },
      "id649" : {
         "type" : "i_method",
         "intro" : "<p>Remove all references which are not found as key in the hash <tt class=\"parameter\">$table</tt>.\nReturns the number of references left.</p>\n",
         "id" : "id649",
         "call" : "$obj-&gt;<b><a name=\"id649\">keepReferencesTo</a></b>(&nbsp;$table&nbsp;)",
         "name" : "keepReferencesTo"
      },
      "id751-id461" : {
         "extends" : "id751",
         "type" : "i_method",
         "id" : "id751-id461",
         "call" : "$obj-&gt;<b><a name=\"id751\">pluralIndex</a></b>(&nbsp;$count&nbsp;)",
         "diagnostics" : [
            "id752-id461"
         ],
         "name" : "pluralIndex",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id751\">Log::Report::Lexicon::Table::pluralIndex()</a></p>"
      },
      "id703" : {
         "type" : "i_method",
         "id" : "id703",
         "options" : [
            [
               "id704",
               "id705"
            ]
         ],
         "call" : "$obj-&gt;<b><a name=\"id703\">write</a></b>(&nbsp;[$filename|$fh], %options&nbsp;)",
         "diagnostics" : [
            "id706",
            "id707",
            "id708"
         ],
         "name" : "write",
         "intro" : "<p>When you pass an open <tt class=\"parameter\">$fh</tt>, you are yourself responsible that\nthe correct character-encoding (binmode) is set.  When the write\nfollowed a <a class=\"jump\" href=\"id695\">read()</a> or the filename was explicitly set with <a class=\"jump\" href=\"id712\">filename()</a>,\nthen you may omit the first parameter.</p>\n"
      },
      "id735" : {
         "chapters" : [
            "id736",
            "id1332",
            "id737",
            "id738",
            "id739"
         ],
         "name" : "Log::Report::Lexicon::Table",
         "version" : "1.16",
         "is_pure_pod" : false,
         "package" : "Log::Report::Lexicon::Table",
         "distribution" : "Log-Report-Lexicon",
         "id" : "id735",
         "inheritance" : {
            "extended_by" : [
               "Log::Report::Lexicon::MOTcompact",
               "Log::Report::Lexicon::POT",
               "Log::Report::Lexicon::POTcompact"
            ]
         },
         "title" : "generic interface to translation tables"
      },
      "id992-id221" : {
         "name" : "addTags",
         "extends" : "id992",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id992\">Log::Report::Message::addTags()</a></p>",
         "id" : "id992-id221",
         "call" : "$obj-&gt;<b><a name=\"id992\">addTags</a></b>(&nbsp;@tags&nbsp;)"
      },
      "id1174" : {
         "name" : "charset",
         "value" : "<code>undef</code>",
         "id" : "id1174",
         "type" : "default"
      },
      "id1133" : {
         "id" : "id1133",
         "type" : "i_method",
         "options" : [
            [
               "id1140",
               "id1141"
            ],
            [
               "id1138",
               "id1139"
            ],
            [
               "id168-id1122",
               "id169-id1122"
            ],
            [
               "id1136",
               "id1137"
            ],
            [
               "id1134",
               "id1135"
            ],
            [
               "id166-id1122",
               "id167-id1122"
            ]
         ],
         "diagnostics" : [
            "id1142",
            "id1143"
         ],
         "call" : "$obj-&gt;<b><a name=\"id1133\">configure</a></b>(&nbsp;%options&nbsp;)",
         "name" : "configure",
         "intro" : "<p>The import is automatically called when the package is compiled.  For all\nbut one packages in your distribution, it will only contain the name of\nthe DOMAIN.  For one package, it will contain configuration information.\nThese <tt class=\"parameter\">%options</tt> are used for all packages which use the same DOMAIN.\nSee chapter <a class=\"jump\" href=\"id1155\">Configuring</a> below.</p>\n"
      },
      "id787" : {
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS",
         "id" : "id787",
         "type" : "chapter",
         "nest" : [
            "id788",
            "id796",
            "id798"
         ]
      },
      "id947-id221" : {
         "value" : "<code>false</code>",
         "id" : "id947-id221",
         "type" : "default",
         "extends" : "id947",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id946\">Log::Report::Message::new(_expand)</a></p>",
         "name" : "_expand"
      },
      "id1015" : {
         "path" : "DETAILS/Messages with plural forms/Interpolation with String::Print",
         "id" : "id1015",
         "intro" : "<p>There is no way of checking beforehand whether you have provided all\nrequired values, to be interpolated in the translated string.</p>\n\n<p>This <a class=\"jump\" href=\"id935\">Log::Report::Message</a> uses <a class=\"jump\" href=\"id47\">String::Print</a> to handle formatted strings.\nOn object of that module is hidden in the logic of <code>__x()</code> and friends.</p>\n\n<p><a class=\"jump\" href=\"id47\">String::Print</a> is a very capable format string processor, and you should\nreally <b>read its manual</b> page to see how it can help you.  It would be\npossible to support an other formatter (pretty simple even), but this is\nnot (yet) supported.</p>\n",
         "type" : "subsection",
         "name" : "Interpolation with String::Print",
         "examples" : [
            "id1016"
         ],
         "level" : 3
      },
      "id1183-id1021" : {
         "call" : "$obj-&gt;<b><a name=\"id1183\">needs</a></b>(&nbsp;[$reason]&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1183\">Log::Report::Dispatcher::needs()</a></p>",
         "type" : "i_method",
         "id" : "id1183-id1021",
         "extends" : "id1183",
         "name" : "needs"
      },
      "id586" : {
         "path" : "DESCRIPTION",
         "intro" : "<p>[Added in <a class=\"jump\" href=\"id801\">Log::Report</a> v1.00]\nThe \"contexts\" concept in (GNU's version of) gettext, has a\nvery restricted purpose: to separate two (accidental) uses of the\nsame message-id, under different circumstances.  The same msgid may\ntranslated diffently in one file or the other.</p>\n\n<p>For instance, two libraries used in the same application, or two\ncomponentent within a single library both want to used the same\ndefault text (which usually is very short)</p>\n<pre>\n  char * t1 = pgettext('interface', 'None');\n  char * t2 = pgettext('selections', 'None');\n</pre>\n\n<p>Some translation setups use the library name consequently as msgctxt.\nBut, the name \"context\" is pretending much more power than the gettext\nlibraries are capable of: it usually only behaves like a namespace.</p>\n\n<p>For <a class=\"jump\" href=\"id801\">Log::Report</a>, the power of \"context\" is extended with selecting\nbetween alternatives for the use of a msgid <b>on the same spot</b>.</p>\n\n<p>For instance, the gender of the user of the website determines whether\n`he' or `she' needs to be used in the translation.  In this example,\nthe gender is set as context keyword in the message:</p>\n<pre>\n  my ($name, $sex) = ('Jack', 'male');\n  print __x\"{name&lt;gender} found his key\", name =&gt; $name,\n    _context =&gt; \"gender=$sex\";\n</pre>\n",
         "id" : "id586",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id778" : {
         "level" : 2,
         "name" : "Logging",
         "subroutines" : [
            "id1186-id760",
            "id1189-id760",
            "id1188-id760",
            "id1185-id760",
            "id1192-id760",
            "id1191-id760",
            "id1193-id760",
            "id1187-id760",
            "id779"
         ],
         "id" : "id778",
         "type" : "section",
         "path" : "METHODS/Logging"
      },
      "id132" : {
         "name" : "mode_number",
         "id" : "id132",
         "intro" : "<p>Returns the <tt class=\"parameter\">$mode</tt> as number.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id132\">mode_number</a></b>(&nbsp;$name|$mode&nbsp;)"
      },
      "id870" : {
         "intro" : "<p>This sets the default mode for all created dispatchers.  You can\nalso selectively change the output mode, like</p><pre>\n  dispatcher PERL =&gt; 'default', mode =&gt; 3\n</pre>\n",
         "id" : "id870",
         "type" : "option",
         "params" : "LEVEL",
         "name" : "mode"
      },
      "id1181-id1217" : {
         "name" : "mode",
         "extends" : "id1181",
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "id" : "id1181-id1217"
      },
      "id1171" : {
         "name" : "format_reason",
         "id" : "id1171",
         "intro" : "<p>How to show the reason text which is printed before the message. When\na CODE is specified, it will be called with a translated text and the\nreturned text is used.</p>\n",
         "type" : "option",
         "params" : "'UPPERCASE'|'LOWERCASE'|'UCFIRST'|'IGNORE'|CODE"
      },
      "id796" : {
         "subroutines" : [
            "id1180-id780",
            "id1179-id780",
            "id1183-id780",
            "id1181-id780",
            "id1182-id780",
            "id797"
         ],
         "type" : "section",
         "id" : "id796",
         "path" : "METHODS/Attributes",
         "level" : 2,
         "name" : "Attributes"
      },
      "id1262" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>This module is used internally, to translate output of 'die' and Carp\nfunctions into <a class=\"jump\" href=\"id935\">Log::Report::Message</a> objects.  Also, it tries to\nconvert other kinds of exception frameworks into our message object.</p>\n",
         "id" : "id1262",
         "type" : "chapter"
      },
      "id416" : {
         "name" : "no counting positional for '$msgid'",
         "subroutine" : "id412",
         "id" : "id416",
         "type" : "error"
      },
      "id475" : {
         "name" : "cannot seek to $loc in $fn for originals: $!",
         "subroutine" : "id467",
         "type" : "fault",
         "id" : "id475"
      },
      "id237" : {
         "version" : "2.03",
         "chapters" : [
            "id238",
            "id1350",
            "id239",
            "id240",
            "id241",
            "id249"
         ],
         "name" : "Dancer2::Template::TTLogReport",
         "inheritance" : {
            "extends" : [
               "Moo::Object"
            ]
         },
         "id" : "id237",
         "title" : "Template toolkit engine with Log::Report translations for Dancer2",
         "is_pure_pod" : false,
         "package" : "Dancer2::Template::TTLogReport",
         "distribution" : "Dancer2-Plugin-LogReport"
      },
      "id597" : {
         "id" : "id597",
         "type" : "warning",
         "subroutine" : "id595",
         "name" : "no value for tag `$tag' in the context"
      },
      "id1058" : {
         "call" : "$obj-&gt;<b><a name=\"id1058\">showStatus</a></b>",
         "intro" : "<p>If this object is kept in <code>$@</code>, and someone uses this as string, we\nwant to show the fatal error message.</p>\n\n<p>The message is not very informative for the good cause: we do not want\npeople to simply print the <code>$@</code>, but wish for a re-cast of the message\nusing <a class=\"jump\" href=\"id1048\">reportAll()</a> or <a class=\"jump\" href=\"id1049\">reportFatal()</a>.</p>\n",
         "id" : "id1058",
         "type" : "i_method",
         "name" : "showStatus"
      },
      "id1338" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Extract is extended by\n   <a class=\"jump\" href=\"id493\">Log::Report::Extract::PerlPPI</a>\n   <a class=\"jump\" href=\"id354\">Log::Report::Template::Extract</a>\n</pre>\n",
         "id" : "id1338"
      },
      "id1187-id1091" : {
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)",
         "id" : "id1187-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "type" : "i_method",
         "extends" : "id1187",
         "name" : "translate"
      },
      "id1200-id780" : {
         "params" : "STRING",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "id" : "id1200-id780",
         "type" : "option",
         "name" : "call",
         "extends" : "id1200"
      },
      "id944" : {
         "name" : "Constructors",
         "level" : 2,
         "path" : "METHODS/Constructors",
         "type" : "section",
         "id" : "id944",
         "subroutines" : [
            "id980",
            "id945"
         ]
      },
      "id495" : {
         "intro" : "<pre>  my $ppi = Log::Report::Extract::PerlPPI-&gt;new(\n    lexicon =&gt; '/usr/share/locale',\n  );\n  $ppi-&gt;process('lib/My/Pkg.pm');  # call for each .pm file\n  $ppi-&gt;showStats;                 # optional\n  $ppi-&gt;write;\n\n  # See script  xgettext-perl\n  bin/xgettext-perl -p $lexdir @source_dirs\n</pre>\n",
         "id" : "id495",
         "type" : "chapter",
         "path" : "SYNOPSIS",
         "level" : 1,
         "name" : "SYNOPSIS"
      },
      "id588" : {
         "name" : "Constructors",
         "level" : 2,
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id589"
         ],
         "id" : "id588",
         "type" : "section"
      },
      "id715" : {
         "intro" : "<p>Lookup the <a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a> with the <tt class=\"parameter\">STRING</tt>.  If you\nwant to add a new translation, use <a class=\"jump\" href=\"id717\">add()</a>.  Returns <code>undef</code>\nwhen not defined.</p>\n",
         "type" : "i_method",
         "id" : "id715",
         "call" : "$obj-&gt;<b><a name=\"id715\">msgid</a></b>(&nbsp;STRING, [$msgctxt]&nbsp;)",
         "name" : "msgid"
      },
      "id776" : {
         "level" : 2,
         "name" : "Attributes",
         "type" : "section",
         "id" : "id776",
         "subroutines" : [
            "id1180-id760",
            "id1179-id760",
            "id1183-id760",
            "id1181-id760",
            "id1182-id760",
            "id777"
         ],
         "path" : "METHODS/Attributes"
      },
      "id369" : {
         "name" : "Processors",
         "level" : 2,
         "path" : "METHODS/Processors",
         "subroutines" : [
            "id538-id354",
            "id534-id354",
            "id370",
            "id540-id354",
            "id537-id354"
         ],
         "type" : "section",
         "id" : "id369"
      },
      "id1250" : {
         "name" : "taggedWith",
         "call" : "$obj-&gt;<b><a name=\"id1250\">taggedWith</a></b>(&nbsp;$tag|Regexp&nbsp;)",
         "intro" : "<p>[1.44] Check whether any of the classes listed in the message match <tt class=\"parameter\">$tag</tt>\n(string) or the Regexp.  This uses <a class=\"jump\" href=\"id998\">Log::Report::Message::taggedWith()</a>.</p>\n",
         "id" : "id1250",
         "type" : "i_method"
      },
      "id577" : {
         "name" : "filename",
         "intro" : "<p>Returns the name of the source file for this data.</p>\n",
         "id" : "id577",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id577\">filename</a></b>"
      },
      "id669" : {
         "version" : "1.16",
         "chapters" : [
            "id670",
            "id1339",
            "id671",
            "id672",
            "id673"
         ],
         "name" : "Log::Report::Lexicon::POT",
         "title" : "manage PO files",
         "inheritance" : {
            "extends" : [
               "Log::Report::Lexicon::Table"
            ]
         },
         "id" : "id669",
         "distribution" : "Log-Report-Lexicon",
         "package" : "Log::Report::Lexicon::POT",
         "is_pure_pod" : false
      },
      "id1192-id905" : {
         "extends" : "id1192",
         "name" : "collectLocation",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>",
         "id" : "id1192-id905",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "type" : "ci_method"
      },
      "id562" : {
         "path" : "NAME",
         "id" : "id562",
         "intro" : "<p>Log::Report::Lexicon::POTcompact - use translations from a POT file</p>\n",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id798" : {
         "level" : 2,
         "name" : "Logging",
         "subroutines" : [
            "id1186-id780",
            "id1189-id780",
            "id1188-id780",
            "id1185-id780",
            "id1192-id780",
            "id1191-id780",
            "id1193-id780",
            "id1187-id780",
            "id799"
         ],
         "type" : "section",
         "id" : "id798",
         "path" : "METHODS/Logging"
      },
      "id418" : {
         "subroutine" : "id412",
         "name" : "Missing key '$key' in format '$format', in $use //template",
         "type" : "warning",
         "id" : "id418"
      },
      "id1282" : {
         "level" : 3,
         "name" : "Avoiding repetative translations",
         "type" : "subsection",
         "id" : "id1282",
         "path" : "DETAILS/Automatic parameters/Avoiding repetative translations"
      },
      "id1167-id1091" : {
         "extends" : "id1167",
         "name" : "locale",
         "id" : "id1167-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "type" : "option",
         "params" : "LOCALE"
      },
      "id890" : {
         "path" : "DETAILS/Introduction/Background ideas",
         "intro" : "<p>The following ideas are the base of this implementation:</p>\n\n<ul>\n\n\n\n<p><li>simplification<br />\nHandling errors and warnings is probably the most labor-intensive\ntask for a programmer: when programs are written correctly, up-to\nthree-quarters of the code is related to testing, reporting, and\nhandling (problem) conditions.  Simplifying the way to create reports,\nsimplifies programming and maintenance.</p>\n\n\n\n<p><li>multiple dispatchers<br />\nIt is not the location where the (for instance) error occurs which\ndetermines what will happen with the text, but the main application which\nuses the the complaining module has control.  Messages have a reason.\nBased on the `reason' classification, they can get ignored, send to one\nor multiple dispatchers, like Log::Dispatch, Log::Log4perl,\nor UNIX syslog.</p>\n\n\n\n<p><li>delayed translations<br />\nThe background ideas are that of Locale::TextDomain, based\non <code>gettext()</code>.  However, in the <code>Log::Report</code> infrastructure,\ntranslations are postponed until the text is dispatched to a screen\nor log-file; the same report can be sent to syslog in (for instance)\nEnglish and to the user interface in Dutch.</p>\n\n\n\n<p><li>context sensitive<br />\nUsing contexts, you can set-up how to translate or rewrite messages,\nto improve messages.  A typical problem is whether to use gender in\ntext (use 'his' or 'her'): you can set a gender in a context, and the\nuse translation tables to pick the right one.</p>\n</ul>\n",
         "id" : "id890",
         "type" : "subsection",
         "name" : "Background ideas",
         "level" : 3
      },
      "id1188-id1021" : {
         "name" : "collectStack",
         "extends" : "id1188",
         "call" : "$any-&gt;<b><a name=\"id1188\">collectStack</a></b>(&nbsp;[$maxdepth]&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1188\">Log::Report::Dispatcher::collectStack()</a></p>",
         "type" : "ci_method",
         "id" : "id1188-id1021"
      },
      "id1138" : {
         "id" : "id1138",
         "intro" : "<p>When <tt class=\"parameter\">%rules</tt> are provided, the translator will use the <code>msgctxt</code> fields\nas provided by PO-files (gettext).  This parameter is used to initialize\na <a class=\"jump\" href=\"id583\">Log::Report::Translator::Context</a> helper object.</p>\n",
         "type" : "option",
         "params" : "\\%rules|OBJECT",
         "name" : "context_rules"
      },
      "id967-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id966\">Log::Report::Message::new(_classes)</a></p>",
         "name" : "_classes",
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id967-id221",
         "extends" : "id967"
      },
      "id1202-id905" : {
         "params" : "ARRAY",
         "id" : "id1202-id905",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "type" : "option",
         "name" : "params",
         "extends" : "id1202"
      },
      "id217" : {
         "inheritance" : {
            "extends" : [
               "Dancer::Logger::Abstract",
               "Exporter"
            ]
         },
         "id" : "id217",
         "title" : "reroute Dancer logs into Log::Report",
         "is_pure_pod" : false,
         "package" : "Dancer::Logger::LogReport",
         "distribution" : "Dancer2-Plugin-LogReport",
         "version" : "2.03",
         "chapters" : [
            "id218",
            "id1343",
            "id219",
            "id220"
         ],
         "name" : "Dancer::Logger::LogReport"
      },
      "id436" : {
         "name" : "charset",
         "call" : "$obj-&gt;<b><a name=\"id436\">charset</a></b>",
         "intro" : "<p>Returns the default charset, which can be overrule by the locale.</p>\n",
         "type" : "i_method",
         "id" : "id436"
      },
      "id972-id221" : {
         "extends" : "id972",
         "name" : "_join",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id972\">Log::Report::Message::new(_join)</a></p>",
         "id" : "id972-id221",
         "params" : "$separator"
      },
      "id100" : {
         "intro" : "<p>[0.91] Too often, you have to translate a (file) size into humanly readible\nformat.  The <code>BYTES</code> modifier simplifies this a lot:</p>\n<pre>\n  printp \"{size BYTES} {fn}\\n\", fn =&gt; $fn, size =&gt; -s $fn;\n</pre>\n\n<p>The output will always be 5 characters.  Examples are \"999 B\", \"1.2kB\",\nand \" 27MB\".</p>\n",
         "type" : "subsection",
         "id" : "id100",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: BYTES",
         "level" : 3,
         "name" : "Modifier: BYTES"
      },
      "id72" : {
         "intro" : "<p>The following are provided both as method and as function.  The function\nversion is explained further down on this page, because it reads a bit\neasier, but the object version is most flexible.</p>\n<pre>\n  my $sp = String::Print-&gt;new;\n  $sp-&gt;printi([$fh], $format, %data|\\%data);        # see <a class=\"jump\" href=\"id85\">printi()</a>\n  $sp-&gt;printp([$fh], $format, @params, %options);   # see <a class=\"jump\" href=\"id86\">printp()</a>\n  my $s = $sp-&gt;sprinti($format, %data|\\%data);      # see <a class=\"jump\" href=\"id76\">sprinti()</a>\n  my $s = $sp-&gt;sprintp($format, @params, %options); # see <a class=\"jump\" href=\"id87\">sprintp()</a>\n</pre>\n",
         "id" : "id72",
         "type" : "section",
         "path" : "METHODS/Printing",
         "level" : 2,
         "examples" : [
            "id73"
         ],
         "name" : "Printing"
      },
      "id112" : {
         "level" : 3,
         "name" : "Output encoding exclusion",
         "type" : "subsection",
         "intro" : "<p>In some cases, the data which is inserted is already encoded in the\noutput syntax.  For instance, you already have HTML to be included.</p>\n\n<p>The default exclusion rule for HTML output is <code>qr/html$/i</code>, which\nmeans that all inserted named parameters, where the name ends on <code>html</code>\nwill not get html-entity encoded.</p>\n\n<p>This will work by default:</p>\n<pre>\n  # with encodeFor('HTML')\n  printp \"Me &amp; Co: {name}, {description_html}\",\n     name =&gt; 'RenE&lt;eacute>', description_html =&gt; $descr;\n</pre>\n\n<p>This may result in:</p>\n<pre>\n  Me &amp;amp; Co: RenE&lt;amp>eacute;, &lt;font color=\"red\"&gt;new member&lt;/font>\n</pre>\n\n<p>Better not to have HTML in your program: leave it to the template.  But\nin some cases, you have no choice.</p>\n",
         "id" : "id112",
         "path" : "DETAILS/Output encoding/Output encoding exclusion"
      },
      "id522-id493" : {
         "extends" : "id522",
         "name" : "charset",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id522\">Log::Report::Extract::new(charset)</a></p>",
         "id" : "id522-id493",
         "params" : "$charset"
      },
      "id1053" : {
         "name" : "wasFatal",
         "call" : "$obj-&gt;<b><a name=\"id1053\">wasFatal</a></b>(&nbsp;%options&nbsp;)",
         "options" : [
            [
               "id1056",
               "id1057"
            ],
            [
               "id1054",
               "id1055"
            ]
         ],
         "intro" : "<p>Returns the <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a> which caused the \"try\" block to\ndie, otherwise an empty LIST (<code>undef</code>).</p>\n",
         "type" : "i_method",
         "id" : "id1053"
      },
      "id964" : {
         "intro" : "<p>Alternative name for <tt class=\"parameter\">_tag</tt></p>\n",
         "type" : "option",
         "id" : "id964",
         "params" : "$tags|\\@tags",
         "name" : "_tags"
      },
      "id1164-id1217" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1164\">Log::Report::Dispatcher::new()</a></p>",
         "name" : "new",
         "diagnostics" : [
            "id1175-id1217",
            "id1176-id1217",
            "id1177-id1217"
         ],
         "call" : "$class-&gt;<b><a name=\"id1164\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "options" : [
            [
               "id1165-id1217",
               "id1166-id1217"
            ],
            [
               "id1173-id1217",
               "id1174-id1217"
            ],
            [
               "id1171-id1217",
               "id1172-id1217"
            ],
            [
               "id1167-id1217",
               "id1168-id1217"
            ],
            [
               "id1169-id1217",
               "id1170-id1217"
            ]
         ],
         "type" : "c_method",
         "id" : "id1164-id1217",
         "extends" : "id1164"
      },
      "id1333" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "id" : "id1333",
         "intro" : "<pre> Log::Report::Dispatcher::File\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "type" : "chapter"
      },
      "id567" : {
         "call" : "$class-&gt;<b><a name=\"id567\">read</a></b>(&nbsp;$filename, %options&nbsp;)",
         "diagnostics" : [
            "id570",
            "id571",
            "id572",
            "id573",
            "id574",
            "id575"
         ],
         "id" : "id567",
         "type" : "c_method",
         "options" : [
            [
               "id568",
               "id569"
            ]
         ],
         "name" : "read",
         "intro" : "<p>Read the POT table information from <tt class=\"parameter\">$filename</tt>, as compact as possible.\nComments, plural-form, and such are lost on purpose: they are not\nneeded for translations.</p>\n"
      },
      "id911" : {
         "name" : "new",
         "intro" : "<p>With syslog, people tend not to include the REASON of the message\nin the logs, because that is already used to determine the destination\nof the message.</p>\n",
         "call" : "$class-&gt;<b><a name=\"id911\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "diagnostics" : [
            "id929",
            "id930"
         ],
         "options" : [
            [
               "id1165-id905",
               "id1166-id905"
            ],
            [
               "id925",
               "id926"
            ],
            [
               "id917",
               "id918"
            ],
            [
               "id915",
               "id916"
            ],
            [
               "id927",
               "id928"
            ],
            [
               "id1171-id905",
               "id912"
            ],
            [
               "id913",
               "id914"
            ],
            [
               "id923",
               "id924"
            ],
            [
               "id1167-id905",
               "id1168-id905"
            ],
            [
               "id921",
               "id922"
            ],
            [
               "id1169-id905",
               "id1170-id905"
            ],
            [
               "id919",
               "id920"
            ]
         ],
         "id" : "id911",
         "type" : "c_method"
      },
      "id766" : {
         "options" : [
            [
               "id1165-id760",
               "id1166-id760"
            ],
            [
               "id773",
               "id774"
            ],
            [
               "id1173-id760",
               "id1174-id760"
            ],
            [
               "id1171-id760",
               "id1172-id760"
            ],
            [
               "id1167-id760",
               "id1168-id760"
            ],
            [
               "id771",
               "id772"
            ],
            [
               "id769",
               "id770"
            ],
            [
               "id1169-id760",
               "id1170-id760"
            ],
            [
               "id767",
               "id768"
            ]
         ],
         "type" : "c_method",
         "id" : "id766",
         "call" : "$class-&gt;<b><a name=\"id766\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "diagnostics" : [
            "id775"
         ],
         "name" : "new",
         "intro" : "<p>The Log::Dispatch infrastructure has quite a large number of output\nTYPEs, each extending the Log::Dispatch::Output base-class.  You\ndo not create these objects yourself: <a class=\"jump\" href=\"id801\">Log::Report</a> is doing it for you.</p>\n\n<p>The Log::Dispatch back-ends are very careful with validating their\nparameters, so you will need to restrict the options to what is supported\nfor the specific back-end.  See their respective manual-pages.  The errors\nproduced by the back-ends quite horrible and untranslated, sorry.</p>\n"
      },
      "id379" : {
         "name" : "msgid '$msgid' contains html escapes, don't do that.  File $file line $linenr.",
         "subroutine" : "id370",
         "type" : "warning",
         "id" : "id379"
      },
      "id572" : {
         "name" : "cannot read from file $fn (unknown charset): $!",
         "subroutine" : "id567",
         "type" : "fault",
         "id" : "id572"
      },
      "id679" : {
         "name" : "textdomain",
         "id" : "id679",
         "value" : "&lt;required&gt;",
         "type" : "default"
      },
      "id1324" : {
         "path" : "DETAILS/Processing the message/Filters",
         "id" : "id1324",
         "type" : "subsection",
         "name" : "Filters",
         "level" : 3
      },
      "id1205-id905" : {
         "name" : "max_line",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "extends" : "id1205",
         "type" : "default",
         "id" : "id1205-id905",
         "value" : "<code>undef</code>"
      },
      "id1040" : {
         "call" : "$obj-&gt;<b><a name=\"id1040\">died</a></b>(&nbsp;[$text]&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>The exit <tt class=\"parameter\">$text</tt> or object (<code>$@</code>) of the eval'ed block, in its unprocessed state.\nThey will always return <code>true</code> when they where deadly, and it always stringifies\ninto something useful.</p>\n",
         "id" : "id1040",
         "name" : "died"
      },
      "id851" : {
         "intro" : "<pre>  print __n \"one\", \"more\", $a;\n  print __n(\"one\", \"more\", $a), \"\\n\";\n  print +(__n \"one\", \"more\", $a), \"\\n\";\n\n  # new-lines are ignore at lookup, but printed.\n  print __n \"one\\n\", \"more\\n\", $a;\n\n  # count is in scalar context\n  # the value is also available as _count\n  print __n \"found one\\n\", \"found {_count}\\n\", @r;\n\n  # ARRAYs and HASHes are counted\n  print __n \"one\", \"more\", \\@r;\n</pre>\n",
         "id" : "id851",
         "type" : "example",
         "name" : "how to use <code>__n()</code>\n"
      },
      "id977-id221" : {
         "name" : "_context",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id976\">Log::Report::Message::new(_context)</a></p>",
         "extends" : "id977",
         "id" : "id977-id221",
         "type" : "default",
         "value" : "<code>undef</code>"
      },
      "id200" : {
         "call" : "<b><a name=\"id200\">panic</a></b>(&nbsp;$message&nbsp;)",
         "id" : "id200",
         "type" : "function",
         "name" : "panic"
      },
      "id212" : {
         "intro" : "<p>See <a class=\"jump\" href=\"id867\">Log::Report::import()</a>.</p>\n",
         "name" : "import",
         "id" : "id212",
         "type" : "i_method",
         "diagnostics" : [
            "id213"
         ],
         "call" : "$obj-&gt;<b><a name=\"id212\">import</a></b>(&nbsp;[$domain], %options&nbsp;)"
      },
      "id988-id221" : {
         "extends" : "id988",
         "name" : "context",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id988\">Log::Report::Message::context()</a></p>",
         "type" : "i_method",
         "id" : "id988-id221",
         "call" : "$obj-&gt;<b><a name=\"id988\">context</a></b>"
      },
      "id748" : {
         "name" : "add",
         "type" : "i_method",
         "intro" : "<p>Add the information from a <tt class=\"parameter\">$po</tt> into this POT.  If the msgid of the <tt class=\"parameter\">$po</tt>\nis already known, that is an error.</p>\n",
         "id" : "id748",
         "call" : "$obj-&gt;<b><a name=\"id748\">add</a></b>(&nbsp;$po&nbsp;)"
      },
      "id1169" : {
         "params" : "'NORMAL'|'VERBOSE'|'ASSERT'|'DEBUG'|0..3",
         "id" : "id1169",
         "intro" : "<p>Possible values are <code>NORMAL</code> (or <code>0</code> or <code>undef</code>), which will not show\n<code>INFO</code> or debug messages, <code>VERBOSE</code> (<code>1</code>; shows <code>INFO</code> not debug),\n<code>ASSERT</code> (<code>2</code>; only ignores <code>TRACE</code> messages), or <code>DEBUG</code> (<code>3</code>)\nwhich shows everything.  See section <a class=\"jump\" href=\"id894\">Run modes</a>.</p>\n\n<p>You are advised to use the symbolic mode names when the mode is\nchanged within your program: the numerical values are available\nfor smooth Getopt::Long integration.</p>\n",
         "type" : "option",
         "name" : "mode"
      },
      "id962-id221" : {
         "id" : "id962-id221",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id962\">Log::Report::Message::new(_tag)</a></p>",
         "type" : "option",
         "params" : "$tags|\\@tags",
         "extends" : "id962",
         "name" : "_tag"
      },
      "id1166-id1066" : {
         "name" : "accept",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "extends" : "id1166",
         "id" : "id1166-id1066",
         "type" : "default",
         "value" : "<code>depend on mode</code>"
      },
      "id1243" : {
         "id" : "id1243",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1243\">reason</a></b>(&nbsp;[$reason]&nbsp;)",
         "name" : "reason"
      },
      "id840" : {
         "call" : "<b><a name=\"id840\">fault</a></b>(&nbsp;$message&nbsp;)",
         "id" : "id840",
         "intro" : "<p>Short for <code>report FAULT =&gt; $message</code></p>\n",
         "type" : "function",
         "name" : "fault"
      },
      "id1285" : {
         "type" : "section",
         "id" : "id1285",
         "nest" : [
            "id1286",
            "id1287"
         ],
         "path" : "DETAILS/Processing the message",
         "name" : "Processing the message",
         "level" : 2
      },
      "id1195-id905" : {
         "name" : "package",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "extends" : "id1195",
         "id" : "id1195-id905",
         "value" : "&lt;required&gt;",
         "type" : "default"
      },
      "id445" : {
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS",
         "nest" : [
            "id446",
            "id448",
            "id450"
         ],
         "id" : "id445",
         "type" : "chapter"
      },
      "id527-id493" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id527\">Log::Report::Extract::index()</a></p>",
         "id" : "id527-id493",
         "call" : "$obj-&gt;<b><a name=\"id527\">index</a></b>",
         "name" : "index",
         "extends" : "id527"
      },
      "id117" : {
         "id" : "id117",
         "inheritance" : {
            "extends" : [
               "Exporter"
            ]
         },
         "title" : "helpful routines to Log::Report",
         "is_pure_pod" : false,
         "distribution" : "Log-Report-Optional",
         "package" : "Log::Report::Util",
         "version" : "1.08",
         "chapters" : [
            "id118",
            "id1336",
            "id119",
            "id120",
            "id121"
         ],
         "name" : "Log::Report::Util"
      },
      "id1321" : {
         "id" : "id1321",
         "type" : "section",
         "path" : "DETAILS/Available back-ends",
         "level" : 2,
         "name" : "Available back-ends"
      },
      "id158-id1122" : {
         "value" : "&lt;required&gt;",
         "type" : "default",
         "id" : "id158-id1122",
         "extends" : "id158",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id157\">Log::Report::Minimal::Domain::new(name)</a></p>",
         "name" : "name"
      },
      "id974" : {
         "name" : "_lang",
         "intro" : "<p>[1.00] Override language setting from locale, for instance because that\nis not configured correctly (yet).  This does not extend to prepended\nor appended translated message object.</p>\n",
         "id" : "id974",
         "type" : "option",
         "params" : "ISO"
      },
      "id47" : {
         "title" : "printf alternative",
         "id" : "id47",
         "inheritance" : {},
         "distribution" : "String-Print",
         "package" : "String::Print",
         "is_pure_pod" : false,
         "version" : "1.02",
         "chapters" : [
            "id48",
            "id49",
            "id50",
            "id51",
            "id74",
            "id89"
         ],
         "name" : "String::Print"
      },
      "id908" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "id" : "id908",
         "intro" : "<p>This dispatchers produces output to syslog, based on the Sys::Syslog\nmodule (which will NOT be automatically installed for you, because some\nsystems have a problem with this dependency).</p>\n\n<p>The REASON for a message often uses names which are quite similar to\nthe log-levels used by syslog.  However: they have a different purpose.\nThe REASON is used by the programmer to indicate the cause of the message:\nwhether it was able to handle a certain situation.  The syslog levels\nare there for the user's of the program (with syslog usually the\nsystem administrators).  It is not unusual to see a \"normal\" error\nor mistake as a very serious situation in a production environment. So,\nyou may wish to translate any message above reason MISTAKE into a LOG_CRIT.</p>\n\n<p>The default translation table is list below.  You can change the mapping\nusing <a class=\"jump\" href=\"id919\">new(to_prio)</a>.  See example in SYNOPSIS.</p>\n<pre>\n  TRACE   =&gt; LOG_DEBUG    ERROR   =&gt; LOG_ERR\n  ASSERT  =&gt; LOG_DEBUG    FAULT   =&gt; LOG_ERR\n  INFO    =&gt; LOG_INFO     ALERT   =&gt; LOG_ALERT\n  NOTICE  =&gt; LOG_NOTICE   FAILURE =&gt; LOG_EMERG\n  WARNING =&gt; LOG_WARNING  PANIC   =&gt; LOG_CRIT\n  MISTAKE =&gt; LOG_WARNING\n</pre>\n",
         "type" : "chapter"
      },
      "id749-id461" : {
         "extends" : "id749",
         "type" : "i_method",
         "id" : "id749-id461",
         "diagnostics" : [
            "id750-id461"
         ],
         "call" : "$obj-&gt;<b><a name=\"id749\">translations</a></b>(&nbsp;[$active]&nbsp;)",
         "name" : "translations",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id749\">Log::Report::Lexicon::Table::translations()</a></p>"
      },
      "id879" : {
         "type" : "error",
         "id" : "id879",
         "name" : "no domain for configuration options in $fn line $line",
         "subroutine" : "id867"
      },
      "id752" : {
         "name" : "there is no Plural-Forms field in the header, but needed.",
         "subroutine" : "id751",
         "type" : "error",
         "id" : "id752"
      },
      "id1208-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "type" : "option",
         "id" : "id1208-id1091",
         "params" : "INTEGER",
         "extends" : "id1208",
         "name" : "abstract"
      },
      "id651" : {
         "id" : "id651",
         "intro" : "<p>Returns whether the translation needs human inspection.</p>\n",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id651\">fuzzy</a></b>(&nbsp;[BOOLEAN]&nbsp;)",
         "name" : "fuzzy"
      },
      "id1030" : {
         "call" : "$class-&gt;<b><a name=\"id1030\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)",
         "id" : "id1030",
         "type" : "c_method",
         "options" : [
            [
               "id1165-id1021",
               "id1166-id1021"
            ],
            [
               "id1173-id1021",
               "id1174-id1021"
            ],
            [
               "id1033",
               "id1034"
            ],
            [
               "id1031",
               "id1032"
            ],
            [
               "id1171-id1021",
               "id1172-id1021"
            ],
            [
               "id1035",
               "id1036"
            ],
            [
               "id1167-id1021",
               "id1168-id1021"
            ],
            [
               "id1169-id1021",
               "id1170-id1021"
            ],
            [
               "id1037",
               "id1038"
            ]
         ],
         "name" : "new"
      },
      "id1274" : {
         "path" : "METHODS/Processing",
         "id" : "id1274",
         "type" : "section",
         "subroutines" : [
            "id1010-id221",
            "id1000-id221",
            "id1004-id221",
            "id998-id221",
            "id1006-id221",
            "id1003-id221",
            "id1001-id221",
            "id999-id221"
         ],
         "name" : "Processing",
         "level" : 2
      },
      "id1076" : {
         "type" : "error",
         "id" : "id1076",
         "name" : "dispatcher $name needs a 'callback'",
         "subroutine" : "id1073"
      },
      "id351" : {
         "name" : "adding a new language",
         "level" : 3,
         "path" : "DETAILS/Extracting PO-files/adding a new language",
         "type" : "subsection",
         "intro" : "<p>The first time you run <a class=\"jump\" href=\"id327\">extract()</a>, you will see a file being created\nin <code>$lexicon/$textdomain-$charset.po</code>.  That file will be left empty:\ncopy it to start a new translation.</p>\n\n<p>There are many ways to structure PO-files.  Which structure used, is\ndetected automatically by <a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a>.  My personal preference\nis <code>$lexicon/$textdomain/$language-$charset.po</code>.  On Unix-like systems,\nyou would do:</p>\n<pre>\n  # Start a new language\n  mkdir mylexicon/mydomain\n  cp mylexicon/mydomain-utf8.po mylexicon/mydomain/nl_NL-utf8.po\n\n  # fill the nl_NL-utf8.po file with the translation\n  poedit mylexicon/mydomain/nl_NL-utf8.po\n\n  # add the file to your version control system\n  git add mylexicon/mydomain/nl_NL-utf8.po\n</pre>\n\n\n<p>Now, when your program sets the locale to 'nl-NL', it should start\ntranslating to Dutch.  If it doesn't, it is not always easy to\nfigure-out what is wrong...</p>\n",
         "id" : "id351"
      },
      "id1350" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Dancer2::Template::TTLogReport\n   is a Moo::Object\n</pre>\n",
         "id" : "id1350",
         "path" : "INHERITANCE"
      },
      "id1233" : {
         "path" : "METHODS/Constructors",
         "type" : "section",
         "id" : "id1233",
         "subroutines" : [
            "id1234"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id155" : {
         "level" : 2,
         "name" : "Constructors",
         "subroutines" : [
            "id156"
         ],
         "id" : "id155",
         "type" : "section",
         "path" : "METHODS/Constructors"
      },
      "id340" : {
         "intro" : "<p>If the 'processing_errors' option is 'NATIVE' (default), you have to\ncollect the error like this:</p>\n<pre>\n  $tt-&gt;process($template_fn, $vars, ...)\n     or die $tt-&gt;error;\n</pre>\n\n<p>When the 'procesing_errors' option is set to 'EXCEPTION', the error is\ntranslated into a <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a>:</p>\n<pre>\n  use Log::Report;\n  try { $tt-&gt;process($template_fn, $vars, ...) };\n  print $@-&gt;wasFatal if $@;\n</pre>\n\n<p>In the latter solution, the try() is probably only on the level of the\nhighest level: the request handler which catches all kinds of serious\nerrors at once.</p>\n",
         "id" : "id340",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id340\">error</a></b>",
         "name" : "error"
      },
      "id640" : {
         "intro" : "<p>Returns the actual msgid_plural, which can be <code>undef</code>.</p>\n",
         "id" : "id640",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id640\">plural</a></b>(&nbsp;[STRING]&nbsp;)",
         "name" : "plural"
      },
      "id1271" : {
         "level" : 3,
         "name" : "Addition information",
         "id" : "id1271",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Addition information"
      },
      "id73" : {
         "type" : "example",
         "intro" : "<pre>  use String::Print 'oo';    # do not import the functions\n\n  my $sp = String::Print-&gt;new(\n    modifiers   =&gt; [ EUR   =&gt; sub {sprintf \"%5.2f e\", $_[0]} ],\n    serializers =&gt; [ UNDEF =&gt; sub {'-'} ],\n    defaults    =&gt; [ DT    =&gt; { standard =&gt; 'ISO' } ],\n  );\n\n  $sp-&gt;printi(\"price: {p EUR}\", p =&gt; 3.1415); # price: ␣␣3.14 e\n  $sp-&gt;printi(\"count: {c}\", c =&gt; undef);      # count: -\n  my $s = $sp-&gt;sprinti(\"price: {p EUR}\", p =&gt; 7); # output in $s\n</pre>\n",
         "id" : "id73"
      },
      "id1173-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "type" : "option",
         "id" : "id1173-id760",
         "params" : "CHARSET",
         "extends" : "id1173",
         "name" : "charset"
      },
      "id1162" : {
         "id" : "id1162",
         "type" : "chapter",
         "nest" : [
            "id1163",
            "id1178",
            "id1184"
         ],
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1
      },
      "id973" : {
         "value" : "<code>$\"</code>  <code>$LIST_SEPARATOR</code>",
         "type" : "default",
         "id" : "id973",
         "name" : "_join"
      },
      "id426" : {
         "id" : "id426",
         "type" : "chapter",
         "nest" : [
            "id427",
            "id434",
            "id437"
         ],
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1
      },
      "id1198-id1091" : {
         "extends" : "id1198",
         "name" : "linenr",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "id" : "id1198-id1091",
         "params" : "INTEGER"
      },
      "id956-id221" : {
         "extends" : "id956",
         "name" : "_category",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id956\">Log::Report::Message::new(_category)</a></p>",
         "type" : "option",
         "id" : "id956-id221",
         "params" : "INTEGER"
      },
      "id1289" : {
         "path" : "DETAILS/Configuring",
         "name" : "Configuring",
         "level" : 2,
         "id" : "id1289",
         "type" : "section",
         "nest" : [
            "id1290",
            "id1291"
         ]
      },
      "id1091" : {
         "chapters" : [
            "id1092",
            "id1333",
            "id1093",
            "id1094",
            "id1095",
            "id1297"
         ],
         "name" : "Log::Report::Dispatcher::File",
         "version" : "1.46",
         "is_pure_pod" : false,
         "distribution" : "Log-Report",
         "package" : "Log::Report::Dispatcher::File",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "id" : "id1091",
         "title" : "send messages to a file or file-handle"
      },
      "id869" : {
         "name" : "syntax",
         "id" : "id869",
         "value" : "'SHORT'",
         "type" : "default"
      },
      "id1165" : {
         "name" : "accept",
         "id" : "id1165",
         "intro" : "<p>See <a class=\"jump\" href=\"id123\">Log::Report::Util::expand_reasons()</a> for possible values.  If\nthe initial mode for this dispatcher does not need verbose or debug\ninformation, then those levels will not be accepted.</p>\n\n<p>When the mode equals \"NORMAL\" (the default) then <tt class=\"parameter\">accept</tt>'s default\nis <code>NOTICE- </code>.  In case of \"VERBOSE\" it will be <code>INFO- </code>, <code>ASSERT</code>\nresults in <code>ASSERT- </code>, and \"DEBUG\" in <code>ALL</code>.</p>\n",
         "type" : "option",
         "params" : "$reasons|\\@reasons"
      },
      "id1224" : {
         "path" : "METHODS/Logging",
         "subroutines" : [
            "id1186-id1217",
            "id1189-id1217",
            "id1188-id1217",
            "id1185-id1217",
            "id1192-id1217",
            "id1191-id1217",
            "id1193-id1217",
            "id1187-id1217"
         ],
         "type" : "section",
         "id" : "id1224",
         "name" : "Logging",
         "level" : 2
      },
      "id1026" : {
         "name" : "bool",
         "call" : "overload <b><a name=\"id1026\">bool</a></b>; boolean",
         "id" : "id1026",
         "intro" : "<p>Returns <code>true</code> if the previous try block did produce a terminal\nerror.  This \"try\" object is assigned to <code>$@</code>, and the usual\nperl syntax is <code>if($@) {...error-handler...}</code>.</p>\n",
         "type" : "overload"
      },
      "id390" : {
         "level" : 2,
         "name" : "Constructors",
         "subroutines" : [
            "id391",
            "id402"
         ],
         "type" : "section",
         "id" : "id390",
         "path" : "METHODS/Constructors"
      },
      "id1106" : {
         "type" : "error",
         "id" : "id1106",
         "subroutine" : "id1097",
         "name" : "unknown format parameter `$what'"
      },
      "id401" : {
         "name" : "lang",
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id401"
      },
      "id1199-id905" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "name" : "linenr",
         "id" : "id1199-id905",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "extends" : "id1199"
      },
      "id1200-id760" : {
         "params" : "STRING",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "type" : "option",
         "id" : "id1200-id760",
         "name" : "call",
         "extends" : "id1200"
      },
      "id556" : {
         "intro" : "<p>Returns the ISO string for the Microsoft codepage locale.  Might return\n<code>undef</code>/<code>false</code>.  By default, the actual codepage is used.</p>\n",
         "id" : "id556",
         "type" : "function",
         "call" : "<b><a name=\"id556\">iso_locale</a></b>(&nbsp;[$codepage]&nbsp;)",
         "name" : "iso_locale"
      },
      "id690" : {
         "name" : "date",
         "params" : "STRING",
         "intro" : "<p>Overrule the date which is included in the generated header.</p>\n",
         "type" : "option",
         "id" : "id690"
      },
      "id1221" : {
         "path" : "METHODS",
         "level" : 1,
         "name" : "METHODS",
         "type" : "chapter",
         "id" : "id1221",
         "nest" : [
            "id1222",
            "id1223",
            "id1224"
         ]
      },
      "id1186-id905" : {
         "extends" : "id1186",
         "name" : "log",
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1186\">Log::Report::Dispatcher::log()</a></p>",
         "type" : "i_method",
         "id" : "id1186-id905"
      },
      "id537-id493" : {
         "name" : "showStats",
         "extends" : "id537",
         "call" : "$obj-&gt;<b><a name=\"id537\">showStats</a></b>(&nbsp;[$domains]&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id537\">Log::Report::Extract::showStats()</a></p>",
         "type" : "i_method",
         "id" : "id537-id493"
      },
      "id1148" : {
         "intro" : "<p>Temporary set the default translation context for messages.  This is used\nwhen the message is created without a <code>_context</code> parameter. The context\ncan be retrieved with <a class=\"jump\" href=\"id1152\">defaultContext()</a>.</p>\n\n<p>Contexts are totally ignored then there are no <code>context_rules</code>.  When\nyou do not wish to change settings, you may simply provide an empty <tt class=\"parameter\">HASH</tt>.</p>\n",
         "name" : "setContext",
         "call" : "$obj-&gt;<b><a name=\"id1148\">setContext</a></b>(&nbsp;STRING|HASH|ARRAY|PAIRS&nbsp;)",
         "diagnostics" : [
            "id1150"
         ],
         "type" : "i_method",
         "id" : "id1148",
         "examples" : [
            "id1149"
         ]
      },
      "id1343" : {
         "path" : "INHERITANCE",
         "intro" : "<pre> Dancer::Logger::LogReport\n   is a Dancer::Logger::Abstract\n\n Dancer::Logger::LogReport\n   is an Exporter\n</pre>\n",
         "type" : "chapter",
         "id" : "id1343",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id255" : {
         "path" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>[The Dancer2 plugin was contributed by Andrew Beverley]\nWhen you need to translate your templates as well (not only the messages\nin your code) then have a look at <a class=\"jump\" href=\"id237\">Dancer2::Template::TTLogReport</a>.</p>\n\n<p>This module provides easy access to the extensive logging facilities\nprovided by <a class=\"jump\" href=\"id801\">Log::Report</a>. Along with <a class=\"jump\" href=\"id289\">Dancer2::Logger::LogReport</a>,\nthis brings together all the internal Dancer2 logging, handling for\nexpected and unexpected exceptions, translations and application logging.</p>\n\n<p>Logging is extremely flexible using many of the available\n<a class=\"jump\" href=\"id1210\">dispatchers</a>.  Multiple dispatchers can be\nused, each configured separately to display different messages in different\nformats.  By default, messages are logged to a session variable for display on\na webpage, and to STDERR.</p>\n\n<p>Messages within this plugin use the extended\n<a href=\"https://metacpan.org/dist/Dancer2_Logger_LogReport_Message\">manual Dancer2::Logger::LogReport::Message</a> class rather than the standard\n<a class=\"jump\" href=\"id935\">Log::Report::Message</a> class.</p>\n\n<p>Note that it is currently recommended to use the plugin in all apps within\na Dancer2 program, not only some. Therefore, wherever you <code>use Dancer2</code>\nyou should also <code>use Dancer2::Plugin::LogReport</code>. This does not apply if\nusing the same app name (<code>use Dancer2 appname, 'Already::Exists'</code>). In\nall other modules, you can just <code>use Log::Report</code>.</p>\n\n<p>Read the <a class=\"jump\" href=\"id276\">DETAILS</a> in below in this manual-page.</p>\n",
         "id" : "id255",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id1296" : {
         "path" : "DETAILS/Processing the message/Filters",
         "type" : "subsection",
         "id" : "id1296",
         "name" : "Filters",
         "level" : 3
      },
      "id1094" : {
         "path" : "DESCRIPTION",
         "intro" : "<p>This basic file logger accepts an file-handle or filename as destination.</p>\n\n<p>[1.00] writing to the file protected by a lock, so multiple processes\ncan write to the same file.</p>\n",
         "id" : "id1094",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id963" : {
         "name" : "_tag",
         "value" : "[]",
         "id" : "id963",
         "type" : "default"
      },
      "id1209-id905" : {
         "name" : "abstract",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "extends" : "id1209",
         "id" : "id1209-id905",
         "type" : "default",
         "value" : "1"
      },
      "id209" : {
         "id" : "id209",
         "type" : "function",
         "call" : "<b><a name=\"id209\">N__n</a></b>(&nbsp;$single_msgid, $plural_msgid&nbsp;)",
         "name" : "N__n"
      },
      "id921" : {
         "name" : "logsocket",
         "id" : "id921",
         "intro" : "<p>If specified, the log socket type will be initialized to this before\n<code>openlog()</code> is called.  If not specified, the system default is used.</p>\n",
         "type" : "option",
         "params" : "'unix'|'inet'|'stream'|HASH"
      },
      "id167-id1122" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id166\">Log::Report::Minimal::Domain::configure(where)</a></p>",
         "name" : "where",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id167-id1122",
         "extends" : "id167"
      },
      "id1306" : {
         "path" : "DETAILS",
         "level" : 1,
         "name" : "DETAILS",
         "type" : "chapter",
         "id" : "id1306",
         "nest" : [
            "id1307",
            "id1308"
         ]
      },
      "id1166-id905" : {
         "id" : "id1166-id905",
         "type" : "default",
         "value" : "<code>depend on mode</code>",
         "extends" : "id1166",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>",
         "name" : "accept"
      },
      "id849" : {
         "subroutine" : "id847",
         "name" : "even length parameter list for __x at $where",
         "type" : "error",
         "id" : "id849"
      },
      "id172-id1122" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id172\">Log::Report::Minimal::Domain::interpolate()</a></p>",
         "id" : "id172-id1122",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id172\">interpolate</a></b>(&nbsp;$msgid, [$args]&nbsp;)",
         "name" : "interpolate",
         "extends" : "id172"
      },
      "id1195-id1066" : {
         "id" : "id1195-id1066",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "extends" : "id1195",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "name" : "package"
      },
      "id704" : {
         "name" : "only_active",
         "type" : "option",
         "intro" : "<p>[1.02] Do not write records which do have a translation, but where the\nmsgid has disappeared from the sources.  By default, these records are\ncommented out (marked with '#~') but left in the file.</p>\n",
         "id" : "id704",
         "params" : "BOOLEAN"
      },
      "id1170-id1091" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "name" : "mode",
         "type" : "default",
         "value" : "'NORMAL'",
         "id" : "id1170-id1091",
         "extends" : "id1170"
      },
      "id1269" : {
         "level" : 2,
         "name" : "Available back-ends",
         "type" : "section",
         "id" : "id1269",
         "path" : "DETAILS/Available back-ends"
      },
      "id370" : {
         "options" : [
            [
               "id371",
               "id372"
            ],
            [
               "id373",
               "id374"
            ]
         ],
         "id" : "id370",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id370\">process</a></b>(&nbsp;$filename, %options&nbsp;)",
         "diagnostics" : [
            "id375",
            "id376",
            "id377",
            "id378",
            "id379",
            "id380"
         ],
         "intro" : "<p>Update the domains mentioned in the <tt class=\"parameter\">$filename</tt>.  All textdomains defined\nin the file will get updated automatically, but not written before\nall files where processed.</p>\n",
         "name" : "process"
      },
      "id222" : {
         "level" : 1,
         "name" : "NAME",
         "type" : "chapter",
         "intro" : "<p>Dancer2::Plugin::LogReport::Message - extended Log::Report::Message class</p>\n",
         "id" : "id222",
         "path" : "NAME"
      },
      "id1185" : {
         "intro" : "<p>Terminate this dispatcher activities.  The dispatcher gets disabled,\nto avoid the case it accidentally gets used.  Returns <code>undef</code> (<code>false</code>)\nif the dispatcher was already closed.</p>\n",
         "id" : "id1185",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1185\">close</a></b>",
         "name" : "close"
      },
      "id1175-id1217" : {
         "id" : "id1175-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1164\">Log::Report::Dispatcher::new()</a></p>",
         "type" : "alert",
         "subroutine" : "id1164",
         "name" : "cannot use class $backend:\\n$@: $!",
         "extends" : "id1175"
      },
      "id670" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Log::Report::Lexicon::POT - manage PO files</p>\n",
         "id" : "id670",
         "type" : "chapter"
      },
      "id1143" : {
         "id" : "id1143",
         "type" : "warning",
         "subroutine" : "id1133",
         "name" : "Missing key '$key' in format '$format', file $use"
      },
      "id943" : {
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS",
         "nest" : [
            "id944",
            "id982",
            "id997"
         ],
         "id" : "id943",
         "type" : "chapter"
      },
      "id1348" : {
         "path" : "INHERITANCE",
         "id" : "id1348",
         "intro" : "<pre> Log::Report::Dispatcher is extended by\n   <a class=\"jump\" href=\"id1066\">Log::Report::Dispatcher::Callback</a>\n   <a class=\"jump\" href=\"id1091\">Log::Report::Dispatcher::File</a>\n   <a class=\"jump\" href=\"id780\">Log::Report::Dispatcher::Log4perl</a>\n   <a class=\"jump\" href=\"id760\">Log::Report::Dispatcher::LogDispatch</a>\n   <a class=\"jump\" href=\"id1217\">Log::Report::Dispatcher::Perl</a>\n   <a class=\"jump\" href=\"id905\">Log::Report::Dispatcher::Syslog</a>\n   <a class=\"jump\" href=\"id1021\">Log::Report::Dispatcher::Try</a>\n</pre>\n",
         "type" : "chapter",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id1205-id1066" : {
         "name" : "max_line",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "extends" : "id1205",
         "type" : "default",
         "id" : "id1205-id1066",
         "value" : "<code>undef</code>"
      },
      "id127" : {
         "type" : "error",
         "id" : "id127",
         "name" : "unknown reason $which in '$reasons'.",
         "subroutine" : "id123"
      },
      "id558" : {
         "id" : "id558",
         "intro" : "<p>Returns the numeric language ID for the current codepage language.\nFor example, the numeric value for <code>0x0409</code> for <code>en-US</code>, and <code>0x0411</code>\nfor <code>ja</code>.  Returns <code>false</code> if the codepage cannot be identified.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id558\">ms_codepage_id</a></b>",
         "name" : "ms_codepage_id"
      },
      "id725" : {
         "name" : "keepReferencesTo",
         "call" : "$obj-&gt;<b><a name=\"id725\">keepReferencesTo</a></b>(&nbsp;$table&nbsp;)",
         "id" : "id725",
         "intro" : "<p>Remove all references which are not found as key in the hash <tt class=\"parameter\">$table</tt>.\nReturns the number of references left.</p>\n",
         "type" : "i_method"
      },
      "id1150" : {
         "type" : "error",
         "id" : "id1150",
         "subroutine" : "id1148",
         "name" : "you need to configure context_rules before setContext"
      },
      "id993" : {
         "intro" : "<p>Returns the <tt class=\"parameter\">$name</tt> of a dispatcher if explicitly specified with\nthe '_to' key. Can also be used to set it.  Usually, this will\nreturn <code>undef</code>, because usually all dispatchers get all messages.</p>\n",
         "id" : "id993",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id993\">to</a></b>(&nbsp;[$name]&nbsp;)",
         "name" : "to"
      },
      "id1207-id1021" : {
         "id" : "id1207-id1021",
         "type" : "default",
         "value" : "8",
         "extends" : "id1207",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1206\">Log::Report::Dispatcher::stackTraceLine(max_params)</a></p>",
         "name" : "max_params"
      },
      "id162-id1122" : {
         "name" : "name",
         "extends" : "id162",
         "call" : "$obj-&gt;<b><a name=\"id162\">name</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id162\">Log::Report::Minimal::Domain::name()</a></p>",
         "type" : "i_method",
         "id" : "id162-id1122"
      },
      "id1019" : {
         "path" : "DETAILS/Automatic parameters/Handling white-spaces",
         "intro" : "<p>In above examples, the msgid and plural form have a trailing new-line.\nIn general, it is much easier to write</p>\n<pre>\n  print __x\"Hello, World!\\n\";\n</pre>\n\n<p>than</p>\n<pre>\n  print __x(\"Hello, World!\") . \"\\n\";\n</pre>\n\n<p>For the translation tables, however, that trailing new-line is \"ignorable\ninformation\"; it is an layout issue, not a translation issue.</p>\n\n<p>Therefore, the first form will automatically be translated into the\nsecond.  All leading and trailing white-space (blanks, new-lines, tabs,\n...) are removed from the msgid before the look-up, and then added to\nthe translated string.</p>\n\n<p>Leading and trailing white-space on the plural form will also be\nremoved.  However, after translation the spacing of the msgid will\nbe used.</p>\n",
         "id" : "id1019",
         "type" : "subsection",
         "name" : "Handling white-spaces",
         "level" : 3
      },
      "id1202-id1066" : {
         "name" : "params",
         "extends" : "id1202",
         "params" : "ARRAY",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "id" : "id1202-id1066"
      },
      "id109" : {
         "path" : "DETAILS/Interpolation: Modifiers/Stacking modifiers",
         "id" : "id109",
         "intro" : "<p>You can add more than one modifier.  The modifiers detect the extend of\ntheir own information (via a regular expression), and therefore the\nformatter understands where one ends and the next begins.</p>\n\n<p>The modifiers are called in order:</p>\n<pre>\n  printi \"price: {p€%9s}\\n\", p =&gt; $p; # price: ␣␣␣123.45\n  printi \"!{t TIME%10s}!\", t =&gt; $now; # !␣␣12:59:17!\n\n  printp \"price: %9{€}s\\n\", $p;       # price: ␣␣␣123.45\n  printp \"!%10{TIME}s!\", $now;        # !␣␣12:59:17!\n</pre>\n",
         "type" : "subsection",
         "name" : "Stacking modifiers",
         "level" : 3
      },
      "id428" : {
         "name" : "new",
         "examples" : [
            "id433"
         ],
         "call" : "$class-&gt;<b><a name=\"id428\">new</a></b>(&nbsp;%options&nbsp;)",
         "options" : [
            [
               "id431",
               "id432"
            ],
            [
               "id429",
               "id430"
            ]
         ],
         "type" : "c_method",
         "id" : "id428"
      },
      "id1172-id1217" : {
         "id" : "id1172-id1217",
         "type" : "default",
         "value" : "'LOWERCASE'",
         "extends" : "id1172",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "name" : "format_reason"
      },
      "id1182" : {
         "type" : "i_method",
         "id" : "id1182",
         "call" : "$obj-&gt;<b><a name=\"id1182\">isDisabled</a></b>",
         "name" : "isDisabled"
      },
      "id1203-id1091" : {
         "name" : "params",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "extends" : "id1203",
         "id" : "id1203-id1091",
         "type" : "default",
         "value" : "&lt;required&gt;"
      },
      "id958-id221" : {
         "name" : "_prepend",
         "extends" : "id958",
         "params" : "$text|$message",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id958\">Log::Report::Message::new(_prepend)</a></p>",
         "type" : "option",
         "id" : "id958-id221"
      },
      "id1238" : {
         "name" : "reason",
         "value" : "&lt;required&gt;",
         "id" : "id1238",
         "type" : "default"
      },
      "id360" : {
         "name" : "new",
         "options" : [
            [
               "id522-id354",
               "id523-id354"
            ],
            [
               "id361",
               "id362"
            ],
            [
               "id520-id354",
               "id521-id354"
            ],
            [
               "id363",
               "id364"
            ]
         ],
         "id" : "id360",
         "type" : "c_method",
         "diagnostics" : [
            "id365"
         ],
         "call" : "$class-&gt;<b><a name=\"id360\">new</a></b>(&nbsp;%options&nbsp;)"
      },
      "id753-id561" : {
         "id" : "id753-id561",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id753\">setupPluralAlgorithm</a></b>",
         "diagnostics" : [
            "id754-id561"
         ],
         "extends" : "id753",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id753\">Log::Report::Lexicon::Table::setupPluralAlgorithm()</a></p>",
         "name" : "setupPluralAlgorithm"
      },
      "id906" : {
         "level" : 1,
         "name" : "NAME",
         "intro" : "<p>Log::Report::Dispatcher::Syslog - send messages to syslog</p>\n",
         "type" : "chapter",
         "id" : "id906",
         "path" : "NAME"
      },
      "id1197-id1021" : {
         "name" : "filename",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1196\">Log::Report::Dispatcher::stackTraceLine(filename)</a></p>",
         "extends" : "id1197",
         "type" : "default",
         "id" : "id1197-id1021",
         "value" : "&lt;required&gt;"
      },
      "id227" : {
         "name" : "new",
         "type" : "c_method",
         "id" : "id227",
         "options" : [
            [
               "id960-id221",
               "id961-id221"
            ],
            [
               "id956-id221",
               "id957-id221"
            ],
            [
               "id968-id221",
               "id969-id221"
            ],
            [
               "id966-id221",
               "id967-id221"
            ],
            [
               "id976-id221",
               "id977-id221"
            ],
            [
               "id950-id221",
               "id951-id221"
            ],
            [
               "id948-id221",
               "id949-id221"
            ],
            [
               "id946-id221",
               "id947-id221"
            ],
            [
               "id972-id221",
               "id973-id221"
            ],
            [
               "id974-id221",
               "id975-id221"
            ],
            [
               "id978-id221",
               "id979-id221"
            ],
            [
               "id954-id221",
               "id955-id221"
            ],
            [
               "id952-id221",
               "id953-id221"
            ],
            [
               "id958-id221",
               "id959-id221"
            ],
            [
               "id962-id221",
               "id963-id221"
            ],
            [
               "id964-id221",
               "id965-id221"
            ],
            [
               "id970-id221",
               "id971-id221"
            ],
            [
               "id228",
               "id229"
            ]
         ],
         "call" : "$class-&gt;<b><a name=\"id227\">new</a></b>(&nbsp;%options&nbsp;)"
      },
      "id1130-id385" : {
         "extends" : "id1130",
         "name" : "nativeLanguage",
         "call" : "$obj-&gt;<b><a name=\"id1130\">nativeLanguage</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1130\">Log::Report::Domain::nativeLanguage()</a></p>",
         "id" : "id1130-id385",
         "type" : "i_method"
      },
      "id660" : {
         "subroutine" : "id657",
         "name" : "quoted line is not a continuation at $where.",
         "id" : "id660",
         "type" : "warning"
      },
      "id881" : {
         "name" : "translator must be a $pkg object for $domain",
         "subroutine" : "id867",
         "type" : "error",
         "id" : "id881"
      },
      "id1192-id1066" : {
         "extends" : "id1192",
         "name" : "collectLocation",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "id" : "id1192-id1066",
         "type" : "ci_method"
      },
      "id71" : {
         "intro" : "<pre>  my $def = $sp-&gt;defaults('EL');\n  say \"Default max width is \", $def-&gt;{width};\n</pre>\n",
         "id" : "id71",
         "type" : "example",
         "name" : "getting defaults for a modifier\n"
      },
      "id49" : {
         "type" : "chapter",
         "intro" : "<pre>  ### Functional interface\n\n  use String::Print;           # simpelest way\n  use String::Print qw/printi printp/, %config;\n\n  printi 'age {years}', years =&gt; 12;   # to STDOUT\n  my $s = sprinti 'age {years}', years =&gt; 12;  # in variable\n\n  # interpolation of arrays and hashes (serializers)\n  printi 'price-list: {prices}', prices =&gt; \\@p, _join =&gt; \"+\";\n  printi 'dump: {c}', c =&gt; \\%data;\n\n  # same with positional parameters\n  printp 'age %d\", 12;\n  printp 'price-list: %.2f', \\@prices;\n  printp 'dump: %s', \\%settings;\n  my $s = sprintp 'age %d\", 12;\n\n  # modifiers\n  printi 'price: {price%.2f}', price =&gt; 3.14 * EURO;\n\n  # [0.91] more complex interpolation names\n  printi 'filename: {c.filename}', c =&gt; \\%data;\n  printi 'username: {user.name}', user =&gt; $user_object;\n  printi 'price: {product.price €}', product =&gt; $db-&gt;product(3);\n\n  ### Object Oriented interface\n\n  use String::Print 'oo', %config;      # import no functions\n  my $f = String::Print-&gt;new(%config);\n  $f-&gt;printi('age {years}', years =&gt; 12);\n  $f-&gt;printp('age %d', 12);\n  my $s = $f-&gt;sprinti('age {y}', y =&gt; 12);\n  my $s = $f-&gt;sprintp('age %d', 12);\n\n  ### via Log::Report's __* functions (optional translation)\n\n  use Log::Report;             # or Log::Report::Optional\n  print __x\"age {years}\", years =&gt; 12;\n\n  ### via Log::Report::Template (Template Toolkit extension)\n\n  [% SET name = 'John Doe' %]\n  [% loc(\"Dear {name},\") %]    # includes translation\n</pre>\n",
         "id" : "id49",
         "path" : "SYNOPSIS",
         "level" : 1,
         "name" : "SYNOPSIS"
      },
      "id122" : {
         "subroutines" : [
            "id130",
            "id128",
            "id129",
            "id123"
         ],
         "id" : "id122",
         "type" : "section",
         "path" : "FUNCTIONS/Reasons",
         "level" : 2,
         "name" : "Reasons"
      },
      "id1193-id1091" : {
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)",
         "id" : "id1193-id1091",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "options" : [
            [
               "id1208-id1091",
               "id1209-id1091"
            ],
            [
               "id1200-id1091",
               "id1201-id1091"
            ],
            [
               "id1196-id1091",
               "id1197-id1091"
            ],
            [
               "id1198-id1091",
               "id1199-id1091"
            ],
            [
               "id1204-id1091",
               "id1205-id1091"
            ],
            [
               "id1206-id1091",
               "id1207-id1091"
            ],
            [
               "id1194-id1091",
               "id1195-id1091"
            ],
            [
               "id1202-id1091",
               "id1203-id1091"
            ]
         ],
         "extends" : "id1193",
         "name" : "stackTraceLine"
      },
      "id899" : {
         "path" : "DETAILS/Interpolation via formats",
         "intro" : "<p>Interpolation via formats is optional.</p>\n\n<p>In shown examples, you see <code>__x()</code> everywhere.  Using that function\nis required when you wish to use translations (later in your project),\nbut also has many other benefits.  The functions <code>__x</code> and friends\ncreate a <a class=\"jump\" href=\"id935\">Log::Report::Message</a> object.</p>\n\n<p>Continue reading:</p>\n<ul>\n<li><a class=\"jump\" href=\"id1013\">Why use format strings?</a><br />\n<li><a class=\"jump\" href=\"id1014\">Messages with plural forms</a><br />\n<li><a class=\"jump\" href=\"id1015\">Interpolation with String::Print</a><br />\n<li><a class=\"jump\" href=\"id1017\">Automatic parameters</a><br />\n</ul>\n",
         "name" : "Interpolation via formats",
         "level" : 2,
         "id" : "id899",
         "type" : "section",
         "nest" : [
            "id900"
         ]
      },
      "id965" : {
         "name" : "_tags",
         "value" : "[]",
         "type" : "default",
         "id" : "id965"
      },
      "id1043" : {
         "examples" : [
            "id1044"
         ],
         "name" : "hide",
         "call" : "$obj-&gt;<b><a name=\"id1043\">hide</a></b>(&nbsp;@reasons&nbsp;)",
         "intro" : "<p>[1.09] By default, the try will only catch messages which stop the\nexecution of the block (errors etc, internally a 'die').  Other messages\nare passed to the parent dispatchers.</p>\n\n<p>This option gives the opportunity to stop, for instance, trace messages.\nThose messages are still collected inside the try object (unless excluded\nby <a class=\"jump\" href=\"id1165\">new(accept)</a>), so may get passed-on later via <a class=\"jump\" href=\"id1048\">reportAll()</a> if\nyou like.</p>\n\n<p>Be warned: Using this method will reset the whole 'hide' configuration:\nit's a <i>set</i> not an <i>add</i>.</p>\n",
         "id" : "id1043",
         "type" : "i_method"
      },
      "id579" : {
         "nest" : [
            "id1316",
            "id1317"
         ],
         "type" : "section",
         "id" : "id579",
         "name" : "Managing PO's",
         "level" : 2,
         "path" : "METHODS/Managing PO's"
      },
      "id1085" : {
         "path" : "METHODS/Constructors",
         "id" : "id1085",
         "type" : "section",
         "subroutines" : [
            "id1086"
         ],
         "name" : "Constructors",
         "level" : 2
      },
      "id672" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>This module is reading, extending, and writing POT files.  POT files\nare used to store translations in humanly readable format for most of\nexisting translation frameworks, like GNU gettext and Perl's Maketext.\nIf you only wish to access the translation, then you may use the much\nmore efficient <a class=\"jump\" href=\"id561\">Log::Report::Lexicon::POTcompact</a>.</p>\n\n<p>The code is loosely based on Locale::PO, by Alan Schwartz.  The coding\nstyle is a bit off the rest of <code>Log::Report</code>, and there was a need to\nsincere simplification.  Each PO record will be represented by a\n<a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a>.</p>\n",
         "id" : "id672",
         "path" : "DESCRIPTION"
      },
      "id253" : {
         "path" : "NAME",
         "id" : "id253",
         "intro" : "<p>Dancer2::Plugin::LogReport - logging, exceptions and translations in Dancer2 via Log::Report</p>\n",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id1086-id542" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1086\">Log::Report::Translator::new()</a></p>",
         "id" : "id1086-id542",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id1086\">new</a></b>(&nbsp;%options&nbsp;)",
         "name" : "new",
         "extends" : "id1086"
      },
      "id771" : {
         "name" : "max_level",
         "intro" : "<p>Like <tt class=\"parameter\">min_level</tt>.</p>\n",
         "type" : "option",
         "id" : "id771",
         "params" : "$level"
      },
      "id367" : {
         "call" : "$obj-&gt;<b><a name=\"id367\">domain</a></b>",
         "type" : "i_method",
         "id" : "id367",
         "name" : "domain"
      },
      "id667" : {
         "id" : "id667",
         "type" : "warning",
         "name" : "no plurals expected for '$msgid'.",
         "subroutine" : "id663"
      },
      "id220" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>The <a class=\"jump\" href=\"id801\">Log::Report</a> exception/translation framework defines a large\nnumber of logging back-ends.  The same log messages can be sent to\nmultiple destinations at the same time via flexible dispatchers.\nWhen you use this logger in your Dancer application, it will nicely\nintegrate with non-Dancer modules which need logging.</p>\n\n<p>Many log back-ends, like syslog, have more levels of system messages.\nModules who explicitly load this module can use the missing <code>assert</code>,\n<code>notice</code>, <code>panic</code>, and <code>alert</code> log levels.  The <code>trace</code> name is\nprovided as well: when you are debugging, you add a 'trace' to your\nprogram... its just a better name than 'debug'.</p>\n\n<p>You probably want to set a very simple <code>logger_format</code>, because the\ndispatchers do already add some of the fields that the default\n<code>simple</code> format adds.  For instance, to get the filename/line-number\nin messages depends on the dispatcher 'mode' (f.i. 'DEBUG').</p>\n\n<p>You also want to set the log level to <code>debug</code>, because level filtering\nis controlled per dispatcher (as well)</p>\n",
         "type" : "chapter",
         "id" : "id220"
      },
      "id372" : {
         "value" : "'utf-8'",
         "type" : "default",
         "id" : "id372",
         "name" : "charset"
      },
      "id751-id669" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id751\">Log::Report::Lexicon::Table::pluralIndex()</a></p>",
         "name" : "pluralIndex",
         "diagnostics" : [
            "id752-id669"
         ],
         "call" : "$obj-&gt;<b><a name=\"id751\">pluralIndex</a></b>(&nbsp;$count&nbsp;)",
         "type" : "i_method",
         "id" : "id751-id669",
         "extends" : "id751"
      },
      "id1187-id760" : {
         "id" : "id1187-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)",
         "extends" : "id1187",
         "name" : "translate"
      },
      "id969-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id968\">Log::Report::Message::new(_class)</a></p>",
         "name" : "_class",
         "type" : "default",
         "id" : "id969-id221",
         "value" : "<code>undef</code>",
         "extends" : "id969"
      },
      "id1326" : {
         "path" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Dancer2::Plugin::LogReport::Message\n   is a <a class=\"jump\" href=\"id935\">Log::Report::Message</a>\n</pre>\n",
         "id" : "id1326",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id431" : {
         "name" : "charset",
         "id" : "id431",
         "intro" : "<p>Enforce character set for files.  We default to reading the character-set\nas defined in the header of each PO file.</p>\n",
         "type" : "option",
         "params" : "STRING"
      },
      "id219" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "intro" : "<pre>  # When your main program is not a Dancer object\n  use My::Dancer::App;\n  use Log::Report;\n  ... start dispatcher ...\n  error \"something is wrong\";   # Log::Report::error()\n\n  # When your main program is a Dancer object\n  use Dancer;\n  use Dancer::Logger::LogReport;\n  use Log::Report import =&gt; 'dispatcher';\n  ... start dispatcher ...\n  error \"something is wrong\";   # Dancer::error()\n\n  # In any case, your main program needs to start log dispatcers\n  # Both Dancer and other Log::Report based modules will send\n  # their messages here:\n  dispatcher FILE =&gt; 'default', ...;\n\n  # In your config\n  logger: log_report\n  logger_format: %i%m   # keep it simple\n  log: debug            # filtered by dispatchers\n</pre>\n",
         "type" : "chapter",
         "id" : "id219"
      },
      "id1148-id385" : {
         "call" : "$obj-&gt;<b><a name=\"id1148\">setContext</a></b>(&nbsp;STRING|HASH|ARRAY|PAIRS&nbsp;)",
         "diagnostics" : [
            "id1150-id385"
         ],
         "id" : "id1148-id385",
         "type" : "i_method",
         "extends" : "id1148",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1148\">Log::Report::Domain::setContext()</a></p>",
         "name" : "setContext"
      },
      "id494" : {
         "path" : "NAME",
         "id" : "id494",
         "intro" : "<p>Log::Report::Extract::PerlPPI - Collect translatable strings from Perl using PPI</p>\n",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id714" : {
         "name" : "Managing PO's",
         "level" : 2,
         "path" : "METHODS/Managing PO's",
         "subroutines" : [
            "id723",
            "id724",
            "id726",
            "id725"
         ],
         "nest" : [
            "id1302",
            "id1303"
         ],
         "id" : "id714",
         "type" : "section"
      },
      "id1240" : {
         "name" : "message",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id1240"
      },
      "id761" : {
         "name" : "NAME",
         "level" : 1,
         "path" : "NAME",
         "intro" : "<p>Log::Report::Dispatcher::LogDispatch - send messages to Log::Dispatch back-end</p>\n",
         "id" : "id761",
         "type" : "chapter"
      },
      "id377" : {
         "name" : "cannot read template from $file: $!",
         "subroutine" : "id370",
         "type" : "fault",
         "id" : "id377"
      },
      "id662" : {
         "subroutine" : "id657",
         "name" : "no msgid in block $where.",
         "id" : "id662",
         "type" : "warning"
      },
      "id569" : {
         "type" : "default",
         "value" : "<code>undef</code>",
         "id" : "id569",
         "name" : "charset"
      },
      "id388" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "intro" : "<p>Manage one translation domain for <a class=\"jump\" href=\"id299\">Log::Report::Template</a>.</p>\n",
         "type" : "chapter",
         "id" : "id388",
         "path" : "DESCRIPTION"
      },
      "id916" : {
         "id" : "id916",
         "value" : "'pid,nowait'",
         "type" : "default",
         "name" : "flags"
      },
      "id975" : {
         "name" : "_lang",
         "type" : "default",
         "value" : "&lt;from locale&gt;",
         "id" : "id975"
      },
      "id362" : {
         "type" : "default",
         "value" : "&lt;required&gt;",
         "id" : "id362",
         "name" : "domain"
      },
      "id677" : {
         "name" : "charset",
         "value" : "'UTF-8'",
         "id" : "id677",
         "type" : "default"
      },
      "id1198-id780" : {
         "params" : "INTEGER",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "id" : "id1198-id780",
         "name" : "linenr",
         "extends" : "id1198"
      },
      "id444" : {
         "path" : "DESCRIPTION",
         "intro" : "<p>This module handles the lookup of translation files for a whole\ndirectory tree.  It is lazy loading, which means that it will only\nbuild the search tree when addressed, not when the object is\ncreated.</p>\n",
         "id" : "id444",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id688" : {
         "name" : "index",
         "intro" : "<p>A set of translations (<a class=\"jump\" href=\"id611\">Log::Report::Lexicon::PO</a> objects),\nwith msgid as key.</p>\n",
         "type" : "option",
         "id" : "id688",
         "params" : "HASH"
      },
      "id540-id354" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id540\">Log::Report::Extract::store()</a></p>",
         "name" : "store",
         "diagnostics" : [
            "id541-id354"
         ],
         "call" : "$obj-&gt;<b><a name=\"id540\">store</a></b>(&nbsp;$domain, $filename, $linenr, $context, $msg, [$msg_plural]&nbsp;)",
         "type" : "i_method",
         "id" : "id540-id354",
         "extends" : "id540"
      },
      "id856" : {
         "intro" : "<pre>  # add three msgids to the translation table\n  my @colors = (N__\"red\", N__\"green\", N__\"blue\");\n  my @colors = N__w \"red green blue\";   # same\n  print __ $colors[1];                  # translate green\n\n  # using <a class=\"jump\" href=\"id845\">__()</a>, would work as well\n  my @colors = (__\"red\", __\"green\", __\"blue\");\n  print $colors[1];\n  # however: this will always create all Log::Report::Message objects,\n  # where maybe only one is used.\n</pre>\n",
         "id" : "id856",
         "type" : "example",
         "name" : "how to use <code>N__()</code>\n"
      },
      "id1253" : {
         "type" : "example",
         "intro" : "<pre>  try { report {to =&gt; 'default'}, ERROR =&gt; 'oops!' };\n  $@-&gt;reportFatal(to =&gt; 'syslog');\n\n  my ($syslog) = $exception-&gt;throw(to =&gt; 'syslog');\n  my @disps = $@-&gt;wasFatal-&gt;throw(reason =&gt; 'WARNING');\n</pre>\n",
         "id" : "id1253",
         "name" : "overrule defaults to report\n"
      },
      "id153" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "id" : "id153",
         "intro" : "<p>Read <a class=\"jump\" href=\"id1122\">Log::Report::Domain</a>.</p>\n",
         "type" : "chapter",
         "path" : "DESCRIPTION"
      },
      "id1166-id1217" : {
         "extends" : "id1166",
         "value" : "<code>depend on mode</code>",
         "id" : "id1166-id1217",
         "type" : "default",
         "name" : "accept",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1165\">Log::Report::Dispatcher::new(accept)</a></p>"
      },
      "id70" : {
         "name" : "defaults",
         "examples" : [
            "id71"
         ],
         "intro" : "<p>[1.00] Returns the current defaults for the <tt class=\"parameter\">$modifier</tt>.</p>\n",
         "type" : "i_method",
         "id" : "id70",
         "call" : "$obj-&gt;<b><a name=\"id70\">defaults</a></b>(&nbsp;$modifier&nbsp;)"
      },
      "id120" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>This module collects a few functions and definitions which are shared\nbetween different components in the <a class=\"jump\" href=\"id801\">Log::Report</a> infrastructure.\nThey should not be needed for end-user applications, although this\nman-page may contain some useful background information.</p>\n",
         "id" : "id120",
         "type" : "chapter"
      },
      "id1119" : {
         "intro" : "<p>Log::Report::DBIC::Profiler - query profiler for DBIx::Class</p>\n",
         "type" : "chapter",
         "id" : "id1119",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id979-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id978\">Log::Report::Message::new(_msgctxt)</a></p>",
         "name" : "_msgctxt",
         "type" : "default",
         "id" : "id979-id221",
         "value" : "<code>undef</code>",
         "extends" : "id979"
      },
      "id1330" : {
         "level" : 1,
         "name" : "INHERITANCE",
         "type" : "chapter",
         "intro" : "<pre> Log::Report::Template::Textdomain\n   is a <a class=\"jump\" href=\"id1122\">Log::Report::Domain</a>\n   is a <a class=\"jump\" href=\"id150\">Log::Report::Minimal::Domain</a>\n</pre>\n",
         "id" : "id1330",
         "path" : "INHERITANCE"
      },
      "id1208-id780" : {
         "extends" : "id1208",
         "name" : "abstract",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "type" : "option",
         "id" : "id1208-id780",
         "params" : "INTEGER"
      },
      "id1050" : {
         "name" : "Status",
         "level" : 2,
         "path" : "METHODS/Status",
         "subroutines" : [
            "id1052",
            "id1058",
            "id1051",
            "id1053"
         ],
         "id" : "id1050",
         "type" : "section"
      },
      "id529-id493" : {
         "call" : "$obj-&gt;<b><a name=\"id529\">domains</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id529\">Log::Report::Extract::domains()</a></p>",
         "type" : "i_method",
         "id" : "id529-id493",
         "extends" : "id529",
         "name" : "domains"
      },
      "id1082" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "id" : "id1082",
         "intro" : "<pre>  # internal infrastructure\n  my $msg = Log::Report::Message-&gt;new(_msgid =&gt; \"Hello World\\n\");\n  print Log::Report::Translator-&gt;new(...)-&gt;translate($msg);\n\n  # normal use\n  textdomain 'my-domain',\n    translator =&gt; Log::Report::Translator-&gt;new;  # default\n  print __\"Hello World\\n\";\n</pre>\n",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id938" : {
         "name" : "DESCRIPTION",
         "level" : 1,
         "path" : "DESCRIPTION",
         "intro" : "<p>Any use of a constructor function exported by <a class=\"jump\" href=\"id801\">Log::Report</a>, like\n<code>__()</code> (the function is named underscore-underscore) or <code>__x()</code>\n(underscore-underscore-x) will result in this Message object.  It will capture\nsome environmental information as well.</p>\n\n<p>The optional translation is delayed until it is really needed.\nCreating an object first and translating it later, might be slower than\ntranslating it immediately.  However (by design decissions of <a class=\"jump\" href=\"id801\">Log::Report</a>)\non the location where the message is produced, we do not yet know in\nwhat language to translate it to: that depends on the actual log dispatcher\nconfigurations in the main program.</p>\n",
         "type" : "chapter",
         "id" : "id938"
      },
      "id119" : {
         "path" : "SYNOPSIS",
         "id" : "id119",
         "intro" : "<pre>  my ($language, $territory, $charset, $modifier)\n     = parse_locale 'nl_BE.utf-8@home';\n\n  my @take = expand_reasons 'INFO-ERROR,PANIC';\n</pre>\n",
         "type" : "chapter",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id549" : {
         "inheritance" : {
            "extends" : [
               "Exporter"
            ]
         },
         "id" : "id549",
         "title" : "unix/windows locales",
         "is_pure_pod" : false,
         "package" : "Log::Report::Win32Locale",
         "distribution" : "Log-Report-Lexicon",
         "version" : "1.16",
         "chapters" : [
            "id550",
            "id1329",
            "id551",
            "id552",
            "id553"
         ],
         "name" : "Log::Report::Win32Locale"
      },
      "id642" : {
         "name" : "comment",
         "call" : "$obj-&gt;<b><a name=\"id642\">comment</a></b>(&nbsp;[@lines|\\@lines|$text]&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Returns a STRING which contains the cleaned paragraph of translator's\ncomment.  If an argument is specified, it will replace the current\ncomment.</p>\n",
         "id" : "id642"
      },
      "id741" : {
         "call" : "$class-&gt;<b><a name=\"id741\">new</a></b>(&nbsp;%options&nbsp;)",
         "type" : "c_method",
         "id" : "id741",
         "name" : "new"
      },
      "id1199-id1217" : {
         "name" : "linenr",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "extends" : "id1199",
         "type" : "default",
         "id" : "id1199-id1217",
         "value" : "&lt;required&gt;"
      },
      "id1193-id780" : {
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)",
         "options" : [
            [
               "id1208-id780",
               "id1209-id780"
            ],
            [
               "id1200-id780",
               "id1201-id780"
            ],
            [
               "id1196-id780",
               "id1197-id780"
            ],
            [
               "id1198-id780",
               "id1199-id780"
            ],
            [
               "id1204-id780",
               "id1205-id780"
            ],
            [
               "id1206-id780",
               "id1207-id780"
            ],
            [
               "id1194-id780",
               "id1195-id780"
            ],
            [
               "id1202-id780",
               "id1203-id780"
            ]
         ],
         "id" : "id1193-id780",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "name" : "stackTraceLine",
         "extends" : "id1193"
      },
      "id530-id493" : {
         "call" : "$obj-&gt;<b><a name=\"id530\">pots</a></b>(&nbsp;$domain&nbsp;)",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id530\">Log::Report::Extract::pots()</a></p>",
         "id" : "id530-id493",
         "type" : "i_method",
         "name" : "pots",
         "extends" : "id530"
      },
      "id464" : {
         "type" : "chapter",
         "intro" : "<p>This module is translating, based on MO files (binary versions of\nthe PO files, the \"Machine Object\" format)</p>\n\n<p>Actually, this module is not \"compact\" anymore: not trading off\nspeed for memory.  That may change again in the future.</p>\n\n<p>To get a MO file, you first need a PO file.  Then run <i class=\"filename\">msgfmt</i>, which\nis part of the gnu gettext package.</p>\n<pre>\n  msgfmt -cv -o $domain.mo $domain.po\n\n  # -c = --check-format &amp; --check-header &amp; --check-domain\n  # -v = --verbose\n  # -o = --output-file\n</pre>\n",
         "id" : "id464",
         "path" : "DESCRIPTION",
         "level" : 1,
         "name" : "DESCRIPTION"
      },
      "id1215" : {
         "name" : "a filter on syslog\n",
         "intro" : "<pre>  dispatcher filter =&gt; \\&amp;myfilter, 'syslog';\n\n  # ignore all translatable and non-translatable messages containing\n  # the word \"skip\"\n  sub myfilter($$$$)\n  {   my ($disp, $opts, $reason, $message) = @_;\n      return () if $message-&gt;untranslated =~ m/\\bskip\\b/;\n      ($reason, $message);\n  }\n</pre>\n",
         "id" : "id1215",
         "type" : "example"
      },
      "id342" : {
         "path" : "DETAILS/Textdomains",
         "intro" : "<p>This module uses standard gettext PO-translation tables via the\n<a class=\"jump\" href=\"id727\">Log::Report::Lexicon</a> distribution.  An important role here is\nfor the 'textdomain': the name of the set of translation tables.</p>\n\n<p>For code, you say \"use <a class=\"jump\" href=\"id801\">Log::Report</a> '&lt;textdomain>;\" in each related\nmodule (pm file).  We cannot do achieve comparible syntax with\nTemplate Toolkit: you must specify the textdomain before the\ntemplates get processed.</p>\n\n<p>Your website may contain multiple separate sets of templates.  For\ninstance, a standard website implementation with some local extensions.\nThe only way to get that to work, is by using different translation\nfunctions: one textdomain may use 'loc()', where an other uses 'trans()'.</p>\n",
         "name" : "Textdomains",
         "level" : 2,
         "id" : "id342",
         "type" : "section",
         "nest" : [
            "id343",
            "id344"
         ]
      },
      "id755-id561" : {
         "extends" : "id755",
         "name" : "nrPlurals",
         "call" : "$obj-&gt;<b><a name=\"id755\">nrPlurals</a></b>",
         "id" : "id755-id561",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id755\">Log::Report::Lexicon::Table::nrPlurals()</a></p>",
         "type" : "i_method"
      },
      "id1258" : {
         "id" : "id1258",
         "intro" : "<pre>  print $exception;  # via overloading\n  $exception-&gt;print; # OO style\n</pre>\n",
         "type" : "example"
      },
      "id999-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id999\">Log::Report::Message::inClass()</a></p>",
         "type" : "i_method",
         "id" : "id999-id221",
         "call" : "$obj-&gt;<b><a name=\"id999\">inClass</a></b>(&nbsp;$tag|Regexp&nbsp;)",
         "name" : "inClass",
         "extends" : "id999"
      },
      "id936" : {
         "intro" : "<p>Log::Report::Message - a piece of text to be translated</p>\n",
         "type" : "chapter",
         "id" : "id936",
         "path" : "NAME",
         "level" : 1,
         "name" : "NAME"
      },
      "id1150-id385" : {
         "name" : "you need to configure context_rules before setContext",
         "extends" : "id1150",
         "subroutine" : "id1148",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1148\">Log::Report::Domain::setContext()</a></p>",
         "id" : "id1150-id385",
         "type" : "error"
      },
      "id1062" : {
         "path" : "DESCRIPTION",
         "intro" : "<p>[Included since <a class=\"jump\" href=\"id801\">Log::Report</a> v1.00]\nMojo likes to log messages directly into a file, by default.  <a class=\"jump\" href=\"id801\">Log::Report</a>\nconstructs a <a class=\"jump\" href=\"id1225\">Log::Report::Exception</a> object first.</p>\n\n<p>Be aware that this extension does catch the messages to be logged,\nbut that the dispatching of the error follows a different route now.\nFor instance, you cannot use <code>$ENV{MOJO_LOG_LEVEL}</code> to control the output\nlevel, but you need to use <a class=\"jump\" href=\"id825\">Log::Report::dispatcher()</a> action <code>mode</code>.</p>\n\n<p>Mojo defines five \"levels\" of messages, which map onto <a class=\"jump\" href=\"id801\">Log::Report</a>'s\nreasons this way:</p>\n<pre>\n  debug  TRACE\n  info   INFO\n  warn   WARNING\n  error  ERROR\n  fatal  ALERT\n</pre>\n",
         "id" : "id1062",
         "type" : "chapter",
         "name" : "DESCRIPTION",
         "level" : 1
      },
      "id184" : {
         "id" : "id184",
         "value" : "&lt;depends on reason&gt;",
         "type" : "default",
         "name" : "is_fatal"
      },
      "id139" : {
         "intro" : "<p>[1.02] Escape HTML volatile characters.</p>\n",
         "type" : "function",
         "id" : "id139",
         "call" : "<b><a name=\"id139\">to_html</a></b>(&nbsp;$string&nbsp;)",
         "name" : "to_html"
      },
      "id918" : {
         "name" : "facility",
         "type" : "default",
         "value" : "'user'",
         "id" : "id918"
      },
      "id386" : {
         "path" : "NAME",
         "intro" : "<p>Log::Report::Template::Textdomain - template translation with one domain</p>\n",
         "id" : "id386",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id1209-id1217" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "name" : "abstract",
         "id" : "id1209-id1217",
         "type" : "default",
         "value" : "1",
         "extends" : "id1209"
      },
      "id686" : {
         "name" : "plural_forms",
         "type" : "option",
         "intro" : "<p>[0.992] When this option is used, it overrules <tt class=\"parameter\">nr_plurals</tt> and\n<tt class=\"parameter\">plural_alg</tt>.  The RULE should be a full \"Plural-Forms\" field.</p>\n",
         "id" : "id686",
         "params" : "RULE"
      },
      "id1203-id780" : {
         "id" : "id1203-id780",
         "type" : "default",
         "value" : "&lt;required&gt;",
         "extends" : "id1203",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "name" : "params"
      },
      "id1176" : {
         "id" : "id1176",
         "type" : "error",
         "subroutine" : "id1164",
         "name" : "illegal format_reason '$format' for dispatcher"
      },
      "id397" : {
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id397",
         "name" : "lexicon"
      },
      "id1186-id1217" : {
         "name" : "log",
         "extends" : "id1186",
         "call" : "$obj-&gt;<b><a name=\"id1186\">log</a></b>(&nbsp;\\%options, $reason, $message, $domain&nbsp;)",
         "id" : "id1186-id1217",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1186\">Log::Report::Dispatcher::log()</a></p>",
         "type" : "i_method"
      },
      "id1180-id1021" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1180\">Log::Report::Dispatcher::type()</a></p>",
         "id" : "id1180-id1021",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1180\">type</a></b>",
         "name" : "type",
         "extends" : "id1180"
      },
      "id995" : {
         "name" : "valueOf",
         "examples" : [
            "id996"
         ],
         "call" : "$obj-&gt;<b><a name=\"id995\">valueOf</a></b>(&nbsp;$parameter&nbsp;)",
         "id" : "id995",
         "intro" : "<p>Lookup the named <tt class=\"parameter\">$parameter</tt> for the message.  All pre-defined names\nhave their own method which should be used with preference.</p>\n",
         "type" : "i_method"
      },
      "id723" : {
         "intro" : "<p>Replace the \"PO-Revision-Date\" with the specified <tt class=\"parameter\">$date</tt>, or the current\nmoment.</p>\n",
         "id" : "id723",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id723\">updated</a></b>(&nbsp;[$date]&nbsp;)",
         "name" : "updated"
      },
      "id858" : {
         "intro" : "<pre>  my @save = N__n \"save file\", \"save files\";\n  my @save = (N__n \"save file\", \"save files\");\n  my @save = N__n(\"save file\", \"save files\");\n\n  # be warned about SCALARs in prototype!\n  print __n @save, $nr_files;  # wrong!\n  print __n $save[0], $save[1], @files, %vars;\n</pre>\n",
         "type" : "example",
         "id" : "id858",
         "name" : "how to use <a class=\"jump\" href=\"id857\">N__n()</a>\n"
      },
      "id1130" : {
         "name" : "nativeLanguage",
         "call" : "$obj-&gt;<b><a name=\"id1130\">nativeLanguage</a></b>",
         "type" : "i_method",
         "id" : "id1130"
      },
      "id697" : {
         "value" : "&lt;required&gt;",
         "type" : "default",
         "id" : "id697",
         "name" : "charset"
      },
      "id1319" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "id" : "id1319",
         "type" : "section"
      },
      "id750" : {
         "subroutine" : "id749",
         "name" : "only acceptable parameter is 'ACTIVE'",
         "id" : "id750",
         "type" : "error"
      },
      "id1179-id1066" : {
         "extends" : "id1179",
         "name" : "name",
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "type" : "i_method",
         "id" : "id1179-id1066"
      },
      "id347" : {
         "level" : 3,
         "name" : "Translation syntax, more magic",
         "type" : "subsection",
         "intro" : "<p>With TT, we can add a simplificition which we cannot offer for Perl\ntranslations: TT variables are dynamic and stored in the stash which\nwe can access.  Therefore, we can lookup \"accidentally\" missed parameters.</p>\n<pre>\n  [% SET name = 'John Doe' %]\n  [% loc(\"Hi {name}\", name =&gt; name) %]  # looks silly\n  [% loc(\"Hi {name}\") %]                # uses TT stash directly\n</pre>\n\n<p>Sometimes, computation of objects is expensive: you never know.  So, you\nmay try to avoid repeated computation.  In the follow example, \"soldOn\"\nis collected/computed twice:</p>\n<pre>\n  [% IF product.soldOn %]\n  &lt;tdE&lt;gt>[% loc(\"Sold on {product.soldOn DATE}\")&lt;/tdE&lt;gt>\n  [% END %]\n</pre>\n\n<p>The performance is predictable optimal with:</p>\n<pre>\n  [% sold_on = product.soldOn; IF sold_on %]\n  &lt;tdE&lt;gt>[% loc(\"Sold on {sold_on DATE}\")&lt;/tdE&lt;gt>\n  [% END %]\n</pre>\n",
         "id" : "id347",
         "path" : "DETAILS/Supported syntax/Translation syntax, more magic"
      },
      "id1048" : {
         "name" : "reportAll",
         "call" : "$obj-&gt;<b><a name=\"id1048\">reportAll</a></b>(&nbsp;%options&nbsp;)",
         "type" : "i_method",
         "intro" : "<p>Re-cast the messages in all collect exceptions into the defined\ndispatchers, which were disabled during the try block. The <tt class=\"parameter\">%options</tt>\nwill end-up as HASH of <tt class=\"parameter\">%options</tt> to <a class=\"jump\" href=\"id807\">Log::Report::report()</a>; see\n<a class=\"jump\" href=\"id1252\">Log::Report::Exception::throw()</a> which does the job.</p>\n",
         "id" : "id1048"
      },
      "id1167-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "type" : "option",
         "id" : "id1167-id760",
         "params" : "LOCALE",
         "extends" : "id1167",
         "name" : "locale"
      },
      "id945" : {
         "call" : "$class-&gt;<b><a name=\"id945\">new</a></b>(&nbsp;%options&nbsp;)",
         "options" : [
            [
               "id960",
               "id961"
            ],
            [
               "id956",
               "id957"
            ],
            [
               "id968",
               "id969"
            ],
            [
               "id966",
               "id967"
            ],
            [
               "id976",
               "id977"
            ],
            [
               "id950",
               "id951"
            ],
            [
               "id948",
               "id949"
            ],
            [
               "id946",
               "id947"
            ],
            [
               "id972",
               "id973"
            ],
            [
               "id974",
               "id975"
            ],
            [
               "id978",
               "id979"
            ],
            [
               "id954",
               "id955"
            ],
            [
               "id952",
               "id953"
            ],
            [
               "id958",
               "id959"
            ],
            [
               "id962",
               "id963"
            ],
            [
               "id964",
               "id965"
            ],
            [
               "id970",
               "id971"
            ]
         ],
         "id" : "id945",
         "intro" : "<p><b>End-users: do not use this method directly</b>, but use\n<a class=\"jump\" href=\"id845\">Log::Report::__()</a>, <a class=\"jump\" href=\"id847\">Log::Report::__x()</a> and friends.  The <tt class=\"parameter\">%options</tt>\nis a mixed list of object initiation parameters (all with a leading\nunderscore) and variables to be filled in into the translated <tt class=\"parameter\">_msgid</tt>\nstring.</p>\n",
         "type" : "c_method",
         "name" : "new"
      },
      "id1201" : {
         "id" : "id1201",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "name" : "call"
      },
      "id647" : {
         "name" : "addReferences",
         "type" : "i_method",
         "intro" : "<p>A single scalar contains a blank separated list of <tt class=\"parameter\">@locations</tt>.  The LIST\nand ARRAY contain separate <tt class=\"parameter\">@locations</tt>.  A LOCATION is of the form\n<code>filename:linenumber</code>.  Returns the internal HASH with references.</p>\n",
         "id" : "id647",
         "call" : "$obj-&gt;<b><a name=\"id647\">addReferences</a></b>(&nbsp;$locations|@locations|\\@locations&nbsp;)"
      },
      "id474" : {
         "name" : "cannot read superblock from $fn: $!",
         "subroutine" : "id467",
         "type" : "fault",
         "id" : "id474"
      },
      "id1181-id1066" : {
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>",
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "id" : "id1181-id1066",
         "extends" : "id1181",
         "name" : "mode"
      },
      "id756-id461" : {
         "extends" : "id756",
         "name" : "header",
         "call" : "$obj-&gt;<b><a name=\"id756\">header</a></b>(&nbsp;$field&nbsp;)",
         "id" : "id756-id461",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id756\">Log::Report::Lexicon::Table::header()</a></p>",
         "type" : "i_method"
      },
      "id1194" : {
         "params" : "CLASS",
         "id" : "id1194",
         "type" : "option",
         "name" : "package"
      },
      "id1170-id780" : {
         "name" : "mode",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "extends" : "id1170",
         "value" : "'NORMAL'",
         "type" : "default",
         "id" : "id1170-id780"
      },
      "id581" : {
         "diagnostics" : [
            "id582"
         ],
         "call" : "$obj-&gt;<b><a name=\"id581\">msgstr</a></b>(&nbsp;$msgid, [$count, [$msgctxt]&nbsp;)",
         "type" : "i_method",
         "id" : "id581",
         "name" : "msgstr",
         "intro" : "<p>Returns the translated string for <tt class=\"parameter\">$msgid</tt>.  When not specified, <tt class=\"parameter\">$count</tt> is 1\n(the single form).</p>\n"
      },
      "id789" : {
         "name" : "new",
         "intro" : "<p>The Log::Log4perl infrastructure has all settings in a configuration\nfile.  In that file, you should find a category with the <tt class=\"parameter\">$name</tt>.</p>\n",
         "options" : [
            [
               "id1165-id780",
               "id794"
            ],
            [
               "id1173-id780",
               "id1174-id780"
            ],
            [
               "id792",
               "id793"
            ],
            [
               "id1171-id780",
               "id1172-id780"
            ],
            [
               "id1167-id780",
               "id1168-id780"
            ],
            [
               "id1169-id780",
               "id1170-id780"
            ],
            [
               "id790",
               "id791"
            ]
         ],
         "type" : "c_method",
         "id" : "id789",
         "diagnostics" : [
            "id795"
         ],
         "call" : "$class-&gt;<b><a name=\"id789\">new</a></b>(&nbsp;$type, $name, %options&nbsp;)"
      },
      "id949-id221" : {
         "extends" : "id949",
         "value" : "&lt;from \"use <a class=\"jump\" href=\"id801\">Log::Report</a>\">",
         "type" : "default",
         "id" : "id949-id221",
         "name" : "_domain",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id948\">Log::Report::Message::new(_domain)</a></p>"
      },
      "id734" : {
         "type" : "section",
         "id" : "id734",
         "path" : "METHODS/Attributes",
         "level" : 2,
         "name" : "Attributes"
      },
      "id1065" : {
         "name" : "new",
         "id" : "id1065",
         "intro" : "<p>Inherited <tt class=\"parameter\">%options</tt> <code>path</code> and <code>level</code> are ignored.</p>\n",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id1065\">new</a></b>(&nbsp;%options&nbsp;)"
      },
      "id1191" : {
         "call" : "$obj-&gt;<b><a name=\"id1191\">skipStack</a></b>",
         "intro" : "<p>[1.13] Returns the number of nestings in the stack which should be skipped\nto get outside the <a class=\"jump\" href=\"id801\">Log::Report</a> (and related) modules.  The end-user\ndoes not want to see those internals in stack-traces.</p>\n",
         "id" : "id1191",
         "type" : "i_method",
         "name" : "skipStack"
      },
      "id599" : {
         "name" : "needDecode",
         "intro" : "<p>Converts the context settings passed with the MSGID, into a <tt class=\"parameter\">HASH</tt> which will\nbe matched to the context providers.</p>\n",
         "call" : "$any-&gt;<b><a name=\"id599\">needDecode</a></b>(&nbsp;$source, STRING|ARRAY|HASH|PAIRS&nbsp;)",
         "diagnostics" : [
            "id600"
         ],
         "type" : "ci_method",
         "id" : "id599"
      },
      "id239" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "id" : "id239",
         "intro" : "<p>To use this engine, you may configure <a href=\"https://metacpan.org/dist/Dancer2\">manual Dancer2</a> via <code>config.yaml</code>:</p>\n<pre>\n  template:   \"TTLogReport\"\n</pre>\n\n<p>Or you may also change the rendering engine on a per-route basis by\nsetting it manually with <code>set</code>:</p>\n<pre>\n  set template =&gt; 'TTLogReport';\n</pre>\n\n<p>Application:</p>\n<pre>\n  # In your daemon startup\n  my $pot    = Log::Report::Translator::POT-&gt;new(lexicon =&gt; $poddir);\n  my $domain = (engine 'template')-&gt;addTextdomain(name =&gt; $mydomain);\n  $domain-&gt;configure(translator =&gt; $pot);\n\n  # Use it:\n  get '/' =&gt; sub {\n    template index =&gt; {\n        title        =&gt; 'my webpage',\n\n        # The actual language is stored in the user session.\n        translate_to =&gt; 'nl_NL.utf-8',\n    };\n  };\n</pre>\n",
         "type" : "chapter"
      },
      "id284" : {
         "path" : "DETAILS/In Use/Exceptions",
         "type" : "subsection",
         "intro" : "<p><a class=\"jump\" href=\"id801\">Log::Report</a> is a combination of a logger and an exception system.  Messages\nto be logged are <i>thrown</i> to all listening dispatchers to be handled.</p>\n\n<p>This module will also catch any unexpected exceptions:</p>\n<pre>\n  # This will be caught, the error will be logged (full stacktrace to STDOUT,\n  # short message to the session messages), and the user will be forwarded\n  # (default to /). This would also be sent to syslog with the appropriate\n  # dispatcher.\n  get 'route' =&gt; sub {\n      my $foo = 1;\n      my $bar = $foo-&gt;{x}; # whoops\n  }\n</pre>\n\n<p>For a production application (<code>show_errors: 1</code>), the message saved in the\nsession will be the generic text \"An unexpected error has occurred\". This\ncan be customised in the configuration file, and will be translated.</p>\n",
         "id" : "id284",
         "name" : "Exceptions",
         "level" : 3
      },
      "id1143-id385" : {
         "subroutine" : "id1133",
         "extends" : "id1143",
         "name" : "Missing key '$key' in format '$format', file $use",
         "id" : "id1143-id385",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1133\">Log::Report::Domain::configure()</a></p>",
         "type" : "warning"
      },
      "id791" : {
         "value" : "[]",
         "id" : "id791",
         "type" : "default",
         "name" : "to_level"
      },
      "id692" : {
         "name" : "filename",
         "type" : "option",
         "intro" : "<p>Specify an output filename.  The name can also be specified when\n<a class=\"jump\" href=\"id703\">write()</a> is called.</p>\n",
         "id" : "id692",
         "params" : "STRING"
      },
      "id1212" : {
         "path" : "DETAILS/Processing the message",
         "name" : "Processing the message",
         "level" : 2,
         "type" : "section",
         "id" : "id1212",
         "nest" : [
            "id1213",
            "id1214"
         ]
      },
      "id411" : {
         "name" : "translateTo",
         "intro" : "<p>Set the language to translate to for <tt class=\"parameter\">$lang</tt>, for this domain only.  This may\nbe useful when various text domains do not support the same destination languages.\nBut in general, you can best use <a class=\"jump\" href=\"id319\">Log::Report::Template::translateTo()</a>.</p>\n",
         "id" : "id411",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id411\">translateTo</a></b>(&nbsp;$lang&nbsp;)"
      },
      "id1006" : {
         "options" : [
            [
               "id1007",
               "id1008"
            ]
         ],
         "intro" : "<p>Convert the data of this message into a (nested) HASH which optimally\npreserves its content.  Pass this to <a class=\"jump\" href=\"id1010\">thaw()</a> to get the object back.</p>\n\n<p>The returned HASH can be serialized safely with (for instance) YAML\nor JSON.  Then, it can be reconstructed from the de-serialized data.\nAt the moment, all facts can be preserved.</p>\n",
         "type" : "i_method",
         "id" : "id1006",
         "call" : "$obj-&gt;<b><a name=\"id1006\">freeze</a></b>(&nbsp;%options&nbsp;)",
         "name" : "freeze",
         "examples" : [
            "id1009"
         ]
      },
      "id1204" : {
         "params" : "INTEGER",
         "type" : "option",
         "id" : "id1204",
         "name" : "max_line"
      },
      "id1126" : {
         "nest" : [
            "id1127",
            "id1129",
            "id1147"
         ],
         "id" : "id1126",
         "type" : "chapter",
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS"
      },
      "id392" : {
         "intro" : "<p>The textdomain can only be used in the indicated directories: if found\nanywhere else, it's an error.  When not specified, the function is\nallowed everywhere.</p>\n",
         "id" : "id392",
         "type" : "option",
         "params" : "DIRECTORY|ARRAY",
         "name" : "only_in_directory"
      },
      "id1200-id1091" : {
         "extends" : "id1200",
         "name" : "call",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1200\">Log::Report::Dispatcher::stackTraceLine(call)</a></p>",
         "id" : "id1200-id1091",
         "type" : "option",
         "params" : "STRING"
      },
      "id1187-id780" : {
         "extends" : "id1187",
         "name" : "translate",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1187\">Log::Report::Dispatcher::translate()</a></p>",
         "type" : "i_method",
         "id" : "id1187-id780",
         "call" : "$obj-&gt;<b><a name=\"id1187\">translate</a></b>(&nbsp;\\%options, $reason, $message&nbsp;)"
      },
      "id169-id1122" : {
         "type" : "default",
         "id" : "id169-id1122",
         "value" : "<code>PRINTI</code>",
         "extends" : "id169",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id168\">Log::Report::Minimal::Domain::configure(formatter)</a></p>",
         "name" : "formatter"
      },
      "id207" : {
         "type" : "function",
         "id" : "id207",
         "call" : "<b><a name=\"id207\">__xn</a></b>(&nbsp;$single_msgid, $plural_msgid, $count, PAIRS&nbsp;)",
         "name" : "__xn"
      },
      "id473" : {
         "name" : "unsupported file type (magic number is $magic)",
         "subroutine" : "id467",
         "type" : "error",
         "id" : "id473"
      },
      "id926" : {
         "name" : "charset",
         "id" : "id926",
         "value" : "'utf8'",
         "type" : "default"
      },
      "id970-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id970\">Log::Report::Message::new(_to)</a></p>",
         "id" : "id970-id221",
         "type" : "option",
         "params" : "$dispatcher",
         "extends" : "id970",
         "name" : "_to"
      },
      "id1205-id1217" : {
         "name" : "max_line",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1204\">Log::Report::Dispatcher::stackTraceLine(max_line)</a></p>",
         "extends" : "id1205",
         "value" : "<code>undef</code>",
         "id" : "id1205-id1217",
         "type" : "default"
      },
      "id1358" : {
         "path" : "INHERITANCE",
         "id" : "id1358",
         "intro" : "<pre> Log::Report::Dispatcher::LogDispatch\n   is a <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>\n</pre>\n",
         "type" : "chapter",
         "name" : "INHERITANCE",
         "level" : 1
      },
      "id847" : {
         "name" : "__x",
         "intro" : "<p>Translate the <tt class=\"parameter\">$msgid</tt> and then interpolate the VARIABLES in that string.\nOf course, translation and interpolation is delayed as long as possible.\nBoth OPTIONS and VARIABLES are key-value pairs.</p>\n\n<p>The <tt class=\"parameter\">PAIRS</tt> are options for <a class=\"jump\" href=\"id945\">Log::Report::Message::new()</a> and variables\nto be filled in.</p>\n",
         "examples" : [
            "id848"
         ],
         "id" : "id847",
         "type" : "function",
         "diagnostics" : [
            "id849"
         ],
         "call" : "<b><a name=\"id847\">__x</a></b>(&nbsp;$msgid, PAIRS&nbsp;)"
      },
      "id1038" : {
         "id" : "id1038",
         "value" : "'ERROR'",
         "type" : "default",
         "name" : "on_die"
      },
      "id520-id493" : {
         "extends" : "id520",
         "name" : "lexicon",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id520\">Log::Report::Extract::new(lexicon)</a></p>",
         "type" : "option",
         "id" : "id520-id493",
         "params" : "$directory"
      },
      "id1315" : {
         "level" : 3,
         "name" : "Filters",
         "id" : "id1315",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Filters"
      },
      "id1153" : {
         "name" : "translate",
         "type" : "i_method",
         "intro" : "<p>Translate the <tt class=\"parameter\">$message</tt> into the <tt class=\"parameter\">$language</tt>.</p>\n",
         "id" : "id1153",
         "call" : "$obj-&gt;<b><a name=\"id1153\">translate</a></b>(&nbsp;$message, $language&nbsp;)"
      },
      "id102" : {
         "path" : "DETAILS/Interpolation: Modifiers/Modifiers: YEAR, DATE(), TIME, and DT()",
         "intro" : "<p>[0.91] A set of modifiers help displaying dates and times.  They are a\nlittle flexible in values they accept, but do not expect miracles: when\nit get harder, you will need to process it yourself.</p>\n\n<p>The actual treatment of a time value depends on the value.  Four\ndifferent situations:</p>\n\n<ol>\n\n\n\n<p><li>numeric<br />\nA pure numeric value is considered \"seconds since epoch\", unless it\nis smaller than 21000000, in which case it is taken as date without\nseparators.</p>\n\n\n\n<p><li>DateTime object<br />\n[1.00] Use a DateTime object to provide the value.  This way, the\nformat does not need to know whether the date is specified as object or\nas string.</p>\n<pre>\n  my $now = DateTime-&gt;now;\n  printi \"{t YEAR}\", t =&gt; $now;  # works for DateTime, epoch and string\n  printi \"{t.year YEAR}\", t =&gt; $now;  # same effect, DateTime only\n  printi \"{t.year}\", t =&gt; $now;  # will also work, not as nice\n</pre>\n\n\n\n<p><li>date format without time-zone<br />\nThe same formats are understood as in the next option, but without\ntime-zone information.  The date is processed as text as if in the\nlocal time zone, and the output in the local time-zone.</p>\n<li>date format with time-zone<br />\n\n<p>By far not all possible date formats are supported, just a few common\nversions, like</p>\n<pre>\n  2017-06-27 10:04:15 +02:00\n  2017-06-27 17:34:28.571491+02  # psql timestamp with zone\n  20170627100415+2\n  2017-06-27T10:04:15Z           # iso 8601\n  20170627                       # only for YEAR and DATE\n  2017-6-1                       # only for YEAR and DATE\n  12:34                          # only for TIME\n</pre>\n\n<p>The meaning of <code>05-04-2017</code> is ambiguous, so not supported.  Milliseconds\nget ignored.</p>\n\n<p>When the provided value has a timezone indication, it will get\nconverted into the local timezone of the observer.</p>\n\n</ol>\n\n<p>The output of <code>YEAR</code> is in format 'YYYY', where <code>TIME</code> produces 'HH:mm:ss'.\n<code>DT</code> and <code>DATE</code> are configurable.</p>\n\n<p>The DT modifier can produce different formats:</p>\n<pre>\n  DT(ASC)     : %a %b %e %T %Y       asctime output (not on Windows)\n  DT(FT)      : %F %T                YYYY-MM-DD HH:MM:SS (default)\n  DT(ISO)     : %FT%T%z              iso8601\n  DT(RFC822)  : %a, %d %b %y %T %z   email old\n  DT(RFC2822) : %a, %d %b %Y %T %z   email newer\n  DT(RFC5322) : %a, %d %b %Y %T %z   email newest [0.96]\n  DT(%F-%T)                          [1.02] any own format\n</pre>\n\n<p>You may suggest additional formats, or add your own modifier.  For your own\nformat: be warned that <code>%F</code> and <code>%T</code> are not supported on some Windows\nversions (but the difference is hidden by Perl >5.38).</p>\n\n<p>[1.02] Also, the DATE modifier can produce different formats:</p>\n<pre>\n  DATE(-)     : %Y-%m-%d\n  DATE(/)     : %Y/%m/%d\n  DATE(%d-%m-%Y)         any own pattern\n  DATE(%m-%d-%Y)         better not use this broken order\n</pre>\n\n<p>Other fields than <code>%Y</code>, <code>%m</code>, and <code>%d</code> are not supported. Other characters\nare left untouched.</p>\n\n<p>The defaults are:</p>\n<pre>\n  DATE =&gt; { format =&gt; '-' },\n  DT   =&gt; { format =&gt; 'FT' },\n</pre>\n",
         "type" : "subsection",
         "id" : "id102",
         "name" : "Modifiers: YEAR, DATE(), TIME, and DT()",
         "level" : 3
      },
      "id110" : {
         "path" : "DETAILS/Output encoding",
         "intro" : "<p>[0.91] This module is also used by <a class=\"jump\" href=\"id299\">Log::Report::Template</a>, which is used\nto insert (translated) strings with parameters into HTML templates.\nYou can imagine that some of the parameter may need to be encoded to\nHTML in the template, and other not.</p>\n",
         "name" : "Output encoding",
         "level" : 2,
         "id" : "id110",
         "type" : "section",
         "nest" : [
            "id111",
            "id112"
         ]
      },
      "id1219" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  dispatcher Log::Report::Dispatcher::Perl =&gt; 'default',\n    accept =&gt; 'NOTICE-';\n\n  # close the default dispatcher\n  dispatcher close =&gt; 'default';\n</pre>\n",
         "type" : "chapter",
         "id" : "id1219",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id560" : {
         "name" : "ms_locale",
         "id" : "id560",
         "intro" : "<p>Returns the locale setting from the control panel.</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id560\">ms_locale</a></b>"
      },
      "id1195-id1217" : {
         "name" : "package",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1194\">Log::Report::Dispatcher::stackTraceLine(package)</a></p>",
         "extends" : "id1195",
         "value" : "&lt;required&gt;",
         "id" : "id1195-id1217",
         "type" : "default"
      },
      "id733" : {
         "id" : "id733",
         "type" : "c_method",
         "call" : "$class-&gt;<b><a name=\"id733\">new</a></b>(&nbsp;%options&nbsp;)",
         "name" : "new"
      },
      "id705" : {
         "type" : "default",
         "value" : "<code>false</code>",
         "id" : "id705",
         "name" : "only_active"
      },
      "id519-id493" : {
         "type" : "c_method",
         "id" : "id519-id493",
         "options" : [
            [
               "id522-id493",
               "id523-id493"
            ],
            [
               "id520-id493",
               "id521-id493"
            ]
         ],
         "call" : "$class-&gt;<b><a name=\"id519\">new</a></b>(&nbsp;%options&nbsp;)",
         "diagnostics" : [
            "id524-id493",
            "id525-id493"
         ],
         "extends" : "id519",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id519\">Log::Report::Extract::new()</a></p>",
         "name" : "new"
      },
      "id97" : {
         "name" : "Modifier: POSIX format starts with '%'",
         "level" : 3,
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: POSIX format starts with '%'",
         "intro" : "<p>As shown in the examples above, you can specify a format.  This can,\nfor instance, help you with rounding or columns:</p>\n<pre>\n  printp \"π = {pi%.3f}\", pi =&gt; 3.1415;\n  printp \"weight is {kilogram%d}\", kilogram =&gt; 127*OUNCE_PER_KILO;\n  printp \"{filename%-20.20s}\\n\", filename =&gt; $fn;\n</pre>\n",
         "nest" : [
            "id98",
            "id99"
         ],
         "id" : "id97",
         "type" : "subsection"
      },
      "id892" : {
         "type" : "subsection",
         "id" : "id892",
         "nest" : [
            "id893"
         ],
         "intro" : "<p>Traditionally, perl has a very simple view on error reports: you\neither have a warning or an error.  However, it would be much clearer\nfor user's and module-using applications, when a distinction is made\nbetween various causes.  For instance, a configuration error is quite\ndifferent from a disk-full situation.  In <code>Log::Report</code>, the produced\nreports in the code tell <i>what</i> is wrong.  The main application defines\nloggers, which interpret the cause into (syslog) levels.</p>\n\n<p>Defined by <code>Log::Report</code> are</p>\n\n<ul>\n\n\n<p><li>trace (debug, program)<br />\nThe message will be used when some logger has debugging enabled.  The\nmessages show steps taken by the program, which are of interest by the\ndevelopers and maintainers of the code, but not for end-users.</p>\n\n\n\n<p><li>assert (program)<br />\nShows an unexpected condition, but continues to run.  When you want the\nprogram to abort in such situation, that use <code>panic</code>.</p>\n\n\n\n<p><li>info (verbose, program)<br />\nThese messages show larger steps in the execution of the program.\nExperienced users of the program usually do not want to see all these\nintermediate steps.  Most programs will display info messages (and\nhigher) when some <code>verbose</code> flag is given on the command-line.</p>\n\n\n\n<p><li>notice (program)<br />\nAn user may need to be aware of the program's accidental smart behavior,\nfor instance, that it initializes a lasting <code>Desktop</code> directory in your\nhome directory.  Notices should be sparse.</p>\n\n\n\n<p><li>warning (program)<br />\nThe program encountered some problems, but was able to work around it\nby smart behavior.  For instance, the program does not understand a\nline from a log-file, but simply skips the line.</p>\n\n\n\n<p><li>mistake (user)<br />\nWhen a user does something wrong, but what is correctable by smart\nbehavior of the program.  For instance, in some configuration file,\nyou can fill-in \"yes\" or \"no\", but the user wrote \"yeah\".  The program\ninterprets this as \"yes\", producing a mistake message as warning.</p>\n\n<p>It is much nicer to tell someone that he/she made a mistake, than\nto call that an error.</p>\n\n\n\n<p><li>error (user)<br />\nThe user did something wrong, which is not automatically correctable\nor the program is not willing to correct it automatically for reasons\nof code quality.  For instance, an unknown option flag is given on the\ncommand-line.  These are configuration issues, and have no useful\nvalue in <code>$!</code>.  The program will be stopped, usually before taken off.</p>\n\n\n\n<p><li>fault (system)<br />\nThe program encountered a situation where it has no work-around.  For\ninstance, a file cannot be opened to be written.  The cause of that\nproblem can be some user error (i.e. wrong filename), or external\n(you accidentally removed a directory yesterday).  In any case, the\n<code>$!</code> (<code>$ERRNO</code>) variable is set here.</p>\n\n\n\n<p><li>alert (system)<br />\nSome external cause disturbs the execution of the program, but the\nprogram stays alive and will try to continue operation.  For instance,\nthe connection to the database is lost.  After a few attempts, the\ndatabase can be reached and the program continues as if nothing happened.\nThe cause is external, so <code>$!</code> is set.  Usually, a system administrator\nneeds to be informed about the problem.</p>\n\n\n\n<p><li>failure (system)<br />\nSome external cause makes it impossible for this program to continue.\n<code>$!</code> is set, and usually the system administrator wants to be\ninformed.  The program will die.</p>\n\n<p>The difference with <code>fault</code> is subtile and not always clear.  A fault\nreports an error returned by an operating system call, where the failure\nwould report an operational problem, like a failing mount.</p>\n\n\n\n<p><li>panic (program)<br />\nAll above report classes are expected: some predictable situation\nis encountered, and therefore a message is produced.  However, programs\noften do some internal checking.  Of course, these conditions should\nnever be triggered, but if they do... then we can only stop.</p>\n\n<p>For instance, in an OO perl module, the base class requires all\nsub-classes to implement a certain method.  The base class will produce\na stub method with triggers a panic when called.  The non-dieing version\nof this test <code>assert</code>.</p>\n</ul>\n\n<p><i>Debugging</i> or being <code>verbose</code> are run-time behaviors, and have nothing\ndirectly to do with the type of message which is produced.  These two\nare <b>modes</b> which can be set on the dispatchers: one dispatcher may\nbe more verbose that some other.</p>\n\n<p>On purpose, we do not use the terms <code>die</code> or <code>fatal</code>, because the\ndispatcher can be configured what to do in cause of which condition.\nFor instance, it may decide to stop execution on warnings as well.</p>\n\n<p>The terms <code>carp</code> and <code>croak</code> are avoided, because the program cause\nversus user cause distinction (warn vs carp) is reflected in the use\nof different reasons.  There is no need for <code>confess</code> and <code>croak</code>\neither, because the dispatcher can be configured to produce stack-trace\ninformation (for a limited sub-set of dispatchers)</p>\n",
         "path" : "DETAILS/Error handling models/The Reason for the report",
         "level" : 3,
         "name" : "The Reason for the report"
      },
      "id1090-id422" : {
         "call" : "$obj-&gt;<b><a name=\"id1090\">load</a></b>(&nbsp;$domain, $locale&nbsp;)",
         "id" : "id1090-id422",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1090\">Log::Report::Translator::load()</a></p>",
         "type" : "i_method",
         "extends" : "id1090",
         "name" : "load"
      },
      "id408" : {
         "name" : "expectedIn",
         "intro" : "<p>Return <code>true</code> when the function name which relates to this domain is\nallowed to be used for the indicated file.  The msgid extractor will warn\nwhen there is no match.</p>\n",
         "id" : "id408",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id408\">expectedIn</a></b>(&nbsp;$filename&nbsp;)"
      },
      "id1133-id385" : {
         "name" : "configure",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1133\">Log::Report::Domain::configure()</a></p>",
         "extends" : "id1133",
         "options" : [
            [
               "id1140-id385",
               "id1141-id385"
            ],
            [
               "id1138-id385",
               "id1139-id385"
            ],
            [
               "id168-id385",
               "id169-id385"
            ],
            [
               "id1136-id385",
               "id1137-id385"
            ],
            [
               "id1134-id385",
               "id1135-id385"
            ],
            [
               "id166-id385",
               "id167-id385"
            ]
         ],
         "id" : "id1133-id385",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id1133\">configure</a></b>(&nbsp;%options&nbsp;)",
         "diagnostics" : [
            "id1142-id385",
            "id1143-id385"
         ]
      },
      "id129" : {
         "name" : "is_fatal",
         "id" : "id129",
         "intro" : "<p>Returns <code>true</code> if the <tt class=\"parameter\">$reason</tt> is severe enough to cause an exception\n(or program termination).</p>\n",
         "type" : "function",
         "call" : "<b><a name=\"id129\">is_fatal</a></b>(&nbsp;$reason&nbsp;)"
      },
      "id283" : {
         "type" : "subsection",
         "intro" : "<p>In its simplest form, you can now use all the\n<a href=\"https://metacpan.org/dist/Log_Report_The_Reason_for_the_report\">Log::Report logging functions</a>\nto send messages to your dispatchers (as configured in the Logger\nconfiguration):</p>\n<pre>\n  trace \"I'm here\";\n\n  warning \"Something dodgy happened\";\n\n  panic \"I'm bailing out\";\n\n  # Additional, special Dancer2 keyword\n  success \"Settings saved successfully\";\n</pre>\n",
         "id" : "id283",
         "path" : "DETAILS/In Use/Logging debug information",
         "level" : 3,
         "name" : "Logging debug information"
      },
      "id960-id221" : {
         "extends" : "id960",
         "name" : "_append",
         "type" : "option",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id960\">Log::Report::Message::new(_append)</a></p>",
         "id" : "id960-id221",
         "params" : "$text|$message"
      },
      "id463" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "intro" : "<pre>  # using a MO table efficiently\n  my $mot = Log::Report::Lexicon::MOTcompact-&gt;read('mo/nl.mo')\n     or die;\n\n  my $header = $mot-&gt;msgid('');\n  print $mot-&gt;msgstr($msgid, 3);\n</pre>\n",
         "type" : "chapter",
         "id" : "id463",
         "path" : "SYNOPSIS"
      },
      "id842" : {
         "name" : "failure",
         "type" : "function",
         "intro" : "<p>Short for <code>report FAILURE =&gt; $message</code></p>\n",
         "id" : "id842",
         "call" : "<b><a name=\"id842\">failure</a></b>(&nbsp;$message&nbsp;)"
      },
      "id1069" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "examples" : [
            "id1070"
         ],
         "type" : "chapter",
         "intro" : "<p>This basic file logger accepts a callback, which is called for each\nmessage which is to be logged. When you need complex things, you\nmay best make your own extension to <a class=\"jump\" href=\"id1158\">Log::Report::Dispatcher</a>, but\nfor simple things this will do.</p>\n",
         "id" : "id1069",
         "path" : "DESCRIPTION"
      },
      "id1208-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1208\">Log::Report::Dispatcher::stackTraceLine(abstract)</a></p>",
         "type" : "option",
         "id" : "id1208-id760",
         "params" : "INTEGER",
         "extends" : "id1208",
         "name" : "abstract"
      },
      "id202" : {
         "call" : "<b><a name=\"id202\">__</a></b>(&nbsp;$msgid&nbsp;)",
         "type" : "function",
         "id" : "id202",
         "name" : "__"
      },
      "id210" : {
         "call" : "<b><a name=\"id210\">N__w</a></b>(&nbsp;STRING&nbsp;)",
         "type" : "function",
         "id" : "id210",
         "name" : "N__w"
      },
      "id1192-id1217" : {
         "extends" : "id1192",
         "name" : "collectLocation",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1192\">Log::Report::Dispatcher::collectLocation()</a></p>",
         "type" : "ci_method",
         "id" : "id1192-id1217",
         "call" : "$any-&gt;<b><a name=\"id1192\">collectLocation</a></b>"
      },
      "id1301" : {
         "level" : 3,
         "name" : "Filters",
         "id" : "id1301",
         "type" : "subsection",
         "path" : "DETAILS/Processing the message/Filters"
      },
      "id107" : {
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: UNKNOWN or UNKNOWN($width)",
         "type" : "subsection",
         "intro" : "<p>[1.01] When you need to interpolate a value which is unknown and potentially\nunsafe, then use this.  For instance, you produce an internal error message\nto report that a method is used incorrectly:</p>\n<pre>\n  sub openFolder\n  {  my ($self, $folder) = @_;\n\n     blessed $folder &amp;&amp; $folder-&gt;isa('Mail::Box')\n        or printi \"ERROR: expected a Mail::Box, got a {t UNKNOWN}.\",\n              t =&gt; $folder;\n  }\n</pre>\n\n<p>Now, this <code>$folder</code> parameter is clearly wrong.  But what is it?  Did we\npass a wrong object type?  Did we pass a string?  An ARRAY maybe?</p>\n\n<p>The <code>UNKNOWN</code> modifier distibuishes the following:</p>\n<ul>\n<li>undefined values will be shown as the UNDEF serializer does;<br />\n<li>objects will be represented by their type;<br />\n<li>references will show the first part of their Data::Dumper dump; and<br />\n<li>the leading parts of strings will be shown between double quotes.<br />\n</ul>\n\n<p>Care is taken that weird characters are escaped.  The shortening uses the\n<code>trim</code> setting: either <code>'EL'</code> (default) or <code>'CHOP'</code>.</p>\n",
         "id" : "id107",
         "name" : "Modifier: UNKNOWN or UNKNOWN($width)",
         "level" : 3
      },
      "id570" : {
         "type" : "fault",
         "id" : "id570",
         "name" : "failed reading from file {fn}: $!",
         "subroutine" : "id567"
      },
      "id1304" : {
         "name" : "Translation",
         "level" : 3,
         "path" : "METHODS/Managing PO's/Translation",
         "subroutines" : [
            "id492",
            "id491"
         ],
         "type" : "subsection",
         "id" : "id1304"
      },
      "id1172-id1066" : {
         "name" : "format_reason",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1171\">Log::Report::Dispatcher::new(format_reason)</a></p>",
         "extends" : "id1172",
         "type" : "default",
         "id" : "id1172-id1066",
         "value" : "'LOWERCASE'"
      },
      "id886" : {
         "intro" : "<pre>  if(Log::Report-&gt;needs('TRACE'))\n  {  my @args = ...expensive calculation...;\n     trace \"your options are: @args\";\n  }\n</pre>\n",
         "type" : "example",
         "id" : "id886"
      },
      "id1198-id760" : {
         "extends" : "id1198",
         "name" : "linenr",
         "id" : "id1198-id760",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1198\">Log::Report::Dispatcher::stackTraceLine(linenr)</a></p>",
         "type" : "option",
         "params" : "INTEGER"
      },
      "id1312" : {
         "name" : "Available back-ends",
         "level" : 2,
         "path" : "DETAILS/Available back-ends",
         "type" : "section",
         "id" : "id1312"
      },
      "id901" : {
         "id" : "id901",
         "type" : "section",
         "nest" : [
            "id902",
            "id903",
            "id904"
         ],
         "path" : "DETAILS/Compared to other solutions in Perl",
         "intro" : "<p>Some notes on differences between the <a class=\"jump\" href=\"id801\">Log::Report</a> approach and other\nPerl concepts.</p>\n",
         "name" : "Compared to other solutions in Perl",
         "level" : 2
      },
      "id229" : {
         "name" : "reason",
         "value" : "<code>undef</code>",
         "type" : "default",
         "id" : "id229"
      },
      "id183" : {
         "name" : "is_fatal",
         "id" : "id183",
         "type" : "option",
         "params" : "BOOLEAN"
      },
      "id1202-id1217" : {
         "params" : "ARRAY",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "id" : "id1202-id1217",
         "type" : "option",
         "name" : "params",
         "extends" : "id1202"
      },
      "id1173-id1091" : {
         "name" : "charset",
         "extends" : "id1173",
         "params" : "CHARSET",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1173\">Log::Report::Dispatcher::new(charset)</a></p>",
         "type" : "option",
         "id" : "id1173-id1091"
      },
      "id96" : {
         "nest" : [
            "id97",
            "id100",
            "id101",
            "id102",
            "id103",
            "id104",
            "id105",
            "id106",
            "id107",
            "id108",
            "id109"
         ],
         "id" : "id96",
         "type" : "section",
         "level" : 2,
         "name" : "Interpolation: Modifiers",
         "intro" : "<p>Modifiers are used to change the value to be inserted, before\nthe characters get interpolated in the line.  This is a powerful\nsimplification.  Some useful modifiers are already provided by default.\nThey are also good examples how to write your own.</p>\n\n<p>Let's discuss this with an example.\nIn traditional (gnu) gettext, you would write:</p>\n<pre>\n  printf(gettext(\"approx pi: %.6f\\n\"), PI);\n</pre>\n\n<p>to get PI printed with six digits in the fragment.\nLocale::TextDomain has two ways to achieve that:</p>\n<pre>\n  printf __\"approx pi: %.6f\\n\", PI;\n  print __x\"approx pi: {approx}\\n\", approx =&gt; sprintf(\"%.6f\", PI);\n</pre>\n\n<p>The first does not respect the wish to be able to reorder the arguments\nduring translation (although there are ways to work around that)  The\nsecond version is quite long.  The string to be translated differs\nbetween the two examples.</p>\n\n<p>With <code>Log::Report</code>, above syntaxes do work as well, but you can also do:</p>\n<pre>\n  # with optional translations\n  print __x\"approx pi: {pi%.6f}\\n\", pi =&gt; PI;\n</pre>\n\n<p>The base for <code>__x()</code> is the <a class=\"jump\" href=\"id85\">printi()</a> provided by this module. Internally,\nit will call <code>printi</code> to fill-in parameters:</p>\n<pre>\n  printi \"approx pi: {pi%.6f}\\n\", pi =&gt; PI;\n</pre>\n\n<p>Another example:</p>\n<pre>\n  printi \"{perms} {links%2d} {user%-8s} {size%10d} {fn}\\n\",\n     perms =&gt; '-rw-r--r--', links =&gt; 7, user =&gt; 'me',\n     size =&gt; 12345, fn =&gt; $filename;\n</pre>\n\n<p>An additional advantage (when you use translation) is the fact that not\nall languages produce comparable length strings.  Now, the translators\ncan change the format, such that the layout of tables is optimal for their\nlanguage.</p>\n\n<p>Above example in <a class=\"jump\" href=\"id86\">printp()</a> syntax, shorter but less maintainable:</p>\n<pre>\n  printp \"%s %2d %-8s 10d %s\\n\",\n     '-rw-r--r--', 7, 'me', 12345, $filename;\n</pre>\n",
         "path" : "DETAILS/Interpolation: Modifiers"
      },
      "id658" : {
         "id" : "id658",
         "type" : "warning",
         "subroutine" : "id657",
         "name" : "unknown comment type '$cmd' at $where."
      },
      "id724" : {
         "type" : "i_method",
         "intro" : "<p>Remove all the references to the indicate <tt class=\"parameter\">$filename</tt> from all defined\ntranslations.  Returns the number of refs left.</p>\n",
         "id" : "id724",
         "call" : "$obj-&gt;<b><a name=\"id724\">removeReferencesTo</a></b>(&nbsp;$filename&nbsp;)",
         "name" : "removeReferencesTo"
      },
      "id897" : {
         "name" : "run-time change mode of a dispatcher\n",
         "intro" : "<p>To change the running mode of the dispatcher, you can do</p>\n<pre>\n  dispatcher mode =&gt; DEBUG =&gt; 'myname';\n</pre>\n\n<p>However, be warned that this does not change the types of messages\naccepted by the dispatcher!  So: probably you will not receive\nthe trace, assert, and info messages after all.  So, probably you\nneed to replace the dispatcher with a new one with the same name:</p>\n<pre>\n  dispatcher FILE =&gt; 'myname', to =&gt; ..., mode =&gt; 'DEBUG';\n</pre>\n\n<p>This may reopen connections (depends on the actual dispatcher), which\nmight be not what you wish to happened.  In that case, you must take\nthe following approach:</p>\n<pre>\n  # at the start of your program, overrule the default 'NOTICE-' !!\n  dispatcher FILE =&gt; 'myname', to =&gt; ..., accept =&gt; 'ALL';\n\n  # now it works\n  dispatcher mode =&gt; DEBUG =&gt; 'myname';    # debugging on\n  ...\n  dispatcher mode =&gt; NORMAL =&gt; 'myname';   # debugging off\n</pre>\n\n<p>Of course, this comes with a small overall performance penalty.</p>\n",
         "type" : "example",
         "id" : "id897"
      },
      "id1140" : {
         "name" : "config",
         "intro" : "<p>Read the settings from the <tt class=\"parameter\">$file</tt>.  The parameters found in the file are\nused as default for the parameters above.  This parameter is especially\nuseful for the <tt class=\"parameter\">context_rules</tt>, which need to be shared between the\nrunning application and <i class=\"filename\">xgettext-perl</i>.  See <a class=\"jump\" href=\"id1144\">readConfig()</a></p>\n",
         "type" : "option",
         "id" : "id1140",
         "params" : "$file"
      },
      "id358" : {
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS",
         "nest" : [
            "id359",
            "id366",
            "id369"
         ],
         "id" : "id358",
         "type" : "chapter"
      },
      "id862" : {
         "call" : "<b><a name=\"id862\">__p</a></b>(&nbsp;$msgctxt, $msgid&nbsp;)",
         "id" : "id862",
         "type" : "function",
         "name" : "__p"
      },
      "id443" : {
         "path" : "SYNOPSIS",
         "intro" : "<pre>  my $index = Log::Report::Lexicon::Index-&gt;new($directory);\n  my $fn    = $index-&gt;find('my-domain', 'nl_NL.utf-8');\n</pre>\n",
         "type" : "chapter",
         "id" : "id443",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id940-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id940\">Log::Report::Message::'\"\"'()</a></p>",
         "id" : "id940-id221",
         "type" : "overload",
         "call" : "overload <b><a name=\"id940\">'\"\"'</a></b>; stringification",
         "extends" : "id940",
         "name" : "'\"\"'"
      },
      "id780" : {
         "version" : "1.46",
         "chapters" : [
            "id781",
            "id1325",
            "id782",
            "id783",
            "id787",
            "id1268"
         ],
         "name" : "Log::Report::Dispatcher::Log4perl",
         "title" : "send messages to Log::Log4perl back-end",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "id" : "id780",
         "distribution" : "Log-Report",
         "package" : "Log::Report::Dispatcher::Log4perl",
         "is_pure_pod" : false
      },
      "id1203-id760" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1202\">Log::Report::Dispatcher::stackTraceLine(params)</a></p>",
         "name" : "params",
         "id" : "id1203-id760",
         "value" : "&lt;required&gt;",
         "type" : "default",
         "extends" : "id1203"
      },
      "id1101" : {
         "name" : "replace",
         "value" : "<code>false</code>",
         "id" : "id1101",
         "type" : "default"
      },
      "id877" : {
         "name" : "syntax flag must be either SHORT or REPORT, not `$flag' in $fn line $line",
         "subroutine" : "id867",
         "type" : "error",
         "id" : "id877"
      },
      "id888" : {
         "path" : "DETAILS/Introduction",
         "intro" : "<p>Getting messages to users and logs. The distincting concept of this module,\nis that three tasks which are strongly related are merged into one simple\nsyntax.  The three tasks:</p>\n\n<ul>\n<li>produce some text on a certain condition,<br />\n<li>translate it to the proper language, and<br />\n<li>deliver it in some way to a user.<br />\n</ul>\n\n<p>Text messages in Perl are produced by commands like <code>print</code>, <code>die</code>,\n<code>warn</code>, <code>carp</code>, or <code>croak</code>.  But where is that output directed to?\nTranslations is hard.  There is no clean exception mechanism.</p>\n\n<p>Besides, the <code>print</code>/<code>warn</code>/<code>die</code> together produce only three different\noutput \"levels\" with a message.  Think of the variation syslog offers:\nmore than 7 levels.  Many people manually implement their own tricks to\nget additional levels, like verbose and debug flags.  <a class=\"jump\" href=\"id801\">Log::Report</a> offers\nthat variety.</p>\n\n<p>The (optional) translations use the beautiful syntax defined by\nLocale::TextDomain, with some own extensions (of course).  A very\nimportant difference is that translations are delayed till the delivery\nstep: until a dispatcher actually writes your message into a file, sends\nit to syslog, or shows it on the screen.  This means that the pop-up in\nthe graphical interface of the user may show the text in the language\nof the user --say Chinese in utf8--, but at the same time syslog may\nwrite the latin1 English version of the same message.</p>\n",
         "name" : "Introduction",
         "level" : 2,
         "id" : "id888",
         "type" : "section",
         "nest" : [
            "id889",
            "id890"
         ]
      },
      "id1021" : {
         "chapters" : [
            "id1022",
            "id1347",
            "id1023",
            "id1024",
            "id1025",
            "id1028",
            "id1311"
         ],
         "name" : "Log::Report::Dispatcher::Try",
         "version" : "1.46",
         "is_pure_pod" : false,
         "package" : "Log::Report::Dispatcher::Try",
         "distribution" : "Log-Report",
         "inheritance" : {
            "extends" : [
               "Log::Report::Dispatcher"
            ]
         },
         "id" : "id1021",
         "title" : "capture all reports as exceptions"
      },
      "id656" : {
         "subroutines" : [
            "id663",
            "id657",
            "id668"
         ],
         "id" : "id656",
         "type" : "section",
         "path" : "METHODS/Parsing",
         "level" : 2,
         "name" : "Parsing"
      },
      "id590" : {
         "name" : "rules",
         "params" : "HASH",
         "type" : "option",
         "id" : "id590"
      },
      "id230" : {
         "name" : "Attributes",
         "level" : 2,
         "path" : "METHODS/Attributes",
         "id" : "id230",
         "type" : "section",
         "subroutines" : [
            "id989-id221",
            "id991-id221",
            "id986-id221",
            "id984-id221",
            "id993-id221",
            "id994-id221",
            "id985-id221",
            "id995-id221",
            "id987-id221",
            "id992-id221",
            "id990-id221",
            "id983-id221",
            "id988-id221",
            "id232",
            "id231",
            "id233"
         ]
      },
      "id1294" : {
         "path" : "DETAILS/Processing the message",
         "name" : "Processing the message",
         "level" : 2,
         "id" : "id1294",
         "type" : "section",
         "nest" : [
            "id1295",
            "id1296"
         ]
      },
      "id356" : {
         "level" : 1,
         "name" : "SYNOPSIS",
         "intro" : "<pre>  # Added Log-Report-Template v0.90\n  # First use of this module: extract msgids from various kinds\n  # of text-files, usually web templates.\n  # See script \"xgettext-perl\" for standard wrapper script\n\n  my $extr = Log::Report::Template::Extract-&gt;new(\n    lexicon =&gt; '/usr/share/locale',\n    domain  =&gt; 'my-web-site',\n    pattern =&gt; 'TT2-loc',\n  );\n  $extr-&gt;process('website/page.html');  # many times\n  $extr-&gt;showStats;\n  $extr-&gt;write;\n\n  # Second use: connect to Template::Toolkit\n  # See DETAILS chapter below\n\n  [% loc(\"Greetings {name},\", name =&gt; client.name) %]\n  [% | loc(name =&gt; client.name) %]Greetings {name}[% END %]\n  [% 'Greetings {name}' | loc(name =&gt; client.name) %]\n</pre>\n",
         "id" : "id356",
         "type" : "chapter",
         "path" : "SYNOPSIS"
      },
      "id1096" : {
         "name" : "Constructors",
         "level" : 2,
         "path" : "METHODS/Constructors",
         "subroutines" : [
            "id1097"
         ],
         "id" : "id1096",
         "type" : "section"
      },
      "id154" : {
         "path" : "METHODS",
         "name" : "METHODS",
         "level" : 1,
         "type" : "chapter",
         "id" : "id154",
         "nest" : [
            "id155",
            "id161",
            "id171"
         ]
      },
      "id1340" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Lexicon::MOTcompact\n   is a <a class=\"jump\" href=\"id735\">Log::Report::Lexicon::Table</a>\n</pre>\n",
         "id" : "id1340",
         "type" : "chapter"
      },
      "id1291" : {
         "level" : 3,
         "name" : "configuring global values",
         "id" : "id1291",
         "type" : "subsection",
         "path" : "DETAILS/Configuring/configuring global values"
      },
      "id1193-id760" : {
         "name" : "stackTraceLine",
         "extends" : "id1193",
         "options" : [
            [
               "id1208-id760",
               "id1209-id760"
            ],
            [
               "id1200-id760",
               "id1201-id760"
            ],
            [
               "id1196-id760",
               "id1197-id760"
            ],
            [
               "id1198-id760",
               "id1199-id760"
            ],
            [
               "id1204-id760",
               "id1205-id760"
            ],
            [
               "id1206-id760",
               "id1207-id760"
            ],
            [
               "id1194-id760",
               "id1195-id760"
            ],
            [
               "id1202-id760",
               "id1203-id760"
            ]
         ],
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1193\">Log::Report::Dispatcher::stackTraceLine()</a></p>",
         "type" : "ci_method",
         "id" : "id1193-id760",
         "call" : "$any-&gt;<b><a name=\"id1193\">stackTraceLine</a></b>(&nbsp;%options&nbsp;)"
      },
      "id1089" : {
         "call" : "$obj-&gt;<b><a name=\"id1089\">translate</a></b>(&nbsp;$message, [$language, $ctxt]&nbsp;)",
         "id" : "id1089",
         "intro" : "<p>Returns the translation of the <tt class=\"parameter\">$message</tt>, a <a class=\"jump\" href=\"id935\">Log::Report::Message</a> object,\nbased on the current locale.</p>\n\n<p>Translators are permitted to peek into the internal HASH of the\nmessage object, for performance reasons.</p>\n",
         "type" : "i_method",
         "name" : "translate"
      },
      "id1112" : {
         "name" : "rotate",
         "intro" : "<p>[1.00] Move the current file to <tt class=\"parameter\">$filename</tt>, and start a new file.</p>\n",
         "call" : "$obj-&gt;<b><a name=\"id1112\">rotate</a></b>(&nbsp;$filename|CODE&nbsp;)",
         "diagnostics" : [
            "id1113",
            "id1114",
            "id1115"
         ],
         "type" : "i_method",
         "id" : "id1112"
      },
      "id94" : {
         "name" : "Complex keys",
         "level" : 3,
         "path" : "DETAILS/Interpolation: keys/Complex keys",
         "id" : "id94",
         "intro" : "<p>[0.91] In the previous section, we kept our addressing it simple: let's\nchange that now.  Two alternatives for the same:</p>\n<pre>\n  my $user = { name =&gt; 'John' };\n  printi \"Username: {name}\", name =&gt; $user-&gt;{name}; # simple key\n  printi \"Username: {user.name}\", user =&gt; $user;    # complex key\n</pre>\n\n<p>The way these complex keys work, is close to the flexibility of\ntemplate toolkit: the only thing you cannot do, is passing parameters\nto called CODE.</p>\n\n<p>You can pass a parameter name as HASH, which contains values.  This may\neven be nested into multiple levels.  You may also pass objects, class\n(package names), and code references.</p>\n\n<p>In above case of <code>user.name</code>, when <code>user</code> is a HASH it will take the\nvalue which belongs to the key <code>name</code>.  When <code>user</code> is a CODE, it will\nrun code to get a value.  When <code>user</code> is an object, the method <code>name</code>\nis called to get a value back.  When <code>user</code> is a class name, the <code>name</code>\nrefers to an instance method on that class.</p>\n\n<p>More examples which do work:</p>\n<pre>\n  # when name is a column in the database query result\n  printi \"Username: {user.name}\", user =&gt; $sth-&gt;fetchrow_hashref;\n\n  # call a sub which does the database query, returning a HASH\n  printi \"Username: {user.name}\", user =&gt; sub { $db-&gt;getUser('John') };\n\n  # using an instance method (object)\n  { package User;\n    sub new  { bless { myname =&gt; $_[1] }, $_[0] }\n    sub name { $_[0]-&gt;{myname} }\n  }\n  my $user = User-&gt;new('John');\n  printi \"Username: {user.name}\", user =&gt; $user;\n\n  # using a class method\n  sub User::count   { 42 }\n  printi \"Username: {user.count}\", user =&gt; 'User';\n\n  # nesting, mixing\n  printi \"Complain to {product.factory.address}\", product =&gt; $p;\n\n  # mixed, here CODE, HASH, and Object\n  printi \"Username: {document.author.name}\", document =&gt; sub {\n    return +{ author =&gt; User-&gt;new('John') }\n  };\n</pre>\n\n<p>Limitation: you cannot pass arguments to CODE calls.</p>\n",
         "type" : "subsection"
      },
      "id1181-id905" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1181\">Log::Report::Dispatcher::mode()</a></p>",
         "id" : "id1181-id905",
         "call" : "$obj-&gt;<b><a name=\"id1181\">mode</a></b>",
         "extends" : "id1181",
         "name" : "mode"
      },
      "id1104" : {
         "value" : "&lt;adds timestamp&gt;",
         "id" : "id1104",
         "type" : "default",
         "name" : "format"
      },
      "id951-id221" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id950\">Log::Report::Message::new(_count)</a></p>",
         "name" : "_count",
         "type" : "default",
         "id" : "id951-id221",
         "value" : "<code>undef</code>",
         "extends" : "id951"
      },
      "id1226" : {
         "path" : "NAME",
         "id" : "id1226",
         "intro" : "<p>Log::Report::Exception - a single generated event</p>\n",
         "type" : "chapter",
         "name" : "NAME",
         "level" : 1
      },
      "id1024" : {
         "level" : 1,
         "name" : "DESCRIPTION",
         "type" : "chapter",
         "intro" : "<p>The <b>try</b> works like Perl's build-in <code>eval()</code>, but implements\nreal exception handling which Perl core lacks.</p>\n\n<p>The <a class=\"jump\" href=\"id830\">Log::Report::try()</a> function creates this <code>::Try</code> dispatcher\nobject with name 'try'.  After the <code>try()</code> is over, you can find\nthe object in <code>$@</code>.  The <code>$@</code> as <code>::Try</code> object behaves exactly\nas the <code>$@</code> produced by <code>eval</code>, but has many added features.</p>\n\n<p>The <code>try()</code> function catches fatal errors happening inside the BLOCK\n(CODE reference which is just following the function name) into the\n<code>::Try</code> object <code>$@</code>.  The errors are not automatically progressed to\nactive dispatchers.  However, non-fatal exceptions (like info or notice)\nare also collected (unless not accepted, see <a class=\"jump\" href=\"id1165\">new(accept)</a>, but also\nimmediately passed to the active dispatchers (unless the reason is hidden,\nsee <a class=\"jump\" href=\"id1035\">new(hide)</a>)</p>\n\n<p>After the <code>try()</code> has run, you can introspect the collected exceptions.\nTypically, you use <a class=\"jump\" href=\"id1053\">wasFatal()</a> to get the exception which terminated\nthe run of the BLOCK.</p>\n",
         "id" : "id1024",
         "path" : "DESCRIPTION"
      },
      "id1071" : {
         "nest" : [
            "id1072",
            "id1077",
            "id1079"
         ],
         "type" : "chapter",
         "id" : "id1071",
         "name" : "METHODS",
         "level" : 1,
         "path" : "METHODS"
      },
      "id130" : {
         "name" : "use_errno",
         "type" : "function",
         "id" : "id130",
         "call" : "<b><a name=\"id130\">use_errno</a></b>(&nbsp;$reason&nbsp;)"
      },
      "id872" : {
         "name" : "import",
         "params" : "$function|\\@functions",
         "type" : "option",
         "intro" : "<p>[0.998] When not specified, the <tt class=\"parameter\">syntax</tt> option determines the list\nof <tt class=\"parameter\">@functions</tt> which are being exported.  With this option, the <tt class=\"parameter\">syntax</tt>\noption is ignored and only the specified <tt class=\"parameter\">@functions</tt> are imported.</p>\n",
         "id" : "id872"
      },
      "id99" : {
         "intro" : "<p>The full pattern is pretty complex: <code>%[+ -0]?[0-9]*[_,.]?d</code>, POSIX\nformat style with a few extra features.  The middle (optional) digits tell\nthe minimal size of the integer to be displayed.  The optional character\nbefore it says: <code>+</code> will add a '+' sign when positive, 'blank' adds one\nblank before the digits when positive, a <code>0</code> pads left with zeros instead\nof blanks.  Finally, a C<-&gt; means left-align padding blanks on the right.</p>\n\n<p>[0.96] The last pattern is only useful when you print (big) decimals:\nadd an underscore, comma, or dot on the thousands.</p>\n<pre>\n  printi \"{count%_d}\\n\", count =&gt; 1e9;   # 1_000_000_000\n  printi \"{count%,d}\\n\", count =&gt; 1e9;   # 1,000,000,000\n  printi \"{count%.d}\\n\", count =&gt; 1e9;   # 1.000.000.000\n\n  printi \"'{v%10.d}'\",  v =&gt;  10000;   # '    10.000';\n  printi \"'{v%10_d}'\",  v =&gt; -10000;   # '   -10_000';\n  printi \"'{v%-10.d}'\", v =&gt;  10000;   # '10.000    ';\n  printi \"'{v%-10.d}'\", v =&gt; -10000;   # '-10.000   ';\n  printi \"'{v%+10,d}'\", v =&gt;  10000;   # '   +10,000';\n  printi \"'{v% ,d}'\",   v =&gt;  10000;   # ' 10,000';\n  printi \"'{v% ,d}'\",   v =&gt; -10000;   # '-10,000';\n</pre>\n\n<p>[1.00] You can set the default <code>FORMAT</code> separator:</p>\n<pre>\n  use String::Print\n      defaults =&gt; [ FORMAT =&gt; { thousands =&gt; ',' } ];\n\n  # or\n  my $sp = String::Print-&gt;new(\n     defaults =&gt; { FORMAT =&gt; { thousands =&gt; ',' }},\n  );\n\n  # or\n  $sp-&gt;setDefaults(FORMAT =&gt; { thousands =&gt; ',' });\n</pre>\n",
         "type" : "subsubsection",
         "id" : "id99",
         "path" : "DETAILS/Interpolation: Modifiers/Modifier: POSIX format starts with '%'/POSIX modifier extensions '%d'",
         "level" : 4,
         "name" : "POSIX modifier extensions '%d'"
      },
      "id1353" : {
         "name" : "INHERITANCE",
         "level" : 1,
         "path" : "INHERITANCE",
         "intro" : "<pre> Log::Report::Lexicon::POTcompact\n   is a <a class=\"jump\" href=\"id735\">Log::Report::Lexicon::Table</a>\n</pre>\n",
         "type" : "chapter",
         "id" : "id1353"
      },
      "id254" : {
         "name" : "SYNOPSIS",
         "level" : 1,
         "path" : "SYNOPSIS",
         "type" : "chapter",
         "intro" : "<pre>  # Load the plugin into Dancer2\n  # see Log::Report::import() for %options\n  use Dancer2::Plugin::LogReport %options;\n\n  # Stop execution, redirect, and display an error to the user\n  $name or error \"Please enter a name\";\n\n  # Add debug information to logger\n  trace \"We're here\";\n\n  # Handling user errors cleanly\n  if (process( sub {MyApp::Model-&gt;create_user} )) {\n      # Success, redirect user elsewhere\n  } else {\n      # Failed, continue as if submit hadn't been made.\n      # Error message will be in session for display later.\n  }\n\n  # Send errors to template for display\n  hook before_template =&gt; sub {\n      my $tokens = shift;\n      $tokens-&gt;{messages} = session 'messages';\n      session 'messages' =&gt; [];\n  }\n</pre>\n",
         "id" : "id254"
      },
      "id1115" : {
         "type" : "fault",
         "id" : "id1115",
         "name" : "cannot write log into $file: $!",
         "subroutine" : "id1112"
      },
      "id867" : {
         "options" : [
            [
               "id872",
               "id873"
            ],
            [
               "id874",
               "id875"
            ],
            [
               "id870",
               "id871"
            ],
            [
               "id868",
               "id869"
            ]
         ],
         "id" : "id867",
         "type" : "i_method",
         "call" : "$obj-&gt;<b><a name=\"id867\">import</a></b>(&nbsp;[$level,][$domain,] %options&nbsp;)",
         "diagnostics" : [
            "id877",
            "id878",
            "id879",
            "id880",
            "id881"
         ],
         "examples" : [
            "id876"
         ],
         "intro" : "<p>The import is automatically called when the package is compiled.  For all\npackages but one in your distribution, it will only contain the name of\nthe <tt class=\"parameter\">$domain</tt>.</p>\n\n<p>For one package, the import list may additionally contain textdomain\nconfiguration <tt class=\"parameter\">%options</tt>.  These <tt class=\"parameter\">%options</tt> are used for all packages which\nuse the same <tt class=\"parameter\">$domain</tt>.  These are alternatives:</p>\n<pre>\n  # Do not use variables in the %*config!  They are not yet initialized\n  # when Log::Report-&gt;import is run!!!\n  use Log::Report 'my-domain', %config, %domain_config;\n\n  use Log::Report 'my-domain', %config;\n  textdomain 'my-domain', %domain_config;   # vars allowed\n</pre>\n\n<p>The latter syntax has major advantages, when the configuration of the\ndomain is determined at run-time.  It is probably also easier to understand.</p>\n\n<p>See <a class=\"jump\" href=\"id1133\">Log::Report::Domain::configure()</a>, for the <b>list of %options</b>\nfor the domain configuration.  Here, we only list the options which are\nrelated to the normal import behavior.</p>\n\n<p>The export <tt class=\"parameter\">$level</tt> is a plus (+) followed by a number, for instance <code>+1</code>,\nto indicate to on which caller level we need to work.  This is used\nin <a class=\"jump\" href=\"id144\">Log::Report::Optional</a>.  It defaults to '0': my direct caller.</p>\n",
         "name" : "import"
      },
      "id1033" : {
         "name" : "died",
         "type" : "option",
         "intro" : "<p>The exit string or object (<code>$@</code>) of the eval'ed block, in its unprocessed state.</p>\n",
         "id" : "id1033",
         "params" : "$text"
      },
      "id1158" : {
         "chapters" : [
            "id1159",
            "id1348",
            "id1160",
            "id1161",
            "id1162",
            "id1210"
         ],
         "name" : "Log::Report::Dispatcher",
         "version" : "1.46",
         "is_pure_pod" : false,
         "package" : "Log::Report::Dispatcher",
         "distribution" : "Log-Report",
         "id" : "id1158",
         "inheritance" : {
            "extended_by" : [
               "Log::Report::Dispatcher::Callback",
               "Log::Report::Dispatcher::File",
               "Log::Report::Dispatcher::Log4perl",
               "Log::Report::Dispatcher::LogDispatch",
               "Log::Report::Dispatcher::Perl",
               "Log::Report::Dispatcher::Syslog",
               "Log::Report::Dispatcher::Try"
            ]
         },
         "title" : "manage message dispatching, display or logging"
      },
      "id1179-id905" : {
         "call" : "$obj-&gt;<b><a name=\"id1179\">name</a></b>",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1179\">Log::Report::Dispatcher::name()</a></p>",
         "id" : "id1179-id905",
         "type" : "i_method",
         "extends" : "id1179",
         "name" : "name"
      },
      "id551" : {
         "path" : "SYNOPSIS",
         "id" : "id551",
         "intro" : "<pre>  # Only usable on Windows\n  print codepage_to_iso(0x0413);   # nl-NL\n  print iso_to_codepage('nl_NL');  # 1043\n  printf \"%x\", iso_to_codepage('nl_NL');  # 413\n\n  my $iso = iso_locale(ms_codepage_id());\n  my $iso = iso_locale;  # same\n\n  print charset_encoding;          # cp1252\n  print ms_codepage_id;            # 1043\n  print ms_install_codepage_id;    # 1043\n  print ms_locale;                 # Dutch (Netherlands)\n</pre>\n",
         "type" : "chapter",
         "name" : "SYNOPSIS",
         "level" : 1
      },
      "id406" : {
         "call" : "$obj-&gt;<b><a name=\"id406\">function</a></b>",
         "id" : "id406",
         "intro" : "<p>Returns the name of the function which is used for translations.</p>\n",
         "type" : "i_method",
         "name" : "function"
      },
      "id928" : {
         "value" : "&lt;unchanged&gt;",
         "type" : "default",
         "id" : "id928",
         "name" : "format"
      },
      "id540" : {
         "type" : "i_method",
         "id" : "id540",
         "diagnostics" : [
            "id541"
         ],
         "call" : "$obj-&gt;<b><a name=\"id540\">store</a></b>(&nbsp;$domain, $filename, $linenr, $context, $msg, [$msg_plural]&nbsp;)",
         "name" : "store",
         "intro" : "<p>Register the existence of a (<tt class=\"parameter\">$msg</tt>, <tt class=\"parameter\">$msg_plural</tt>) in all POTs of\nthe <tt class=\"parameter\">$domain</tt>.</p>\n"
      },
      "id1167-id780" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1167\">Log::Report::Dispatcher::new(locale)</a></p>",
         "id" : "id1167-id780",
         "type" : "option",
         "params" : "LOCALE",
         "extends" : "id1167",
         "name" : "locale"
      },
      "id539-id493" : {
         "name" : "starting new textdomain $domain, template in $filename",
         "extends" : "id539",
         "subroutine" : "id538",
         "id" : "id539-id493",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id538\">Log::Report::Extract::write()</a></p>",
         "type" : "info"
      },
      "id1276" : {
         "level" : 2,
         "name" : "Message-IDs",
         "type" : "section",
         "id" : "id1276",
         "path" : "DETAILS/Message-IDs"
      },
      "id1074" : {
         "name" : "callback",
         "params" : "CODE",
         "intro" : "<p>Your <tt class=\"parameter\">callback</tt> is called with five parameters: this dispatcher object,\nthe options, a reason and a message.  The <code>options</code> are the first\nparameter of <a class=\"jump\" href=\"id807\">Log::Report::report()</a> (read over there).  The <code>reason</code>\nis a capitized string like <code>ERROR</code>. Then, the <code>message</code> (is a\n<a class=\"jump\" href=\"id935\">Log::Report::Message</a>).  Finally the text-domain of the message.</p>\n",
         "id" : "id1074",
         "type" : "option"
      },
      "id713" : {
         "type" : "i_method",
         "intro" : "<p>Returns the language code, which is derived from the filename.</p>\n",
         "id" : "id713",
         "call" : "$obj-&gt;<b><a name=\"id713\">language</a></b>",
         "name" : "language"
      },
      "id990-id221" : {
         "type" : "i_method",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id990\">Log::Report::Message::tags()</a></p>",
         "id" : "id990-id221",
         "call" : "$obj-&gt;<b><a name=\"id990\">tags</a></b>",
         "extends" : "id990",
         "name" : "tags"
      },
      "id1230" : {
         "call" : "overload <b><a name=\"id1230\">\"\"</a></b>; stringification",
         "type" : "overload",
         "intro" : "<p>Produces \"reason: message\" via <a class=\"jump\" href=\"id1254\">toString()</a>.</p>\n",
         "id" : "id1230",
         "name" : "\"\""
      },
      "id493" : {
         "distribution" : "Log-Report-Lexicon",
         "package" : "Log::Report::Extract::PerlPPI",
         "is_pure_pod" : false,
         "title" : "Collect translatable strings from Perl using PPI",
         "inheritance" : {
            "extends" : [
               "Log::Report::Extract"
            ]
         },
         "id" : "id493",
         "chapters" : [
            "id494",
            "id1345",
            "id495",
            "id496",
            "id500"
         ],
         "name" : "Log::Report::Extract::PerlPPI",
         "version" : "1.16"
      },
      "id1170-id760" : {
         "type" : "default",
         "value" : "'NORMAL'",
         "id" : "id1170-id760",
         "extends" : "id1170",
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1169\">Log::Report::Dispatcher::new(mode)</a></p>",
         "name" : "mode"
      },
      "id1138-id385" : {
         "intro" : "<p>Inherited, see <a class=\"jump\" href=\"id1138\">Log::Report::Domain::configure(context_rules)</a></p>",
         "type" : "option",
         "id" : "id1138-id385",
         "params" : "\\%rules|OBJECT",
         "extends" : "id1138",
         "name" : "context_rules"
      }
   },
   "project" : "Log-Report",
   "meta" : {
      "main_manual" : "Log::Report"
   },
   "distributions" : {
      "String-Print" : {
         "abstract" : "printf extensions",
         "generated_by" : "ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010",
         "name" : "String-Print",
         "no_index" : {
            "directory" : [
               "t",
               "inc"
            ]
         },
         "dynamic_config" : 0,
         "resources" : {
            "bugtracker" : {
               "web" : "https://github.com/markov2/perl5-String-Print/issues"
            },
            "homepage" : "http://perl.overmeer.net/CPAN/",
            "repository" : {
               "web" : "https://github.com/markov2/perl5-String-Print",
               "type" : "git",
               "url" : "https://github.com/markov2/perl5-String-Print.git"
            }
         },
         "x_serialization_backend" : "JSON::PP version 4.16",
         "release_status" : "stable",
         "version" : "1.02",
         "prereqs" : {
            "build" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "runtime" : {
               "x_optional" : {
                  "DateTime" : 1
               },
               "requires" : {
                  "Date::Parse" : "2.3",
                  "Unicode::GCString" : "0",
                  "Encode" : "0",
                  "HTML::Entities" : "0",
                  "Test::More" : "0.86"
               }
            },
            "develop" : {
               "requires" : {
                  "OODoc" : "3.04"
               }
            },
            "configure" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "test" : {
               "requires" : {
                  "Test::Pod" : "1",
                  "Test::More" : "1"
               }
            }
         },
         "x_oodist" : {
            "use" : [],
            "include" : [],
            "generate" : [
               {
                  "format" : "pod3",
                  "podtail" : null
               }
            ],
            "email" : "markov@cpan.org",
            "raw" : {
               "publish" : "../public_html/string-print/raw"
            },
            "release" : {
               "publish" : "../public_html/string-print/source"
            },
            "first_year" : 2016,
            "parser" : {
               "syntax" : "markov",
               "skip_links" : [
                  "Locale::TextDomain"
               ]
            },
            "oodoc_version" : 3.04,
            "tests" : {}
         },
         "author" : [
            "Mark Overmeer <markov@cpan.org>"
         ],
         "meta-spec" : {
            "version" : 2,
            "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
         },
         "license" : [
            "perl_5"
         ]
      },
      "Log-Report-Template" : {
         "x_serialization_backend" : "JSON::PP version 4.16",
         "resources" : {
            "bugtracker" : {
               "web" : "https://github.com/markov2/perl5-Log-Report-Template/issues"
            },
            "homepage" : "http://perl.overmeer.net/CPAN/",
            "repository" : {
               "url" : "https://github.com/markov2/perl5-Log-Report-Template.git",
               "web" : "https://github.com/markov2/perl5-Log-Report-Template",
               "type" : "git"
            }
         },
         "release_status" : "stable",
         "abstract" : "template toolkit with translations",
         "generated_by" : "ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010",
         "no_index" : {
            "directory" : [
               "t",
               "inc"
            ]
         },
         "dynamic_config" : 0,
         "name" : "Log-Report-Template",
         "license" : [
            "perl_5"
         ],
         "author" : [
            "Mark Overmeer <markov@cpan.org>"
         ],
         "meta-spec" : {
            "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
            "version" : 2
         },
         "version" : "1.05",
         "prereqs" : {
            "develop" : {
               "requires" : {
                  "OODoc" : "3.00"
               }
            },
            "runtime" : {
               "requires" : {
                  "String::Print" : "0.91",
                  "Template" : "2.26",
                  "File::Find" : "0",
                  "Log::Report::Lexicon" : "1.13",
                  "Log::Report" : "1.42",
                  "Scalar::Util" : "0"
               }
            },
            "build" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "test" : {
               "requires" : {
                  "Test::More" : "1",
                  "Test::Pod" : "1"
               }
            },
            "configure" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            }
         },
         "x_oodist" : {
            "release" : {
               "publish" : "../public_html/log-report-template/source"
            },
            "raw" : {
               "publish" : "../public_html/log-report-template/raw"
            },
            "first_year" : 2017,
            "oodoc_version" : 3.04,
            "parser" : {
               "skip_links" : [
                  "Dancer2::Config"
               ],
               "syntax" : "markov"
            },
            "tests" : {},
            "include" : [
               "../Log-Report",
               "../Log-Report-Lexicon",
               "../Log-Report-Optional",
               "../String-Print"
            ],
            "use" : [],
            "generate" : [
               {
                  "format" : "pod3",
                  "podtail" : null
               }
            ],
            "email" : "markov@cpan.org"
         }
      },
      "Dancer2-Plugin-LogReport" : {
         "release_status" : "stable",
         "x_serialization_backend" : "JSON::PP version 4.16",
         "resources" : {
            "bugtracker" : {
               "web" : "https://github.com/markov2/perl5-Dancer2-Plugin-LogReport/issues"
            },
            "homepage" : "http://perl.overmeer.net/CPAN/",
            "repository" : {
               "type" : "git",
               "web" : "https://github.com/markov2/perl5-Dancer2-Plugin-LogReport",
               "url" : "https://github.com/markov2/perl5-Dancer2-Plugin-LogReport.git"
            }
         },
         "name" : "Dancer2-Plugin-LogReport",
         "dynamic_config" : 0,
         "no_index" : {
            "directory" : [
               "t",
               "inc"
            ]
         },
         "generated_by" : "ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010",
         "abstract" : "logging, exceptions and translations in Dancer2 via Log::Report",
         "meta-spec" : {
            "version" : 2,
            "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
         },
         "author" : [
            "Mark Overmeer <markov@cpan.org>"
         ],
         "license" : [
            "perl_5"
         ],
         "x_oodist" : {
            "tests" : {},
            "oodoc_version" : 3.04,
            "parser" : {
               "syntax" : "markov",
               "skip_links" : [
                  "Dancer2::Logger::Syslog"
               ]
            },
            "first_year" : 2015,
            "release" : {
               "publish" : "../public_html/dancer2-plugin-logreport/source"
            },
            "raw" : {
               "publish" : "../public_html/dancer2-plugin-logreport/raw"
            },
            "email" : "markov@cpan.org",
            "generate" : [
               {
                  "format" : "pod3",
                  "podtail" : null
               }
            ],
            "use" : [],
            "include" : [
               "../Log-Report",
               "../Log-Report-Optional"
            ]
         },
         "prereqs" : {
            "develop" : {
               "requires" : {
                  "OODoc" : "3.04"
               }
            },
            "build" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "runtime" : {
               "recommends" : {
                  "Plack::Test" : "0",
                  "HTTP::Cookies" : "0",
                  "Dancer2::Session::Sereal" : "0.003",
                  "HTTP::Request::Common" : "0"
               },
               "requires" : {
                  "Scalar::Util" : "0",
                  "Dancer2" : "0.207",
                  "Log::Report::Template" : "0",
                  "Log::Report" : "1.45"
               }
            },
            "test" : {
               "requires" : {
                  "Test::More" : "1",
                  "Test::Pod" : "1"
               }
            },
            "configure" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            }
         },
         "version" : "2.03"
      },
      "Log-Report" : {
         "release_status" : "stable",
         "x_serialization_backend" : "JSON::PP version 4.16",
         "resources" : {
            "repository" : {
               "url" : "https://github.com/markov2/perl5-Log-Report.git",
               "web" : "https://github.com/markov2/perl5-Log-Report",
               "type" : "git"
            },
            "bugtracker" : {
               "web" : "https://github.com/markov2/perl5-Log-Report/issues"
            },
            "homepage" : "http://perl.overmeer.net/CPAN/"
         },
         "name" : "Log-Report",
         "no_index" : {
            "directory" : [
               "t",
               "inc"
            ]
         },
         "dynamic_config" : 0,
         "generated_by" : "ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010",
         "abstract" : "report a problem, pluggable handlers and language support",
         "author" : [
            "Mark Overmeer <markov@cpan.org>"
         ],
         "meta-spec" : {
            "version" : 2,
            "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
         },
         "license" : [
            "perl_5"
         ],
         "x_oodist" : {
            "oodoc_version" : 3.04,
            "parser" : {
               "skip_links" : [
                  "Locale::TextDomain",
                  "Log::Dispatch",
                  "Log::Dispatch::Output",
                  "Log::Log4perl"
               ],
               "syntax" : "markov"
            },
            "tests" : {},
            "raw" : {
               "publish" : "../public_html/log-report/raw"
            },
            "release" : {
               "publish" : "../public_html/log-report/source"
            },
            "first_year" : 2007,
            "email" : "markov@cpan.org",
            "use" : [],
            "include" : [
               "../Dancer2-Plugin-LogReport",
               "../Log-Report-Lexicon",
               "../Log-Report-Optional",
               "../Log-Report-Template",
               "../String-Print"
            ],
            "generate" : [
               {
                  "format" : "pod3",
                  "podtail" : null
               },
               {
                  "templates" : "html",
                  "docroot" : "/logreport/html",
                  "publish" : "../public_html/log-report/htmlpkg",
                  "stylesheet" : "/logreport/html/oodoc.css",
                  "format" : "html",
                  "webpages" : "../public_html/logreport/html"
               },
               {
                  "publish" : "../public_html/log-report/doctree",
                  "meta" : {
                     "main_manual" : "Log::Report"
                  },
                  "markup" : "html",
                  "serializer" : "json",
                  "export" : "website"
               }
            ]
         },
         "prereqs" : {
            "configure" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "test" : {
               "requires" : {
                  "Test::More" : "1",
                  "Test::Pod" : "1"
               }
            },
            "build" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "runtime" : {
               "requires" : {
                  "Scalar::Util" : "0",
                  "Devel::GlobalDestruction" : "0.09",
                  "Sys::Syslog" : "0.27",
                  "Encode" : "2.00",
                  "Log::Report::Optional" : "1.07",
                  "String::Print" : "1.00"
               }
            },
            "develop" : {
               "requires" : {
                  "OODoc" : "3.04"
               }
            }
         },
         "version" : "1.46"
      },
      "Log-Report-Optional" : {
         "release_status" : "stable",
         "x_serialization_backend" : "JSON::PP version 4.16",
         "resources" : {
            "repository" : {
               "url" : "https://github.com/markov2/perl5-Log-Report-Optional.git",
               "web" : "https://github.com/markov2/perl5-Log-Report-Optional",
               "type" : "git"
            },
            "homepage" : "http://perl.overmeer.net/CPAN/"
         },
         "no_index" : {
            "directory" : [
               "t",
               "inc"
            ]
         },
         "dynamic_config" : 0,
         "name" : "Log-Report-Optional",
         "generated_by" : "ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010",
         "abstract" : "Log::Report in its lightest form",
         "license" : [
            "perl_5"
         ],
         "author" : [
            "Mark Overmeer <mark@overmeer.net>"
         ],
         "meta-spec" : {
            "version" : 2,
            "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec"
         },
         "x_oodist" : {
            "email" : "markov@cpan.org",
            "generate" : [
               {
                  "podtail" : null,
                  "format" : "pod3"
               }
            ],
            "use" : [
               "../String-Print"
            ],
            "include" : [],
            "tests" : {},
            "parser" : {
               "skip_links" : [],
               "syntax" : "markov"
            },
            "oodoc_version" : 3.04,
            "first_year" : 2013,
            "release" : {
               "publish" : "../public_html/log-report-optional/source"
            },
            "raw" : {
               "publish" : "../public_html/log-report-optional/raw"
            }
         },
         "prereqs" : {
            "runtime" : {
               "requires" : {
                  "Test::More" : "0.86",
                  "String::Print" : "0.91"
               }
            },
            "build" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "develop" : {
               "requires" : {
                  "OODoc" : "3.03"
               }
            },
            "configure" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "test" : {
               "requires" : {
                  "Test::More" : "1",
                  "Test::Pod" : "1"
               }
            }
         },
         "version" : "1.08"
      },
      "Log-Report-Lexicon" : {
         "abstract" : "Log::Report translation table management",
         "generated_by" : "ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010",
         "name" : "Log-Report-Lexicon",
         "no_index" : {
            "directory" : [
               "t",
               "inc"
            ]
         },
         "dynamic_config" : 0,
         "x_serialization_backend" : "JSON::PP version 4.16",
         "resources" : {
            "bugtracker" : {
               "web" : "https://github.com/markov2/perl5-Log-Report-Lexicon/issues"
            },
            "homepage" : "http://perl.overmeer.net/CPAN/",
            "repository" : {
               "url" : "https://github.com/markov2/perl5-Log-Report-Lexicon.git",
               "web" : "https://github.com/markov2/perl5-Log-Report-Lexicon",
               "type" : "git"
            }
         },
         "release_status" : "stable",
         "version" : "1.16",
         "prereqs" : {
            "develop" : {
               "requires" : {
                  "OODoc" : "3.00"
               }
            },
            "runtime" : {
               "requires" : {
                  "File::Basename" : "0",
                  "File::Spec" : "0",
                  "File::Temp" : "0",
                  "List::Util" : "0",
                  "POSIX" : "0",
                  "Pod::Usage" : "0",
                  "Log::Report" : "1.4",
                  "File::Find" : "0",
                  "Scalar::Util" : "0",
                  "Fcntl" : "0",
                  "Data::Dumper" : "0",
                  "Encode" : "0"
               }
            },
            "build" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            },
            "test" : {
               "requires" : {
                  "Test::More" : "1",
                  "Test::Pod" : "1"
               }
            },
            "configure" : {
               "requires" : {
                  "ExtUtils::MakeMaker" : "0"
               }
            }
         },
         "x_oodist" : {
            "include" : [
               "../String-Print",
               "../Log-Report-Optional"
            ],
            "use" : [
               "../Log-Report",
               "../Log-Report-Template"
            ],
            "generate" : [
               {
                  "format" : "pod3",
                  "podtail" : null
               }
            ],
            "email" : "markov@cpan.org",
            "raw" : {
               "publish" : "../public_html/log-report-lexicon/raw"
            },
            "release" : {
               "publish" : "../public_html/log-report-lexicon/source"
            },
            "first_year" : 2007,
            "oodoc_version" : 3.03,
            "parser" : {
               "skip_links" : [
                  "Locale::PO",
                  "Win32::Locale",
                  "Win32::Codepage"
               ],
               "syntax" : "markov"
            },
            "tests" : {}
         },
         "author" : [
            "Mark Overmeer <markov@cpan.org>"
         ],
         "meta-spec" : {
            "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
            "version" : 2
         },
         "license" : [
            "perl_5"
         ]
      }
   },
   "distribution" : "Log-Report",
   "manuals" : {
      "Dancer2::Logger::LogReport" : "id289",
      "Log::Report" : "id801",
      "Log::Report::DBIC::Profiler" : "id1118",
      "Dancer2::Template::TTLogReport" : "id237",
      "Log::Report::Die" : "id1259",
      "Log::Report::Lexicon::POTcompact" : "id561",
      "Dancer2::Plugin::LogReport" : "id252",
      "Log::Report::Dispatcher::LogDispatch" : "id760",
      "Log::Report::Message" : "id935",
      "Log::Report::Translator::Gettext" : "id542",
      "String::Print" : "id47",
      "Log::Report::Translator::Context" : "id583",
      "Log::Report::Template::Extract" : "id354",
      "Log::Report::Exception" : "id1225",
      "Log::Report::Minimal" : "id173",
      "Log::Report::Lexicon" : "id727",
      "Log::Report::Win32Locale" : "id549",
      "Log::Report::Dispatcher::Syslog" : "id905",
      "MojoX::Log::Report" : "id1059",
      "Log::Report::Dispatcher::Log4perl" : "id780",
      "Dancer2::Plugin::LogReport::Message" : "id221",
      "Log::Report::Lexicon::PO" : "id611",
      "Log::Report::Translator::POT" : "id422",
      "Log::Report::Optional" : "id144",
      "Log::Report::Dispatcher::Callback" : "id1066",
      "Log::Report::Template::Textdomain" : "id385",
      "Log::Report::Dispatcher::File" : "id1091",
      "Log::Report::Lexicon::Table" : "id735",
      "Dancer::Logger::LogReport" : "id217",
      "Log::Report::Translator" : "id1080",
      "Log::Report::Template" : "id299",
      "Log::Report::Lexicon::POT" : "id669",
      "Log::Report::Lexicon::MOTcompact" : "id461",
      "Log::Report::Extract" : "id513",
      "Log::Report::Util" : "id117",
      "Log::Report::Domain" : "id1122",
      "Log::Report::Dispatcher" : "id1158",
      "Log::Report::Dispatcher::Try" : "id1021",
      "Log::Report::Extract::PerlPPI" : "id493",
      "Log::Report::Lexicon::Index" : "id441",
      "Log::Report::Minimal::Domain" : "id150",
      "Log::Report::Dispatcher::Perl" : "id1217"
   }
}
