ChangeLog for package rkwarddev

changes in version 0.10-3 (2025-09-24)
fixed:
  - rk.rkh.setting(): made sure the help text is not treated like an XML
    attribute if given as a named list
  - rk.comment()/rk.i18n.comment()/rk.rkh.caption()/rk.rkh.link(): simplified
    XMLNode() calls to not rely on the first argument to be named "name", which
    was renamed in XiMpLe 0.11
  - unit tests: added a check for XiMpLe version and adjustments to the test
    standards if version >= 0.11 is being used
  - removed ancient compatibility code for R < 2.15; fixes package load with R 4.5
added:
  - new property "overwrite" added to valid modifiers for <browser>
>>>>>>> origin/develop

changes in version 0.10-2 (2022-05-03)
fixed:
  - rk.updatePluginMessages(): check that python is version 3

changes in version 0.10-1 (2022-04-21)
fixed:
  - rk.XML.connect(): no dot is appended to the governor any more if 'get=""'
  - rk.plugin.component(): also use 'gen.info' with autogenerated help
    documents (from scanned XML nodes)
  - rk.plugin.skeleton(): add "Encoding: UTF-8" to the DESCRIPTION file,
    required to satisfy roxygen2
changed:
  - modifier checks: private function modif.validity() now also lists valid
    modifiers when in stop-at-error mode, not only when a warning should be
    shown
  - rk.XML.convert(): does now try not to complain if sources is not a list
  - vignette: converted into RMarkdown and updated screenshots
added:
  - rk.XML.select(): new parameter "single" (available as of RKWard 0.7.1).

changes in version 0.08-2 (2017-07-28)
fixed:
  - rk.uniqueIDs() was using lists internally in some cases which caused an
    unneccessary warning
  - rk.XML.formula() was missing the label attribute (also missing in the
    documentation)
  - rk.JS.scan() omitted <formula> nodes
  - re-implemented the dropping of variables if they're globally defined in
    rk.JS.doc()
  - private function p2s.checkModifiers() (called by plugin2script()) didn't
    detect *.not modifiers correctly
  - plugin2script() does now output numeric values when mandatory; internally
    this is defined in the FONA list
  - rk.XML.about() now prints dates correctly
  - rk.XML.vars() now knows type "numeric" instead of "number"
  - fixed tests/generate_test_standards.R (replacing "number" with "numeric")
  - rk.JS.header() doesn't fail any longer if ".add" vectors have no names
changed:
  - internal function get.IDs() now uses new internal function
    filter.relevant.tags()
  - function rk.JS.scan() now has a new mode switch and supports scanning for
    <preview /> nodes
  - rk.JS.scan() can now also check if a variable is actually being used in
    the script body (if given via the new script argument), and if not omit it
    from its result; this is the new default, but can be turned off by setting
    the new argument unused.vars=TRUE in rk.plugin.component() and
    rk.plugin.skeleton()
  - handling of previews was changed; using "doPrintout" is deprecated now,
    but still works. most scripts should still do without changes, allthough
    the JS code looks different now
  - improved output of rk.JS.doc()
  - improved the handling of <frame> nodes in JS code: previously id() just
    returned the camelCode id of frames, you had to manually define an object
    outside rk.paste.JS() via rk.JS.vars(<frame object>, modifiers="checked").
    the default is now to add the checked modifier, since using frames in JS
    is most likely useless otherwise. i.e., you now need to manually call via
    rk.JS.vars(<frame object>) with no modifiers if you happen to need the
    frame's ID for whatever reason
  - adjusted plugin2script() to the new rk.XML.preview() parameters (see
    "added")
  - rk.XML.embed() now also accepts objects of class rk.plug.comp as
    components
  - rk.plotOptions() gained new argument namespace to work well with the
    changed approach of rk.XML.embed()
  - rk.XML.connect() now allows objects of class rk.plug.comp to be used as
    clients and <external> nodes to be used as the "set" modifier for that
    client, and can therefore be used to connect properties from embedded plugins
  - objects of class rk.JS.var now have a new slot "methods" to append method
    calls
  - moved internal js.try.scan() function from body of rk.plugin.component()
    to rk-internal.R
  - rk.XML.about() finally no longer supports "dependency", "package" or
    "pluginmap"; these arguments were deprecated for years now
  - adjusted test standards
