--- /dev/null
+
+ XML resources file format
+ ===============================
+
+ 1. Basics
+-----------
+
+XML resource is well-formed XML document, i.e. all tags are paired
+and there is only one root node, which is always <resource>.
+
+In the following text, I will use standard XML terminology:
+
+<tag_one prop1="prop" prop2='yes'>
+ <tag_two/>
+</tag_one>
+
+Here, tag_one is a node (the word 'tag' refers to the type of the node),
+prop1 and prop2 are properties and tag_two is a child node of tag_one.
+Property's default value is the value that will be assigned to the property
+if you do not specify it explicitly.
+
+I will use the term "primary node" to refer to nodes than represent controls,
+dialogs etc. "Secondary nodes" are nodes used to store data:
+
+<dialog name="my_dlg"> primary
+ <title>Demo Dialog...</title> secondary
+ <size>100,200d</size> secondary
+ <children> secondary
+ <button name="wxID_OK"> primary
+ <label>Ok</label> secondary
+ <pos>10,10d</pos> secondary
+ </button>
+ </children>
+</dialog>
+
+In the example above, <label>, <pos>, <size> and <title> are "variables",
+i.e. they contain a value and not a list of children (unlike <children> node).
+
+Any node (but the root one) may have property "platform" with possible
+values "unix", "win", "mac" or "os2". All nodes with "platform" property
+specified and other than the platform the program is currently being executed
+on will be removed when reading XML resource file.
+
+Root node may have children of these and only these types: <menu>, <menubar>,
+<dialog>, <panel>
+
+
+
+ 2. IDs
+--------
+
+Any primary node may have property "name" used to identify it. Default value
+is "-1", any string is legal name. Names
+ wxID_OPEN, wxID_CLOSE, wxID_NEW,
+ wxID_SAVE, wxID_SAVEAS, wxID_REVERT,
+ wxID_EXIT, wxID_UNDO, wxID_REDO,
+ wxID_HELP, wxID_PRINT, wxID_PRINT_SETUP,
+ wxID_PREVIEW, wxID_ABOUT, wxID_HELP_CONTENTS,
+ wxID_HELP_COMMANDS, wxID_HELP_PROCEDURES,
+ wxID_CUT, wxID_COPY, wxID_PASTE,
+ wxID_CLEAR, wxID_FIND, wxID_DUPLICATE,
+ wxID_SELECTALL, wxID_OK, wxID_CANCEL,
+ wxID_APPLY, wxID_YES, wxID_NO,
+ wxID_STATIC, wxID_FORWARD, wxID_BACKWARD,
+ wxID_DEFAULT, wxID_MORE, wxID_SETUP,
+ wxID_RESET, wxID_HELP_CONTEXT
+are translated into corresponding wxWindows ID constant, XMLID macro is used
+otherwise to generate unique ID. wxWindows control created from named node
+will have name=name and id=XMLID(name) or wxID_XXXX.
+
+
+ 3. Common variables types
+---------------------------
+
+Variables are always of a known type:
+
+bool - boolean value. "1", "true", "t", "on" mean TRUE, anything
+ else (namely "0", "false", "f", "off") means FALSE.
+ FIXME: maybe use only 1/0 ??
+
+integer - integer value, i.e. digits 0-9 plus optional minus sign.
+
+text - anything. Within text node all occurences of $ are replaced
+ by & (used for shortcuts, e.g. "E&xit"), $$ by $, \\, \n, \r,
+ \t as usual in C++.
+
+style - (also called flags) list of flags delimined by any combination
+ of spaces and | characters. Resources parser accepts only
+ _registered_ flags -- i.e. flags that are valid for given
+ node/control. Example:
+ <flag>wxEXPAND | wxTOP|wxBOTTOM</flag>
+
+color - color in HTML format: #rrggbb where rr,gg,bb are hexadecimal
+ values (00-FF) for red, green and blue components in
+ the RGB color model
+
+coord - size or position information. Consists of two integers
+ separated by comma ("x,y"). The values are in pixels
+ unless "d" is attached to the right side of it --
+ in which case the values are interpreted as dialog units.
+ Value of -1 means "use default". Examples:
+ 30,30
+ -1,-1
+ 50,-1
+ 145,56d
+ 67,-1d
+
+
+
+ 4. Layout
+-----------
+
+Most common nodes layout is as follows:
+
+<primary_node name="name" platform="platform">
+ <var_1>...</var_1>
+ .
+ .
+ .
+ <var_n>...</var_n>
+ <children>
+ (n primary nodes)
+ </children>
+</primary_node>
+
+where children node is supported only by panels, dialogs etc. -- see
+nodes description for details.
+
+In the following text,
+
+ TYPE var_name [ (= default_value) ]
+
+means that given primary node may have child node with name var_name
+and content type TYPE. If default value is given, the node is optional
+and default_value will be used if not specified. Otherwise, the node
+is mandatory and must always be present. For example, "color fg" means
+than variable tag fg, e.g. <fg>#rr0000</fg> is expected.
+
+
+
+ 5. Common controls variables
+------------------------------
+
+_All_ nodes that represent wxWindows controls (gauge, panel, dialog,
+textctrl etc.) accept the following properties:
+
+coord pos (= -1,-1) position of the control. Default value
+ equals to wxDefaultPosition
+coord size (= -1,-1) size of the control. Default value equals to
+ wxDefaultSize
+text tooltip window's tooltip
+color bg background color of the control
+color fg foreground/text color of the control
+style style control style flag. Default value is
+ control-dependent (but 0 is common value)
+style exstyle control extended style flag
+bool enabled (= 1) is the control enabled?
+bool hidden (= 0) is the control hidden?
+bool focused (= 0) has the control focus?
+
+
+_Usually_ (but not always, only when it makes sense) controls support text
+variable label which contains displayed text and/or value which contains
+editable text. These are always explicitly mentioned in tag description.
+
+
+
+
+ 6. Tags description
+---------------------
+
+If 'Control' is derived from wxControl, it supports all variables from '5.'
+'Styles' section lists all acceptable flags for style and exstyle variables.
+
+
+ <panel>
+---------
+ Control:
+ wxPanel
+
+ Variables:
+ only common controls variables
+
+ Styles:
+ wxNO_3D, wxTAB_TRAVERSAL, wxWS_EX_VALIDATE_RECURSIVELY
+
+
+
+ <dialog>
+----------
+ Control:
+ wxDialog
+
+ Variables:
+ style style (= wxDEFAULT_DIALOG_style)
+ text title dialog's title
+
+ Styles:
+ wxSTAY_ON_TOP, wxCAPTION, wxDEFAULT_DIALOG_style, wxTHICK_FRAME,
+ wxSYSTEM_MENU, wxRESIZE_BORDER, wxRESIZE_BOX, wxDIALOG_MODAL,
+ wxDIALOG_MODELESS, wxNO_3D, wxTAB_TRAVERSAL,
+ wxWS_EX_VALIDATE_RECURSIVELY
+
+
+
+ <boxsizer>
+--------------
+ Control:
+ wxBoxSizer (not a control)
+
+ Behaviour:
+ boxsizer's parent must be either <panel>, <dialog> or another
+ sizer, nothing else!
+
+ If the sizer does not have parent sizer, the sizer will attach itself
+ to the parent panel/dialog using SetAutoLayout(TRUE) and SetSizer().
+ If the parent panel/dialog has default size (i.e. not specified in
+ the resource), the sizer will fit it using wxSizer::Fit(). If the
+ parent panel/dialog is resizable, size hints will be set
+ automatically.
+
+ Variables:
+ style orient (= wxHORIZONTAL) orientation, either
+ wxHORIZONTAL or wxVERTICAL
+
+ Styles:
+ wxHORIZONTAL, wxVERTICAL (for orient variable)
+
+ wxLEFT, wxRIGHT, wxTOP, wxBOTTOM, wxNORTH, wxSOUTH, wxEAST, wxWEST,
+ wxALL, wxGROW, wxEXPAND, wxSHAPED, wxSTRETCH_NOT, wxALIGN_CENTER,
+ wxALIGN_CENTRE, wxALIGN_LEFT, wxALIGN_TOP, wxALIGN_RIGHT,
+ wxALIGN_BOTTOM, wxALIGN_CENTER_HORIZONTAL, wxALIGN_CENTRE_HORIZONTAL,
+ wxALIGN_CENTER_HORIZONTAL, wxALIGN_CENTRE_HORIZONTAL (for flag
+ variable of <item> or <spacer> child nodes)
+
+ Child nodes:
+ Contains child node <children> which has arbitrary number of
+ <sizeritem> and <spacer> child nodes.
+
+ <sizeritem>
+ -------------
+ Variables:
+ integer option (= 0) relative size of the widget
+ style flag (= 0) style flag
+ integer border (= 0) surrounding border
+
+ Has exactly one child node <window> that contains the control
+ (or child sizer because sizers may be nested)
+ to be inserted into the sizer.
+
+ <spacer>
+ ----------
+ Variables:
+ integer option (= 0) relative size of the widget
+ style flag (= 0) style flag
+ integer border (= 0) surrounding border
+
+ Inserts empty space into the sizer
+
+
+
+ <staticboxsizer>
+------------------
+ Control:
+ wxStaticBoxSizer (not a control)
+
+ Same as <boxsizer> except that it has additional variable:
+
+ text label (= "") label of surrounding static box
+
+ wxStaticBox required by wxStaticBoxSizer is created automatically!
+
+
+
+ <notebooksizer>
+-----------------
+ Control:
+ wxNotebookSizer (not a control)
+
+ Behaviour:
+ notebooksizer's parent must be a sizer (not notebooksizer,
+ see below)!
+
+ Variables:
+ none
+
+ Styles:
+ none
+
+ Child nodes:
+ Has exactly one child node <window> that contains the notebook
+ (nothing else is allowed!) to be inserted into the sizer.
+
+
+
+ <textctrl>
+------------
+ Control:
+ wxTextCtrl
+
+ Variables:
+ text value (= "")default text of the control
+
+ Styles:
+ wxTE_PROCESS_ENTER, wxTE_PROCESS_TAB, wxTE_MULTILINE, wxTE_PASSWORD,
+ wxTE_READONLY, wxHSCROLL
+
+
+
+ <htmlwindow>
+--------------
+ Control:
+ wxHtmlWindow
+
+ Variables:
+ integer borders (= 0) window's borders
+ (see wxHtmlWindow::SetBorders)
+ text url (= "") if present, given page will be loaded
+ text htmlcode (= "") if present, given _text_ will be displayed
+ (you will have to use CDATA section
+ to embed HTML code into XML document)
+
+ Styles:
+ wxHW_SCROLLBAR_NEVER, wxHW_SCROLLBAR_AUTO