Core Library Components for Text-To-Speech: Additional
Utility Functions Library
by Charles L. Chen
December 17, 2007
ver. 4.2
Table of Contents
- Introduction
- Conventions Used In This
Documentation
- List of Functions
Provided
- Detailed Usage
Instructions
- Changes
This library is a collection of functions that would
probably be useful for someone trying to create a screen for a
screen reader within Mozilla Firefox. Installing the
CLC-Utilities extension will give all other extensions within
Firefox the ability to use the JavaScript functions provided in
this library. The CLC-Utilities extension by itself is only a
library and does not add any hotkeys or menus to Firefox. All
functions and global variables used in this library are
preceded with "CLC_" to avoid any potential naming
conflicts.
The code for this library is open source and is licensed
under the terms of the GNU GPL.
While JavaScript is not typed the way C++ and Java are, I
believe it is still helpful to identify the expected type of
the inputs and outputs of the various functions. In order to do
so, I have adopted the documentation convention of
"RETURNTYPE functionname(TYPE_ARG1, TYPE_ARG2, ...)" for
all of the functions presented here.
Example:
A function (non_existant_dummy_add_function) that is expected
to add two integers passed in as arguments to it (X and Y) and
return the result would be presented in the documentation
as:
"int non_existant_dummy_add_function(int_x, int_y)"
An example of using such a function in your JavaScript would
be:
var myfirstnumber = 1;
var mysecondnumber = 2;
var myanswer = non_existant_dummy_add_function(myfirstnumber,
mysecondnumber);
alert(myanswer);
The expected result of the above example would be the number 3
showing up in an alert box.
The following is a list of types that I have used and what
they mean:
- Void - Same as C/C++
- Int - Same as C/C++
- Char - Same as C/C++
- Bool - Same as C/C++
- String - Null terminated char array, same as C/C++
- DOM-Obj - A node object in the Mozilla Firefox DOM that
can be accessed via JavaScript. Note that this object is a
reference to the actual object being displayed in the
Firefox browser. Hence, modifications to the values of such
objects will be reflected in what is shown in the browser.
These objects can be thought of as a C++ class. The easiest
way to answer any questions about these objects (such as
what its data members are and what class functions are
available) is to examine the object using the DOM Inspector
that comes with Firefox. Make sure you set the Object view
in the DOM Inspector to "JavaScript Object" (the default
view is DOM Node).
- Lineage - An array of n DOM-Objs such that the (n-1)
DOM-Obj is the parent of the nth DOM-Obj, the (n-2) DOM-Obj
is the parent of the (n-1) DOM-Obj, and so on. There are
two types of lineages: logical and physical. Unless
otherwise specified, lineage refers to the strict physical
lineage.
- Logical Lineage - A type of lineage where objects have
a logical parent-child relationship which may or may not be
reflected in the physical structure of the DOM. An example
of such a relationship would be between a radio button and
its label. From a logical viewpoint, the label can be
thought of as the parent of the radio button; however,
these two may be separated physically in the HTML
code.
- Physical Lineage - A type of lineage where objects have
a parent-child relationship that is strictly defined by
what is shown in the physical structure of the DOM.
- Browser_Window - The Firefox browser window. So far,
the only time this type crops up is in the return value for
CLC_Window. In that instance, the purpose of the
Browser_Window object is that it behaves the same as
window._content except it refers to the currently focused
window. In almost all cases, you want to act on the
currently focused window rather than on the main window
since that is the "safer" choice. It is safer because if
the page has no frames, the focused window is the main
window; if there are frames, the focused window will be
whichever one the user is trying to read (and the main
window will usually be blank, which means that if you try
to act on the main window, you won't get anywhere because
there is nothing there to act on).
The term "Atomic Object" as I have used it in this document
means a DOM-Obj that cannot be further subdivided. In other
words, it is a DOM-Obj that has no child nodes or where the
child nodes must not be treated individually (as in the case of
MathML nodes where the children of the main "math" element must
be considered in the context of the main "math" element and Select nodes where the Option elements under it only make sense in the context of being a choice in the Select box).
- bool CLC_AcontainsB(DOM-Obj_A, DOM-Obj_B)
If "DOM-Obj_A" contains "DOM-Obj_B," this function will
return true; else it returns false.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- CLC_AllDOMObjWithAttribute(DOM-Obj_A,
DOM-Obj_B)
Returns a DOM-ObjArray that contains all the elements
under DOM-Obj_Root that have String_Attrib as an
attribute.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- CLC_BlurAll(DOM-Obj_Target)
Blurs DOM-Obj_Target and all of its ancestors.
More information can be
found in the detailed usage instructions for functions in
"clc_cursor.js."
- int CLC_CompareLineages(Lineage_A,
Lineage_B)
Returns the index value of Lineage_B at which Lineage_B
first diverges from Lineage_A. If they are identical, this
function returns -1. If one is longer than the other and
they are identical up to that point, the returned index
will be the index in B for the first DOM-Obj that it has
which A does not have if B is the longer one; or it will be
the length of B if B is the shorter one.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- void CLC_ConfigHighlight(String_BgColor,
String_FontColor, String_FontWeight,
String_FontSize)
Sets the highlighting style. If you do not wish one of the
highlights to be enabled, set it to a null string.
More information can be
found in the detailed usage instructions for functions in
"clc_highlight.js."
- string CLC_Content_FindLanguage(DOM-Obj_Target)
Finds the language of the target DOM Object. Returns null if the language cannot be determined.
More information can be
found in the detailed usage instructions for functions in
"clc_content_main.js."
- int CLC_FindCharacter(String_Text,
Char_Target)
Searches the "String_Text" for the "Char_Target" and
returns the index position of "Char_Target". If
"Char_Target" cannot be found, it returns -1.
More information can be
found in the detailed usage instructions for functions in
"clc_text.js."
- DOM-Obj CLC_FindFocusable(DOM-Obj_Target)
Returns the most logical, focusable element associated
with "DOM-Obj_Target." The most logical, focusable element
is usually the closest HTML element in the
"DOM-Obj_Target's" lineage with the focus() method.
However, if the lineage contains a link, that link will
take priority as the most logical, focusable element in
order to make the link usable by keyboard. Returns 0 if no
focusable element can be found.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj
CLC_FindHighlightable(DOM-Obj_Target)
Returns the closest HTML element in the "DOM-Obj_Target's"
lineage that can be highlighted with CLC_Highlight.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- int
CLC_FindLiTrueCount(DOM-Obj_UlorOlElement)
Returns the number of LI elements that are directly inside
a UL or OL element. LI elements found in sublists within
the main list are not included in this count.
- DOM-Obj CLC_FindScrollable(DOM-Obj_Target)
Returns the closest HTML element in the "DOM-Obj_Target's"
lineage that can be scrolled to using the
defaultView.scrollTo function in Firefox.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- int CLC_FindSentenceArrayIndexOfCursorPos(StringArray_Sentences)
Returns the index of the sentence that the cursor is on, or -1 if it cannot be found.
More information can be
found in the detailed usage instructions for functions in
"clc_cursor.js."
- string
CLC_GenerateDetailedInfo(DOM-Obj_Target)
Generates an appropriate text string for the
"DOM-Obj_Target" that is suitable for use in providing
further information to the user when specifically
requested. Returns a null string if there is no further
information that is appropriate for "DOM-Obj_Target."
More information can be
found in the detailed usage instructions for functions in
"clc_id_main.js."
- string CLC_GenerateIDInfo(DOM-Obj_Target)
Generates an appropriate text string for the
"DOM-Obj_Target" that is suitable for use in identifying it
when it is read by the screen reader. Returns a null string
if there is no idenfication that is appropriate for
"DOM-Obj_Target."
More information can be
found in the detailed usage instructions for functions in
"clc_id_main.js."
- DOM-ObjArray CLC_GetAssociatedDescriptions(DOM-Obj_Target)
Returns an array of DOM-Objects which are descriptions for the specified target DOM object according to the WAI-ARIA "describedby" property.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-ObjArray CLC_GetAssociatedLabels(DOM-Obj_Target)
Returns an array of DOM-Objects which are labels for the specified target DOM object according to the WAI-ARIA "labelledby" property. Note that this not get HTML label elements.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj CLC_GetAtomicObjectAtCursor()
Returns the atomic DOM-Obj that is at the current location
of the cursor.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj CLC_GetClosestAncestorThatIs(DOM-Obj_Target, String_TagName)
Returns the ancestor that has the specified tagname and is the closest to the specified target DOM object. If the object itself has this attribute, then the closest ancestor would be itself. If the tagname doesn't exist at all in the entire lineage, this function will return null.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj CLC_GetClosestAncestorWithAttribute(DOM-Obj_Target, String_AttributeName, String_AttributeValue)
Returns the ancestor that has the specified attribute with the specified attribute value and is the closest to the specified target DOM object. If the object itself has this attribute with this value, then the closest ancestor would be itself. If the tagname doesn't exist at all in the entire lineage, this function will return null.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- string CLC_GetClosestAttributeOf(DOM-Obj_Target, String_Attribute)
Returns the value of the specified attribute that is closest to the specified DOM object. If the object itself has this attribute, then the closest value would be the value of the attribute on the object itself. Otherwise, it is the value of the attribute at the object's closest parent. If the attribute doesn't exist at all in the entire lineage, this function will return null.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- string CLC_GetClosestNSAttributeOf(DOM-Obj_Target, String_NameSpace, String_Attribute)
Returns the value of the specified attribute which is under the specified namespace that is closest to the specified DOM object. If the object itself has this attribute, then the closest value would be the value of the attribute on the object itself. Otherwise, it is the value of the attribute at the object's closest parent. If the attribute doesn't exist at all in the entire lineage, this function will return null.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-ObjArray CLC_GetDescendentNodesWithAttribute(DOM-Obj_Target, String_AttributeName, String_AttributeValue)
Returns an array of DOM-Objects which have the specified attribute with the specified value and which are the descendents of the specified target DOM object.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- stringArray CLC_GetDiffsByLine(prev_string, current_string, mode)
Returns a string array of the diffs between the prev_string and current_string, compared by line. mode = 0 to check for additions, and mode = 1 to check for deletions.
More information can be
found in the detailed usage instructions for functions in
"clc_diff.js."
- associativeArray CLC_GetEventCountsAssociativeArray()
Returns an associative array that indicates how many events of each politeness are in the queue.
More information can be
found in the detailed usage instructions for functions in
"clc_mutation.js."
- DOM-Obj
CLC_GetFirstAtomicObject(DOM-Obj_Target)
Returns the first atomic object found within
"DOM-Obj_Target."
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj
CLC_GetLastAtomicObject(DOM-Obj_Target)
Returns the last atomic object found within
"DOM-Obj_Target."
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- lineage CLC_GetLineage(DOM-Obj_Target)
Returns the lineage of "DOM-Obj_Target."
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- lineage
CLC_GetLogicalLineage(DOM-Obj_Target)
Returns the logical lineage of "DOM-Obj_Target."
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- String
CLC_GetMathMLContent(MathML-Obj_Target)
Returns the string that represents the MathML-Obj_Target.
The generated string is based on the mathspeak method
developed by Dr. Nemeth.
Note that this function is still very early in
development. As a result, only this function's own
interface is frozen; the interfaces for the subfunctions
that handle MathML (particularly the lookup functions that
handle symbol to text translation) are not frozen and can
be changed at any time.
- DOMMutationEvent CLC_GetMutationEvent()
Returns the oldest DOMMutationEvent in the queue and removes it from the queue.
More information can be
found in the detailed usage instructions for functions in
"clc_mutation.js."
- DOMMutationNotification CLC_GetMutationNotification()
Returns the oldest DOMMutationNotification in the queue and removes it from the queue.
More information can be
found in the detailed usage instructions for functions in
"clc_mutation.js."
- DOM-Obj
CLC_GetNextAtomicObject(DOM-Obj_CurrentAtomicObj)
Returns the atomic object after
"DOM-Obj_CurrentAtomicObj." The atomic object that it
returns does not have to be in the same DOM-Obj that
"DOM-Obj_CurrentAtomicObj" is in.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj
CLC_GetNextAtomicTextObject(DOM-Obj_CurrentAtomicObj)
Returns the atomic object which has text and comes after
"DOM-Obj_CurrentAtomicObj." The atomic object that it
returns does not have to be in the same DOM-Obj that
"DOM-Obj_CurrentAtomicObj" is in.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj
CLC_GetPrevAtomicObject(DOM-Obj_CurrentAtomicObj)
Returns the atomic object before
"DOM-Obj_CurrentAtomicObj." The atomic object that it
returns does not have to be in the same DOM-Obj that
"DOM-Obj_CurrentAtomicObj" is in.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- DOM-Obj
CLC_GetPrevAtomicTextObject(DOM-Obj_CurrentAtomicObj)
Returns the atomic object which has text and comes before
"DOM-Obj_CurrentAtomicObj." The atomic object that it
returns does not have to be in the same DOM-Obj that
"DOM-Obj_CurrentAtomicObj" is in.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- string CLC_GetSelectedText()
Returns the string of text that has been selected by the
user.
More information can be
found in the detailed usage instructions for functions in
"clc_text.js."
- string CLC_GetTextContent(DOM-Obj_AtomicObj)
Returns the string of text content that is associated with
the DOM-Obj_AtomicObj.
More information can be
found in the detailed usage instructions for functions in
"clc_content_main.js."
- string CLC_GetStatus(DOM-Obj_AtomicObj)
Returns the string of text that is the status information
of the DOM-Obj_AtomicObj.
More information can be
found in the detailed usage instructions for functions in
"clc_status_main.js"
- bool CLC_HasText(DOM-Obj_Target)
Returns true if "DOM-Obj_Target" contains speakable
text.
More information can be
found in the detailed usage instructions for functions in
"clc_text.js."
- void CLC_Highlight(DOM-Obj_Target)
Highlights "DOM-Obj_Target" using the current highlighting
style.
More information can be
found in the detailed usage instructions for functions in
"clc_highlight.js."
- void CLC_InitMutationEventsSystem(DOMObj_targ, optionsArray)
Sets the mutation event system to watch for events on the DOMObj_targ, using the options set in optionsArray.
More information can be
found in the detailed usage instructions for functions in
"clc_mutation.js."
- bool CLC_IsSpeakableChar(Char_Target)
Returns true if "Char_Target" is a speakable character;
false if it is not speakable.
More information can be
found in the detailed usage instructions for functions in
"clc_text.js."
- bool CLC_IsSpeakableString(String_Target)
Returns true if "String_Target" contains at least one
speakable character; false if it does not.
More information can be
found in the detailed usage instructions for functions in
"clc_text.js."
- int CLC_Li_FindNum(DOM-Obj_LiElement)
Finds the number of the LI element in the list that it is
a part of. It returns 0 if the LI element is not in a list.
If it is in an ordered list, it returns the position of the
LI element in the list. If it is in an unnumbered list, it
returns the the negative of the position of the LI element
in the list. A -3 would indicate that "DOM-Obj_LiElement"
was the 3rd bullet in an unnumbered list.
- DOM-Obj CLC_Li_IsInList(DOM-Obj_LiElement)
Returns the DOM-Obj list element (may be either OL or UL)
that the LI element is directly inside of.
- string-array CLC_MakeSegments(string)
Returns an array of strings which are the "segments" of the input string. "Segments" are sentences in the majority of cases, but for a few of the trickier cases, they lean towards the side of undersplitting sentences (taking two sentences in a segment) rather than oversplitting (incorrectly splitting apart a single sentence).
- DOMMutationEvent CLC_PeekMutationEvent()
Returns the oldest DOMMutationEvent in the queue and removes it from the queue.
More information can be
found in the detailed usage instructions for functions in
"clc_mutation.js."
- DOMMutationNotification CLC_PeekMutationNotification()
Returns the oldest DOMMutationNotification in the queue and removes it from the queue.
More information can be
found in the detailed usage instructions for functions in
"clc_mutation.js."
- bool
CLC_ProbablyDataTable(DOM-Obj_TableElement)
Returns true if the "DOM-Obj_TableElement" is believed to
be a data table; false if it is believed to be a layout
table. Note that this is only a best guess; this function
cannot conclusively determine the intent of the webpage
author.
- void CLC_SelectSentence(DOM-Obj_Target, StringArray_Sentences, Int_SentencesArrayIndex)
This will select the sentence found in targ_DOMobj which is targ_sentenceArray[targ_sentenceArrayIndex].
More information can be
found in the detailed usage instructions for functions in
"clc_cursor.js."
- bool CLC_StringIsAllNumber(String_Target)
Returns true if the "String_Target" is numeric; else,
false.
More information can be
found in the detailed usage instructions for functions in
"clc_text.js."
- bool CLC_TagInLineage(Lineage_Target,
String_Tag)
Checks "Lineage_Target" to see if any of the objects in it
has "String_Tag" for its localName. Returns true if there
is at least one; else false.
More information can be
found in the detailed usage instructions for functions in
"clc_fetch.js."
- void CLC_Unhighlight()
Unhighlights the last DOM-Obj that was highlighted.
More information can be
found in the detailed usage instructions for functions in
"clc_highlight.js."
- Browser_Window CLC_Window()
Returns the currently focused Firefox window. This should
be used instead of window._content for most cases since
window._content always refers to the entire Firefox window
whereas this function will return only the window that is
focused. If a page has frames, the focused window is
actually a subwindow of the main window - this means that
window._content will not be able to access the active,
focused frame. However, CLC_Window() will pick it up
correctly. An example of using this function would be to
use "CLC_Window().document.body.getElementsByTagName("H1")"
instead of
"window._content.document.body.getElementsByTagName("H1")."
In this preceding example, the first statement would
retrieve all the H1 elements on the focused window and will
thus work for both framed and unframed pages. However, the
second statement would only work on pages without frames;
on a framed page, it is likely to find nothing.
More information can be
found in the detailed usage instructions for functions in
"clc_window.js."
The detailed usage instructions are still
being written. They will be available soon.
- Functions inside
clc_content_main.js: CLC_GetTextContent,
CLC_Content_FindLabelText,
CLC_Content_FindRadioButtonDirectContent,
CLC_Content_FindTextBlankDirectContent,
CLC_Content_FindCheckboxDirectContent
- Functions inside
clc_cursor.js: CLC_CaretModeOn, CLC_MoveCaret,
CLC_BlurAll
- Functions inside
clc_diff.js: CLC_GetDiffsByLine
- Functions inside
clc_fetch.js: CLC_AcontainsB,
CLC_AllDOMObjWithAttribute, CLC_CompareLineages,
CLC_FindFocusable, CLC_FindHighlightable,
CLC_FindScrollable, CLC_GetAtomicObjectAtCursor,
CLC_GetFirstAtomicObject, CLC_GetLastAtomicObject,
CLC_GetLineage, CLC_GetLogicalLineage,
CLC_GetNextAtomicObject, CLC_GetNextAtomicTextObject,
CLC_GetPrevAtomicObject, CLC_GetPrevAtomicTextObject,
CLC_TagInLineage
- Functions inside
clc_highlight.js: CLC_ConfigHighlight, CLC_Highlight,
CLC_Unhighlight
- Functions inside
clc_id_main.js: CLC_GenerateIDInfo,
CLC_GenerateDetailedInfo
- Functions inside
clc_mutation.js: CLC_InitMutationEventsSystem,
CLC_GetEventCountsAssociativeArray, CLC_GetMutationEvent, CLC_PeekMutationEvent
- Functions inside
clc_status_main.js: CLC_GetStatus,
CLC_Status_RadioButton, CLC_Status_TextBlank,
CLC_Status_PasswordBlank, CLC_Status_CheckBox
- Functions inside
clc_text.js: CLC_FindCharacter, CLC_GetSelectedText,
CLC_IsSpeakableChar, CLC_HasText
- Functions inside
clc_window.js: CLC_Window
- 1.0 - Initial release
- 1.1 - Experimental build. Not released because
interfaces were not frozen yet.
- 1.2 - Added several new functions which were not
previously available.
- 1.3 - Added several new functions which were not
previously available.
- 1.4 - Added support for TH elements. Fixed a problem
with the info2 function for blockquotes.
- 1.5 - Experimental build for handling input elements.
Not released because interfaces were not frozen.
- 1.6 - Input element handling added. Created the new
abstractions of a Logical Lineage and Physical Lineage from
the previous notion of Lineage (which was only
physical).
- 1.7 - Input element handling improved. Added support
for password fields and for preventing hidden inputs from
being treated as content.
- 1.8 - Form handling improved. Added support for text
areas, check boxes, submit buttons, and reset buttons.
- 1.9 - Bug fixes for the label handling - corrected
several instances of the label being skipped. Minor change
to the overlay file to cause this library to be loaded for
the commonDialog.xul (needed in order to make these
functions available for things like JavaScript
alerts).
- 2.0 - Added basic support for MathML. (Handles the
simpler types of MathML elements like msub and msup and
mfrac.)
- 2.1 - Greatly improved support for MathML. (Handles
several more types of complex MathML elements such as
msubsup and munderover.)
- 2.2 - Support for frames added. New function for
retrieving all DOM-Objs given a specific attribute.
- 2.3 - No new functions added, only changed the max
version to make it Deer Park compatible.
- 2.4 - CLC_BlurAll added.
- 2.5 - Changed CLC_GetTextContent and CLC_HasText to
look for alt text in alt attribute since Firefox 1.5 no
longer puts alt text as text content in the DOM.
- 2.6 - Version bump to maintain compatibility with
Firefox 1.5.0.1.
- 2.7 - Added CSS parsing functions. Since these are
supposed to be replaced with the official getPropertyValue
function from Mozilla once they start supporting CSS speech
properties and I will remove them immediately when this
happens, I do not have them documented here as I do not
wish for them to be used as part of the library. If you
have a burning desire to use them, then you can dig around
and call them, but you do so at your own risk and I would
strongly advise you against it.
- 2.8 - Added getting the title attribute to the
additional information functions for links and for images
under clc_id_subfunc_2.js.
- 2.9 - Defined Select elements as atomic since Option elements only make sense in the context of being the choices for their Select element parent.
- 3.0 - CLC_MakeSegments added.
- 3.1 - CLC_SelectSentence and CLC_FindSentenceArrayIndexOfCursorPos added.
- 3.2 - CLC_Content_FindLanguage and CLC_GetClosestAttributeOf added.
- 3.3 - Version bump for compatibility with Firefox 2.0. French translations (given as a no-strings-attached gift from Aurelien Levy) of the element identification messages added.
- 3.4 - Rewrite of the CSS parsing code; this yields a very visible speed improvement on pages with larger CSS files (greater than 100k).
- 3.5 - Added support for tagged AJAX live regions.
- 3.6 - Better support for tagged AJAX live regions. Stability improvements to cursor handling. Added CLC_GetDiffsByLine, a line diffing function.
- 3.7 - Bug fixes for handling AJAX live regions.
- 3.8 - Several functions added to fetch.js.
- 3.9 - Added channels (DOMMutationEvent for "main" channel vs DOMMutationNotification for "notify" channel). Rewrite of the table handling code; cells with headers and IDs are handled much better now.
- 4.0 - Added functions for processing ARIA widgets inside the ID functions.
- 4.1 - Added more functions for processing ARIA widgets.
- 4.2 - Added language #3 - Brief Mode for English.