added:
  - new parameters "mode", "placement", "active" and "id.name" in
    rk.XML.preview()
  - new parameter "preview" in rk.JS.doc() to force adding a preview()
    function
  - rk.plugin.component() and rk.plugin.skeleton() now support "preview" in
    both the "js" option and the "scan" option
  - new options "preview" and "level" in rk.JS.saveobj()
  - id() gained the new attribute "guess.modifier" to toggle the new default
    for <frame> nodes in JS (see above)
  - new parameter "namespace" in rk.XML.embed() to result in
    "namespace::component", takes character strings, <about> nodes and pluginmap XML trees and
    is not yet covered by plugin2script()
  - new function rk.JS.method() to generate JS method calls
  - plugin2script() now also scans *.rkh and *.pluginmap files
  - rk.JS.header() now accepts rk.JS.ite objects as the second value of "add"
    entries and prints them in a condensed statement

changes in version 0.08-1 (2015-12-17)
fixed:
  - attribute "max_precision" in <spinbox> was misspelled
  - rk.XML.connect() still handled modifiers for "governor" wrong if it
    wasn't a XiMpLe node
  - also fixed how rk.XML.convert() and rk.XML.switch() were handling
    modifier checking
  - rk.XML.dependencies() didn't know about min/max versions of pluginmaps
    (fixed in rk.XML.about() as well)
  - some fixes to the skeleton GUI and demo script
  - prevent internal function indent() from losing it over negative values
  - indentation of rk.paste.JS.graph() was incorrect
  - pasting comments via rk.paste.JS() gained an extra space for subsequent
    lines
  - the "i18n" attribute in lists e.g. for rk.XML.radio() didn't really work
  - improved indetation for rk.JS.oset objects
  - rk.XML.varslot() and rk.XML.valueslot() didn't correctly add sources if
    they were character strings (which is valid)
  - R.comment() didn't correctly paste indentation levels > 2
added:
  - new methods plugin2script() to try to translate raw plugin XML into
    working rkwarddev script calls
  - new option "ignore" enables rk.uniqueIDs() to not check nodes for
    duplicates (e.g., <copy>)
  - new wrapper function js() for id() makes it possible to use several
    operators without quoting, preserve "if" conditions and "for" loops, which all
    will be translated to JavaScript equivalents without the need for quoting.
    however, the "for" loop code is not publicly documented and remains a
    proof of concept kind of thing for now
  - new option ".objects" in id() and ".ite" in rk.JS.options() to provide
    objects as a list
  - new option "rk.JS.vars" to make JS variables match the name of the
    original R object
  - new function idq() to print quoted IDs of XML nodes for use in JavaScript
    sections
  - new function modifiers() to make checking for valid mdifiers of a given
    node easier
  - new functions rk.get.indent() and rk.set.indent() to globally set
    indentation string
  - new functions rk.get.empty.e() and rk.set.empty.e() to globally define
    the handling of empty "else" clauses in JavaScript
  - in rk.JS.header(), the second value provided by "add" can now be named
    "noquote" to have it nested in the JS noquote() function
  - new wrapper function rk.updatePluginMessages() for
    update_plugin_messages.py, the package now comes with its own copy of this core i18n script
  - the generator info gained support for hinting at the very rkwarddev
    script file that was used to generate a particular plugin file
  - new function rk.local() to be used as an alternative to local() with a
    predefined local environment to solve scope issues with js()
changed:
  - improved error handling in rk.JS.header(), error messages are more
    informative now
  - rk.uniqueIDs() now checks "dialog" and "wizard" sections separately
  - updated the vignette with information on js(), plugin2script(), and how
    to add help pages
  - internal function modif.validity() now calls modifiers() to give more
    useful feedback
  - all functions offering "intent.by" as an option now fetch the default
    value by calling rk.get.indent()
  - all functions offering "empty.e" as an option now fetch the default value
    by calling rk.get.empty.e()
  - removed trailing newline in rk.JS.header() output
  - updated test standards

changes in version 0.07-3 (2015-06-29)
fixed:
  - rk.JS.header() now produces usable level options
added:
  - new slot "opt.sep" in classes rk.JS.arr and rk.JS.opt, as well as new
    option "opt.sep" in rk.paste.JS(), rk.JS.array() and rk.JS.options(), to
    manipulate the character string separating the previous options from the ones
    defined by these objects

changes in version 0.07-2 (2015-03-14)
fixed:
  - replaced the outdated links to sourceforge with our new KDE URL

changes in version 0.07-1 (2015-03-13)
fixed:
  - rk.XML.optionset() does now allow to re-use objects defined in the same
    function call (i.e., refer to optioncolumns in the logic section)
  - removed arguments "help" and "component" from rk.XML.optionscolumn()
    again, as these are already being documented via the objects they connect to.
  - rk.build.plugin() was still only using the "--no-vignettes" option from R
    < 3
  - rk.XML.pluginmap() malformed label argument names if they referred to
    standrad maneu entries
  - rk.plugin.skeleton() still allowed invalid IDs, fixed the regexp
  - rk.XML.snippets() now also accepts <include> as child node
  - rk.XML.tabbook() returns <insert> nodes as-is, not nested in <tab></tab>
  - rk.JS.scan() now sets "state" as default modifier for checkboxes if
    guess.getter is TRUE
  - rk.XML.connect() handled modifiers too strict if "client" was a string,
    and too liberal when "governor" was
  - join() referenced a wrong object name if "var" was of class rk.JS.arr
  - rk.XML.about() had a malformed error message
  - rk.plugin.component() called XMLAttrs() with too many arguments
  - rk.XML.values() and rk.XML.vars() do now handle all combinations of
    "horiz" and "add.nodes" properly
  - fixed wrong link to rk.plugin.skeleton() in documentation of
    rk.XML.pluginmap()
added:
  - all "help" values can now be a list of character strings or XiMpLe nodes,
    to have more control over the markup
  - added "property" and "duplicates" arguments to rk.XML.valueslot() and
    rk.XML.varslot().
  - rk.XML.pluginmap() now adds a "po_id" attribute to pluginmaps, necessary
    for i18n
  - new attribute "require.defaults" in rk.XML.pluginmap() to add
    rkward::menu and rkward::embedded as requirements
  - new attribute "i18n" added to several XML functions; it takes a list with
    the named arguments "comment" or "context" to either produce an i18n
    comment node or an "i18n_context" attribute
  - new function rk.i18n.comment() to give context for translators
  - new function rk.JS.header() to easily generate JavaScript header code fit
    for i18n
  - rk.JS.doc(), rk.plugin.skeleton() and rk.plugin.component() now use
    rk.JS.header() instead of rk.header(), and also accept its "header.add"
    attribute
  - new function R.comment() to generate JavaScript "comment()" calls
  - first unit tests using the testthat package
  - added documentation to the used S4 classes
  - enhanced rk.XML.values() to also accept "options" and "duplicates", and
    rk.XML.vars() to also accept "duplicates"
  - new argument "var" in rk.paste.JS() to define whether the JS keyword
    "var" should be used or omitted for rk.JS.var objects
  - rk.XML.matrix() now also accepts the arguments "min_rows" and
    "min_columns"
  - <dropdown>, <radio> and <select> have gained "string.quoted" as a valid
    property/modifier
  - new function rk.XML.i18n() to define translatable labels in logic sections
  - new function rk.rkh.label() for extracting labels from plugin elements
changed:
  - function i18n() was changed to be used in JavaScript generation only;
    this breaks code using the function introduced with 0.06-4, but that was to
    be shortlived from the start... the i18n features of 0.06-4 will be
    completely replaced with some proper methods now
  - comment nodes (<!-- foo -->) are now globally allowed as child nodes in
    XML; important for i18n comments
  - modifier checks now point to rkwarddev:::all.valid.modifiers directly in
    case of errors
  - internally, moved the definitions of valid child nodes and modifiers as
    well as default getter functions and modifiers to separate files, so
    they're more obvious to find and check
  - rk.XML.input() now checks wheter "size" is exactly one of "small",
    "medium" or "large"
  - rk.JS.doc() now uses a more robust method to set global variables, namely
    by defining an additional function setGlobalVars() and calling that
    inside preprocess()
  - due to changes needed for i18n and rk.JS.header() to work, check your
    "result.header" values, there might be quote issues. for the most part,
    remove quotes you added for rkwarddev >= 0.05-0
  - updated the generation of author and maintainer fileds in DESCRIPTIONs
    made by rk.plugin.skeleton(), borrowing get.authors() from roxyPackage
  - rk.plugin.component() will now also move <dependencies> from <about> to a
    top level child node of plugin XML code, with a warning
  - rk.plugin.skeleton() has a new logical switch called "internal", to set
    some defaults for plugins to be distributed with RKWard itself
  - the "pluginmap" argument of rk.plugin.skeleton() now also accepts
    "namespace"
removed:
  - the functions rk.set.language() rk.get.language() were no longer useful
    and therefore removed
  - also removed the option "lang" from rk.rkh.doc(), rk.XML.plugin(),
    rk.XML.pluginmap() and rk.plugin.skeleton()

changes in version 0.06-5 (2014-10-19)
fixed:
  - the "show" feature in rk.plugin.skeleton() was broken due to changes in
    the namespace defaults
  - scanning plugin XML code for JS and help related content didn't work as
    expected in rk.plugin.component()
  - rk.rkh.scan() now also recognises <optioncolumn> and <matrix> nodes
  - a logical bug prevented rk.plugin.component() to run with default values
    for XML
  - internal function paste.JS.options(), used by rk.JS.options(), was only
    working correctly for the "then" part if ite() statements in arrays; now
    also produces usable code for an "else" part, if available
added:
  - new functions rk.XML.valueselector(),  rk.XML.valueslot() and the
    combining rk.XML.values() to define <valueselector> and <valueslot> nodes,
    similar to rk.XML.varselector(),  rk.XML.varslot() and rk.XML.vars()
  - new function rk.XML.select() to define <select> nodes
  - new functions rk.set.rkh.prompter() and rk.get.rkh.prompter() to make it
    easier to generate help files (later...)
  - rk.rkh.scan() (and automatically rk.plugin.skeleton() and
    rk.plugin.component()) are now capable of fetching text set with rk.set.rkh.prompter()
    and use it to generate help files
  - all functions scanned by rk.rkh.scan() for setting nodes in .rkh files
    have gained two additional arguments, "help" and "component", to register
    the text to be used via rk.set.rkh.prompter()
  - new function rk.XML.option() to allow setting and accessing IDs for
    single options as well
  - new function rk.JS.optionset() and object class "rk.JS.oset" to generate
    for loops over <optionset> columns
changed:
  - updated the plugin skeleton example script; e.g., it now uses the new
    .rkh file generating features
  - rk.XML.radio() and rk.XML.dropdown() now also accept objects made with
    rk.XML.option() in their respective list of options
  - renamed all class definition files due to include problems with
    roxygenize()
  - allow non-maintainers to omit email addresses in <about> nodes

changes in version 0.06-4 (2014-09-14)
added:
  - new functions rk.set.language(), rk.get.language() and i18n() to
    facilitate static internationalisation of plugins; makes use of a new internal
    environment .rkdev.env
  - new parameter "lang" in functions rk.rkh.doc(), rk.XML.plugin(),
    rk.XML.pluginmap() and rk.plugin.skeleton() for internationalisation. if used, the
    attributes "lang" and "xml:lang" will be set in the <document> root of
    the generated files, respectively
  - new parameter "localized" in rk.XML.require() for internationalisation
  - the document id in rk.XML.pluginmap() can now be set manually
fixed:
  - abbreviation of labels now limits valid characters to [0-9A-Za-z]
  - in rk.XML.pluginmap(), "components" and "hierarchy" may be set to NULL if
    "require" is used accordingly

changes in version 0.06-3 (2013-12-21)
fixed:
  - fixed outdated example code for rk.plugin.component()
added:
  - new function rk.uniqueIDs() checks for duplicate IDs
  - rk.JS.array() can now be told to quote values
changed:
  - rk.plugin.component() and rk.rkh.doc() do now interpret the "hints"
    argument to prevent the generation of optional XML nodes.
  - rk.plugin.component() now automatically calls rk.uniqueIDs() and stops if
    IDs are not unique

changes in version 0.06-2 (2013-04-04)
changed:
  - the structure of <about> nodes will change in RKWard 0.6.1,
    <dependencies> will become a direct child of <document> or <component>, which explains
    several changes in this release. this is not really critical, because this
    information wasn't evaluated by RKWard until now anyway
  - for consistency, from now on <component> is never an empty node
  - rk.XML.pluginmap(), rk.XML.plugin() and rk.plugin.skeleton() will now
    move <dependencies> from <about> to a top level child node of plugin maps,
    with a warning
  - from rk.plugin.component() and rk.XML.plugin(), the "pluginmap" argument
    was replaced by the more general "include", which can now also process a
    vector of file names
  - the object class rk.JS.var gained a new slot "getter" to set a default JS
    function to query variable values. it defaults to "getValue" to ensure
    compatibility with earlier releases. consequently, rk.JS.vars() and
    rk.paste.JS() have a new  "getter" argument to set or overwrite this value.
    another new argument, "guess.getter", can be used to turn on automatic guessing
    which getter function might be most appropriate. this was also added to
    rk.plugin.component() and rk.plugin.skeleton().
  - updated the skeleton_dialog.R demo file and recreated the plugin code
  - JavaScript functions like rk.JS.scan() and id() learned how to treat
    <optionset>, <optioncolumn> and <matrix>
  - internally paste(..., sep="") was replaced with paste0(...), in a way
    that ensures compatibility with R < 2.15
added:
  - new function rk.XML.switch()
  - new function rk.XML.optiondisplay()
  - new function rk.XML.optionset()
  - new function rk.XML.matrix()
  - new function rk.XML.dependencies()
  - new function rk.XML.dependency_check()
  - new function join() to simplify ".join()" for JavaScript arrays
  - added options "dependencies", "namespace" and "priority" to
    rk.XML.pluginmap()
  - added option "dependencies" to rk.XML.component()
  - added "map" to rk.XML.require()
  - the new class rk.JS.echo allows having objects in an echo() statement
    without quoting it
  - new combined modifiers "visible.not", "visible.numeric", "enabled.not",
    "enabled.numeric", "state.not" and "state.numeric" are now supported
  - modifiers have been added for <optionset> and <matrix>, and <switch> can
    have any modifier
fixed:
  - added some missing parameter in the docs for rk.paste.JS.graph()
  - fixed a bug in the modifier checks; this unveiled a bug in how
    rk.JS.scan() dealt with <frame> nodes, which was also fixed
  - fixed a duplicate entry in this ChangeLog for version 0.04-6
  - rk.plugin.skeleton() now correctly works with more than one author
  - pluginmap files are no longer included into plugin XML files automatically

changes in version 0.06-1 (2012-11-08)
changed:
  - rk.plugin.skeleton(): "tests" will now ignore "overwrite" and not replace
    existing testsuite files
fixed:
  - dots will now be removed from pluginmap IDs
  - modifiers of "external" XML nodes will not be checked, since it can be
    all kinds of stuff

changes in version 0.05-8 (2012-09-30)
added:
  - new function rk.plotOptions() and class "rk.plot.opts" to simplify code
    generation for plots; this also caused changes in the internal workflow,
    especially for child.node() and rk.paste.JS()
changed:
  - rk.paste.JS.graph() also takes objects of class "rk.plot.opts"
  - rk.XML.embed() now supresses the label if "button=FALSE"

changes in version 0.05-7 (2012-09-29)
added:
  - new function rk.paste.JS.graph() to simplify JS code generation for plots

changes in version 0.05-6 (2012-05-10)
added:
  - rk.XML.wizard() and rk.XML.dialog() can now set the "recommended"
    attribute

changes in version 0.05-5 (2012-04-19)
added:
  - rk.plugin.skeleton() can now also generate initial ChangeLog files (but
    won't overwrite existing ones)
  - added a LICENSE file to the sources
  - sources were initially debianized by roxyPackage
changed:
  - if files are being skipped by rk.plugin.skeleton(), the corresponding
    warning will now include the 'create' actions that these files belong to
fixed:
  - rk.paste.JS() pastes rk.comment() objects correctly again

changes in version 0.05-4 (2012-04-06)
fixed:
  - rk.XML.frame() didn't generate attributes due to a typo

changes in version 0.05-3 (2012-03-18)
  - fixed: rk.XML.text() now preserves XML tags in the text value
  - internally, functions now call XiMpLe::XMLNode() and XiMpLe::XMLTree()
    constructors instead of new(), and pasteXMLNode() and pasteXMLTree() were
    globally renamed into pasteXML()
  - internally, replaced object@node with slot(object, "node")
  - internally, moved checks for valid child and parent nodes to an internal
    functions, valid.child() and valid.parent()

changes in version 0.05-2 (2012-03-10)
  - added missing dependency to package methods
  - fixed docs in rk.XML.plugin(), rk.XML.saveobj() and rk.plugin.skeleton()
  - fixed bug in rk.XML.snippets()
  - re-formatted the ChangeLog so roxyPackage can translate it into a NEWS.Rd
    file

changes in version 0.05-1 (2012-01-04)
  - removed superfluous "level=1" arguments from automatic "rk.header()"s in
    rk.JS.doc()
  - added wrapper function rk.XML.checkbox() for rk.XML.cbox()
  - changed rk.JS.saveobj() to use ".GlobalEnv$" instead of "assign()" in the
    resulting code
  - added option to toggle the addition of empty "else {}" statements in
    rk.JS.ite objects to rk.paste.JS()

changes in version 0.05-0 (2011-12-14)
  - "result.header" now doesn't add quotes by itself in rk.JS.doc(), so you
    can have R objects pasted. previous scripts need to be adapted accordingly!
    the headers can also be deactivated by setting to FALSE or ""
  - fixed show method for objects of class rk.JS.var with more than one
    variable object
  - added support for global variables to rk.JS.doc() and
    rk.plugin.component(), and therefore also rk.plugin.skeleton()
  - "variables" and "globals" in rk.JS.doc() can now also be given as objects
    of class rk.JS.var
  - worked on the vignette

changes in version 0.04-13 (2011-12-12)
  - set default value of checked checkboxes to "true" in rk.XML.cbox()
  - rk.XML.connect() now correctly supports 'governor="<ID>.<modifier>.not"'

changes in version 0.04-12 (2011-12-11)
  - added function tf() for even quicker JavaScript code generation from
    checkboxes
  - fixed issue with "about" not being an XML node in rk.plugin.skeleton()

changes in version 0.04-11 (2011-12-10)
  - ite() now supports full recursion also for the "thenjs" option.
  - fixed superfluous first newline in rk.JS.vars()

changes in version 0.04-10 (2011-12-05)
  - when using rk.comment() for logic scripting, its contents will
    automatically be placed inside a <script> node now

changes in version 0.04-9 (2011-12-03)
  - left over stuff from JS printout() function is now added to doPrintout()

changes in version 0.04-8 (2011-11-10)
  - R 2.14 creates source archives which are incompatible with earlier
    versions. attempt to deal with this by adding empty R directory and NAMESPACE
    file

changes in version 0.04-7 (2011-11-08)
  - added long description support to rk.XML.about(), used for the
    DESCRIPTION file

changes in version 0.04-6 (2011-10-31)
  - added <frame> to the tags which are scanned by rk.JS.scan(), they're
    considered only if checkable
  - improved output of rk.JS.var class objects by rk.paste.JS()

changes in version 0.04-5 (2011-10-28)
  - set dependency of rkward to >= 0.5.6 to work around a glitch in rkward's
    package versioning. this can cause errors on real 0.5.6 installations
    because they lack functions introduced in 0.5.7 (to add & load a plugin
    automatically), but shouldn't really break anything
  - added support to turn off modifier checks to rk.XML.set()
  - added option "load.silencer" to rk.JS.doc(), to easily add a switch to
    turn off package load messages in output.

changes in version 0.04-4 (2011-10-26)
  - fixed bug in check for valid modifiers (used to warn when mixed lists
    with/without modifiers were given)
  - fixed bug in rk.XML.convert() (false output if provided with list without
    modifiers)
  - added option "check.modifiers" to rk.JS.vars()

changes in version 0.04-3 (2011-10-22)
  - added support for definint doPrintout() JS functions to rk.JS.doc(),
    rk.plugin.skeleton() and rk.plugin.component()
  - added function rk.comment() to add comments to the generated code. it's a
    <!-- comment --> node by default, but will be turned into // comment by
    rk.paste.JS() and <![CDATA[ comment ]]> for logic sections automatically
  - added option "gen.info" to all file producing functions, to add a comment
    note that the file was generated and changes should be made to the script
    rather than the code directly
  - fixed missing "id.name" option in rk.XML.embed()
  - fixed automatic menu hierarchy generation for lists of legth 1 in
    rk.XML.pluginmap()

changes in version 0.04-2 (2011-10-21)
  - removed the superfluous "name" option from rk.plugin.skeleton() and
    rk.plugin.component(); names are now always provided by "about", either as an
    <about> node or just the name.
  - result headers now start at level 1 by default in rk.JS.doc()
  - added option "suggest.required" to rk.plugin.skeleton() to add package
    requirements as suggestions, not dependencies
  - updated skeleton GUI dialog

changes in version 0.04-1 (2011-10-20)
  - added "about" option to rk.XML.plugin() to overrule pluginmap defaults
  - added rk.plugin.component(), i.e. modularized the component generation,
    to allow for more than one component in rk.plugin.skeleton(), which
    subsequently gained the new option "components"
  - improved dependency support, rk.plugin.skeleton() writes dependencies
    from <about> to DESCRIPTION now
  - fixed dependency definition in rk.XML.about()
  - fixed "verion" typo in rk.XML.about()
  - the dot "." is now also allowed in file names

changes in version 0.04-0 (2011-10-19)
  - for accurcy and consistency with the docs, the "properties" option
    changed to "modifiers" in rk.JS.vars()
  - added further property modifiers to the internal validation
  - added class rk.JS.var, including show method
  - added support for class rk.JS.var in rk.paste.JS() an id()
  - rk.JS.vars() now returns a list of class rk.JS.var
  - added support for all valid modifiers to rk.XML.convert() and
    rk.XML.connect()

changes in version 0.03-7 (2011-10-18)
  - added "checkable" and "checked" options to rk.XML.frame()
  - set rk.paste.JS() default level to 2
  - fixed bug in rk.JS.array() (superfluous "=" in generated code)

changes in version 0.03-6 (2011-10-13)
  - lifted rkward package dependecies to 0.5.7 (needed for
    rk.load.pluginmaps())
  - rk.XML.menu() and rk.plugin.skeleton() can now recursively generate
    deeper menu structures if you provide it with a list
  - fixed bug in autogeneration of IDs in rk.XML.input() and rk.XML.saveobj()

changes in version 0.03-5 (2011-10-11)
  - rk.XML.tabbook() can now autogenerate IDs without a label
  - fixed bug in autogeneration of IDs in rk.XML.spinbox()
  - shortened syntax of rk.XML.tabbook() tabs are now simply a named list

changes in version 0.03-4 (2011-10-10)
  - added functions rk.XML.code() and rk.XML.help()
  - fixed bug in internal function check.ID() (produced false entry nodes
    under certain circumstances)
  - fixed bug in rk.XML.pluginmap() for automatic component IDs
  - fixed bug in rk.plugin.skeleton() for cases where XML file exists and is
    not overwritten, but JS/help files need to be generated
  - cleaned up rk.XML.pluginmap() and rk.XML.plugin() hint code
  - changed "nodes" option to "..." also in rk.XML.menu()
  - added beginnings of a vignette (to be continued...)

changes in version 0.03-3 (2011-10-09)
  - replaced most of the "nodes" and "children" options with "..." in
    functions rk.rkh.related(), rk.rkh.settings(), rk.XML.col(), rk.XML.components(),
    rk.XML.context(), rk.XML.dialog(), rk.XML.frame(), rk.XML.hierarchy(),
    rk.XML.logic(), rk.XML.page(), rk.XML.row(), rk.XML.snippet(),
    rk.XML.snippets() and rk.XML.wizard(). therefore, you don't need to list() objects any
    more.
  - any function which generates an ID now has an automation mechanism for
    it, which is also the default.

changes in version 0.03-2 (2011-10-09)
  - fixed skeleton GUI pluginmap not being found

changes in version 0.03-1 (2011-10-08)
  - added new shortcut function qp() -- "quote + plus" -- for id()
  - added option to create arrays with rk.JS.options()
  - enhanced class rk.JS.opt
  - rk.paste.JS() now adds some comments to the generated code
  - fixed wrong default value for "required" in rk.XML.browser()
  - added demo script
  - added skeleton GUI, was generated by the demo script

changes in version 0.03-0 (2011-10-07)
  - redesigned options for rk.plugin.skeleton() again, to make them more
    intuitive and flexible at the same time. unfortunately, this breaks backwards
    compatibility again.
  - rk.plugin.skeleton() and rk.XML.pluginmap() now only accept
    rk.XML.about() made objects for "about"
  - rk.plugin.skeleton() uses internal function XML2person() to create nicer
    Authors@R entries in DESCRIPTION
  - fixed bug in id() (now generates JS variable names, not XML IDs)

changes in version 0.02-5 (2011-10-06)
  - added functions rk.rkh.caption(), rk.rkh.link(), rk.rkh.related(),
    rk.rkh.section(), rk.rkh.setting(), rk.rkh.settings(), rk.rkh.summary(),
    rk.rkh.technical(), rk.rkh.title() and rk.rkh.usage()
  - rk.rkh.doc() now only accepts nodes of the above functions as input (and
    gained support for title and sections)
  - rk.rkh.scan() now also looks for captions
  - added full help page support to rk.plugin.skeleton()
  - added support for properties to rk.JS.vars()
  - added function rk.JS.saveobj() to generate JS code for saveobject nodes.
  - added function rk.JS.options() to generate code for JS variables holding
    multiple options
  - added class rk.JS.opt and a show method for it (use rk.paste.JS() on that)
  - id() and echo() now also replace objects of classes rk.JS.opt and
    rk.JS.arr with their relevant ID
  - linked "Introduction to Writing Plugins for RKWard" locally to the manual
    pages

changes in version 0.02-4 (2011-10-03)
  - some experimental JavaScript generator tools added, might very well be
    changed soon again: - added functions rk.JS.vars(), echo(), id(), ite() and
    rk.paste.JS() to help generate JavaScript code - added classes rk.JS.ite,
    rk.JS.arr and show methods for them - function rk.JS.array() now returns
    an object of class rk.JS.arr (use rk.paste.JS() on that)

changes in version 0.02-3 (2011-09-30)
  - added functions rk.XML.attribute(), rk.XML.component(),
    rk.XML.components(), rk.XML.context(), rk.XML.entry(), rk.XML.hierarchy(), rk.XML.menu()
    and rk.XML.require()
  - rk.plugin.skeleton() and rk.XML.pluginmap() now use the new functions,
    which makes them much more flexible
  - added option "menu" to rk.plugin.skeleton()
  - added options "require", "x11.context", "import.context" and "hints" to
    rk.XML.pluginmap()
  - removed now superfluous option "plugin.dir" from rk.XML.pluginmap()
  - tuned rk.plugin.skeleton() to only skip file writing if they exist

changes in version 0.02-2 (2011-09-29)
  - added "load" and "show" options to rk.plugin.skeleton() to call
    rk.load.pluginmaps() and the plugin itself
  - added function rk.build.plugin()

changes in version 0.02-1 (2011-09-28)
  - added functions rk.XML.insert(), rk.XML.include(), rk.XML.embed(),
    rk.XML.preview(), rk.XML.snippet(), and rk.XML.snippets()
  - added support for snippets section to rk.XML.plugin() and
    rk.plugin.skeleton()
  - included formula node into rk.XML.vars() wrapper
  - rk.XML.varslot() now automatically sets "multi=TRUE" if "min", "max" or
    "any" are set

changes in version 0.02-0 (2011-09-27)
  - redesigned options for rk.XML.plugin() and rk.plugin.skeleton() for more
    consistency. unfortunately, this breaks backwards compatibility!
  - added functions rk.XML.varselector(), rk.XML.copy(), rk.XML.dialog(),
    rk.XML.page() and rk.XML.wizard()
  - added type checks to rk.XML.spinbox()
  - added "id.name" and "label" to various functions
  - updated rk.XML.formula()

changes in version 0.01-5 (2011-09-25)
  - added functions rk.XML.formula(), rk.XML.convert(), rk.XML.connect(),
    rk.XML.logic(), rk.XML.set() and rk.XML.external()
  - added possibility to add custom XML code to the logic section with
    rk.XML.plugin() and rk.plugin.skeleton()
  - fixed id setting in rk.XML.browser()
  - simplified rk.plugin.skeleton() and rk.XML.pluginmap() by making "about"
    entirely optional

changes in version 0.01-4 (2011-09-22)
  - fixed wrong doc link and one wrong object name in rk.plugin.skeleton()
  - fixed attribute typo in rk.XML.vars()
  - fixed issue with auto-generated IDs (now using "_" instead of ".")
  - added wizard code options to rk.XML.plugin() and rk.plugin.skeleton()
  - added "edit" and "create" options to rk.plugin.skeleton()
  - added function rk.XML.varslot()
  - added possibility to add custom XML nodes to the varslot in rk.XML.vars()
  - added possibility to paste ready-to-use JavaScript code directly to the
    preprocess(), calculate() and printout() functions, respectively

changes in version 0.01-3 (2011-09-16)
  - added rk.XML.spinbox() and missing options to rk.XML.browser() and
    rk.XML.saveobj()
  - corrected browser default type in rk.XML.browser()
  - added wizard option to rk.plugin.skeleton()

changes in version 0.01-2 (2011-09-15)
  - reworked rk.XML.about() to use person class objects for authors, and need
    less info to produce usable output

changes in version 0.01-1 (2011-09-05)
  - added rk.JS.scan(), rk.JS.doc(), rk.JS.array(), rk.rkh.scan() and
    rk.rkh.doc()
  - added rk.XML.browser(),  rk.XML.input(),  rk.XML.saveobj(),
    rk.XML.stretch() and  rk.XML.text()
  - added rk.testsuite.doc()
  - shortened package name from "rkwardplugdev" to "rkwarddev"
  - merged code into RKWard's svn tree

changes in version 0.01-0 (2011-08-30)
  - forked rk.* functions from XiMpLe package into this one
  - added functions rk.XML.cbox(), rk.XML.row(), rk.XML.col(),
    rk.XML.frame(), rk.XML.radio() and rk.XML.vars()
  - rewrote the ID handling
  - added docs
  - initial release via reaktanz.de

