[orca] Update docs to work with xsltproc on OpenSolaris (a command example is in README)
- From: William Walker <wwalker src gnome org>
- To: svn-commits-list gnome org
- Subject: [orca] Update docs to work with xsltproc on OpenSolaris (a command example is in README)
- Date: Fri, 17 Apr 2009 21:11:59 -0400 (EDT)
commit ea9bc9c20704d56ea6a00094b5bb91dfb43643ee
Author: Willie Walker <william walker sun com>
Date: Fri Apr 17 21:09:29 2009 -0400
Update docs to work with xsltproc on OpenSolaris (a command example is in README)
---
docs/doc-set/README | 4 +
docs/doc-set/architecture.sgml | 2 +-
docs/doc-set/internals.html | 3275 ++++++----------------------------------
docs/doc-set/internals.sgml | 2 +-
docs/doc-set/script_guide.sgml | 6 +-
docs/doc-set/user_guide.html | 428 +-----
docs/doc-set/user_guide.sgml | 2 +-
7 files changed, 482 insertions(+), 3237 deletions(-)
diff --git a/docs/doc-set/README b/docs/doc-set/README
index b2a91bd..944518c 100644
--- a/docs/doc-set/README
+++ b/docs/doc-set/README
@@ -12,3 +12,7 @@ To generate the HTML docs:
The HTML will be generated in a subdirectory. You need to copy
it to the current directory or the image links will not work.
+
+On OpenSolaris:
+
+xsltproc --nonet -xinclude -o internals.html /usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/docbook.xsl internals.sgml
diff --git a/docs/doc-set/architecture.sgml b/docs/doc-set/architecture.sgml
index 68606c8..8ddfbc4 100644
--- a/docs/doc-set/architecture.sgml
+++ b/docs/doc-set/architecture.sgml
@@ -58,7 +58,7 @@
the components is depicted.</title>
<mediaobject>
<imageobject>
- <imagedata fileref="architecture.jpg" format="JPEG">
+ <imagedata fileref="architecture.jpg" format="JPEG"/>
</imageobject>
<textobject>
<phrase>High Level Orca Architecture</phrase>
diff --git a/docs/doc-set/internals.html b/docs/doc-set/internals.html
index 074c1c9..7f308d8 100644
--- a/docs/doc-set/internals.html
+++ b/docs/doc-set/internals.html
@@ -1,415 +1,40 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
-<HTML
-><HEAD
-><TITLE
->Orca Technical Reference</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD
-><BODY
-CLASS="BOOK"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="BOOK"
-><A
-NAME="AEN1"
-></A
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN1"
->Orca Technical Reference</A
-></H1
-><DIV
-CLASS="LEGALNOTICE"
-><P
-></P
-><A
-NAME="AEN4"
-></A
-><P
->Copyright 2005-2008, Sun Microsystems, Inc.</P
-><P
-></P
-></DIV
-><HR></DIV
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="#ARCHFORWARD"
->Foreword</A
-></DT
-><DT
->1. <A
-HREF="#PREREQ"
->Prerequisites</A
-></DT
-><DD
-><DL
-><DT
->1.1. <A
-HREF="#PREREQGNOME"
->GNOME 2.22 or better</A
-></DT
-><DT
->1.2. <A
-HREF="#PREREQPYTHON"
->Python v2.4 or better</A
-></DT
-><DT
->1.3. <A
-HREF="#PREREQBRLTTY"
->BrlTTY v3.7.2 or better</A
-></DT
-><DT
->1.4. <A
-HREF="#PREREQKEYBOARDNAV"
->Keyboard Navigation</A
-></DT
-></DL
-></DD
-><DT
->2. <A
-HREF="#ARCHITECTURE"
->Architecture</A
-></DT
-><DD
-><DL
-><DT
->2.1. <A
-HREF="#ARCHDESKTOP"
->Desktop and AT-SPI</A
-></DT
-><DT
->2.2. <A
-HREF="#ARCHORCA"
->Orca Module</A
-></DT
-><DD
-><DL
-><DT
->2.2.1. <A
-HREF="#ARCHSETTINGS"
->settings</A
-></DT
-></DL
-></DD
-><DT
->2.3. <A
-HREF="#SCRIPT"
->Orca Scripts</A
-></DT
-><DT
->2.4. <A
-HREF="#ARCHSYSTEMSERVICES"
->System Services</A
-></DT
-><DD
-><DL
-><DT
->2.4.1. <A
-HREF="#ARCHSPEECH"
->speech</A
-></DT
-><DT
->2.4.2. <A
-HREF="#ARCHBRAILLE"
->braille</A
-></DT
-><DT
->2.4.3. <A
-HREF="#ARCHMAG"
->mag</A
-></DT
-></DL
-></DD
-></DL
-></DD
-><DT
->3. <A
-HREF="#SCRIPTGUIDE"
->Introduction to Scripting</A
-></DT
-><DD
-><DL
-><DT
->3.1. <A
-HREF="#SGCONTRACT"
->Script Contract</A
-></DT
-><DT
->3.2. <A
-HREF="#SGLIFECYCLE"
->Script Life Cycle</A
-></DT
-></DL
-></DD
-><DT
->4. <A
-HREF="#CUSTOMIZATION"
->Customized Behavior</A
-></DT
-><DD
-><DL
-><DT
->4.1. <A
-HREF="#SGEVENTLISTENERS"
->Defining Event Listeners</A
-></DT
-><DT
->4.2. <A
-HREF="#SGINPUTEVENTHANDLERS"
->Input Event Handlers</A
-></DT
-><DT
->4.3. <A
-HREF="#SGKEYBINDINGS"
->Defining Keyboard Bindings</A
-></DT
-><DT
->4.4. <A
-HREF="#SGBRAILLEBINDINGS"
->Defining Braille Bindings</A
-></DT
-></DL
-></DD
-><DT
->5. <A
-HREF="#SGUTILITIES"
->Script Utilities</A
-></DT
-><DD
-><DL
-><DT
->5.1. <A
-HREF="#DEBUG"
->Debug Utilities</A
-></DT
-><DT
->5.2. <A
-HREF="#SGTTS"
->Speech Synthesis</A
-></DT
-><DD
-><DL
-><DT
->5.2.1. <A
-HREF="#SGSPEECHPY"
-><TT
-CLASS="LITERAL"
->speech.py</TT
-></A
-></DT
-><DT
->5.2.2. <A
-HREF="#SGSGPY"
-><TT
-CLASS="LITERAL"
->speechgenerator.py</TT
-></A
-></DT
-></DL
-></DD
-><DT
->5.3. <A
-HREF="#SGBRAILLEOUTPUT"
->Braille Output</A
-></DT
-><DD
-><DL
-><DT
->5.3.1. <A
-HREF="#SGBRAILLEPY"
-><TT
-CLASS="LITERAL"
->braille.py</TT
-></A
-></DT
-><DT
->5.3.2. <A
-HREF="#SGBGPY"
-><TT
-CLASS="LITERAL"
->braillegenerator.py</TT
-></A
-></DT
-></DL
-></DD
-></DL
-></DD
-><DT
->6. <A
-HREF="#I18N"
->Internationalization (I18N) Support</A
-></DT
-><DT
-><A
-HREF="#ARCHBIBLIOGRAPHY"
->Bibliography</A
-></DT
-></DL
-></DIV
-><DIV
-CLASS="LOT"
-><DL
-CLASS="LOT"
-><DT
-><B
->List of Figures</B
-></DT
-><DT
->2-1. <A
-HREF="#AEN36"
->High Level Orca Architecture. The main components of Orca
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Orca Technical Reference</title><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2488862"></a>Orca Technical Reference</h1></div><div><div class="legalnotice"><a name="id2489718"></a><p>Copyright 2005-2008, Sun Microsystems, Inc.</p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#archforward">Foreword</a></span></dt><dt><span class="chapter"><a href="#prereq">1. Prerequisites</a></span></dt><dd><dl><dt><span class="section"><a href="#prereqgnome">GNOME 2.22 or better</a></span></dt><dt><span class="section"><a href="#prereqpython">Python v2.4 or better</a></span></dt><dt><span class="section"><a href="#prereqbrltty">BrlTTY v3.7
.2 or better</a></span></dt><dt><span class="section"><a href="#prereqkeyboardnav">Keyboard Navigation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#architecture">2. Architecture</a></span></dt><dd><dl><dt><span class="section"><a href="#archdesktop">Desktop and AT-SPI</a></span></dt><dt><span class="section"><a href="#archorca">Orca Module</a></span></dt><dd><dl><dt><span class="section"><a href="#archsettings">settings</a></span></dt></dl></dd><dt><span class="section"><a href="#script">Orca Scripts</a></span></dt><dt><span class="section"><a href="#archsystemservices">System Services</a></span></dt><dd><dl><dt><span class="section"><a href="#archspeech">speech</a></span></dt><dt><span class="section"><a href="#archbraille">braille</a></span></dt><dt><span class="section"><a href="#archmag">mag</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#scriptguide">3. Introduction to Scripting</a></span></dt><dd><dl><dt><span class="section"><a h
ref="#sgcontract">Script Contract</a></span></dt><dt><span class="section"><a href="#sglifecycle">Script Life Cycle</a></span></dt></dl></dd><dt><span class="chapter"><a href="#customization">4. Customized Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="#sgeventlisteners">Defining Event Listeners</a></span></dt><dt><span class="section"><a href="#sginputeventhandlers">Input Event Handlers</a></span></dt><dt><span class="section"><a href="#sgkeybindings">Defining Keyboard Bindings</a></span></dt><dt><span class="section"><a href="#sgbraillebindings">Defining Braille Bindings</a></span></dt></dl></dd><dt><span class="chapter"><a href="#sgutilities">5. Script Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="#debug">Debug Utilities</a></span></dt><dt><span class="section"><a href="#sgtts">Speech Synthesis</a></span></dt><dd><dl><dt><span class="section"><a href="#sgspeechpy"><code class="literal">speech.py</code></a></span></dt><dt><span cla
ss="section"><a href="#sgsgpy"><code class="literal">speechgenerator.py</code></a></span></dt></dl></dd><dt><span class="section"><a href="#sgbrailleoutput">Braille Output</a></span></dt><dd><dl><dt><span class="section"><a href="#sgbraillepy"><code class="literal">braille.py</code></a></span></dt><dt><span class="section"><a href="#sgbgpy"><code class="literal">braillegenerator.py</code></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#i18n">6. Internationalization (I18N) Support</a></span></dt><dt><span class="bibliography"><a href="#archbibliography">Bibliography</a></span></dt></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>2.1. <a href="#id2489635">High Level Orca Architecture. The main components of Orca
are as follows: desktop applications that support the AT-SPI,
the AT-SPI registry and infrastructure, Orca itself, Orca
Scripts, and system services. The key communication between
- the components is depicted.</A
-></DT
-><DT
->4-1. <A
-HREF="#AEN335"
->Orca Script Diagram</A
-></DT
-></DL
-></DIV
-><DIV
-CLASS="PREFACE"
-><HR><H1
-><A
-NAME="ARCHFORWARD"
-></A
->Foreword</H1
-><P
->Orca is a flexible, extensible, and powerful assistive
+ the components is depicted.</a></dt><dt>4.1. <a href="#id2493464">Orca Script Diagram</a></dt></dl></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="archforward"></a>Foreword</h2></div></div></div><p>Orca is a flexible, extensible, and powerful assistive
technology that provides end-user access to applications and
toolkits that support the AT-SPI (e.g., the GNOME desktop). With
early input from and continued engagement with its end users, Orca
has been designed and implemented by the Sun Microsystems, Inc.,
- Accessibility Program Office.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> Orca is currently a work in progress. As a result, this
+ Accessibility Program Office.</p><p><span class="emphasis"><em>NOTE:</em></span> Orca is currently a work in progress. As a result, this
and other books in the Orca Documentation Series are under
continuous modification and are also in various states of
- completeness.</P
-><P
->This book covers the overall architecture of Orca, including
+ completeness.</p><p>This book covers the overall architecture of Orca, including
a portion on writing custom scripts. The bulk of the user
information and user experience design can be found on the Orca
- WIKI at http://live.gnome.org/Orca.</P
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="PREREQ"
-></A
->Chapter 1. Prerequisites</H1
-><P
->To help narrow the scope of the Orca development activity,
+ WIKI at http://live.gnome.org/Orca.</p></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="prereq"></a>Chapter 1. Prerequisites</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#prereqgnome">GNOME 2.22 or better</a></span></dt><dt><span class="section"><a href="#prereqpython">Python v2.4 or better</a></span></dt><dt><span class="section"><a href="#prereqbrltty">BrlTTY v3.7.2 or better</a></span></dt><dt><span class="section"><a href="#prereqkeyboardnav">Keyboard Navigation</a></span></dt></dl></div><p>To help narrow the scope of the Orca development activity,
Orca uses existing software where available. For example, as
mentioned in the requirements, Orca is a screen reader that
needs to be able to interact with speech synthesis, braille,
and screen magnification services, but it need not be the
provider of such services. Given this, Orca has the following
- dependencies:</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="PREREQGNOME"
->1.1. GNOME 2.22 or better</A
-></H2
-><P
->The GNOME 2.22 desktop contains a number of bug fixes and
+ dependencies:</p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="prereqgnome"></a>GNOME 2.22 or better</h2></div></div></div><p>The GNOME 2.22 desktop contains a number of bug fixes and
enhancements to the accessibility infrastructure. These are
needed for Orca to run properly. GNOME 2.22 also packages a
variety of other dependencies of Orca, including gnome-speech,
- gnome-mag, pyatspi, etc.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="PREREQPYTHON"
->1.2. Python v2.4 or better</A
-></H2
-><P
->Orca is written in the Python programming language and
+ gnome-mag, pyatspi, etc.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="prereqpython"></a>Python v2.4 or better</h2></div></div></div><p>Orca is written in the Python programming language and
depends upon features found in Python versions 2.4 and
- greater.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="PREREQBRLTTY"
->1.3. BrlTTY v3.7.2 or better</A
-></H2
-><P
->BrlTTY [<SPAN
-CLASS="CITATION"
-><A
-HREF="#BRLTTY"
-><I
->BRLTTY</I
-></A
->></SPAN
->] provides access to a
+ greater.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="prereqbrltty"></a>BrlTTY v3.7.2 or better</h2></div></div></div><p>BrlTTY [<span class="citation"><a href="#brltty">BRLTTY</a></span>] provides access to a
variety of Braille displays, and consists of a library and a
daemon to provide programmatic interaction with the
- display.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="PREREQKEYBOARDNAV"
->1.4. Keyboard Navigation</A
-></H2
-><P
->As much as possible, Orca relies upon the keyboard
+ display.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="prereqkeyboardnav"></a>Keyboard Navigation</h2></div></div></div><p>As much as possible, Orca relies upon the keyboard
navigation methods built in to the native platform. For
example, it is expected that the native platform will provide
access via traditional methods such as the "tab" key, keyboard
- mnemonics, and keyboard accelerators.</P
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="ARCHITECTURE"
-></A
->Chapter 2. Architecture</H1
-><P
->The Orca architecture has been driven primarily by the Orca
+ mnemonics, and keyboard accelerators.</p></div></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="architecture"></a>Chapter 2. Architecture</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#archdesktop">Desktop and AT-SPI</a></span></dt><dt><span class="section"><a href="#archorca">Orca Module</a></span></dt><dd><dl><dt><span class="section"><a href="#archsettings">settings</a></span></dt></dl></dd><dt><span class="section"><a href="#script">Orca Scripts</a></span></dt><dt><span class="section"><a href="#archsystemservices">System Services</a></span></dt><dd><dl><dt><span class="section"><a href="#archspeech">speech</a></span></dt><dt><span class="section"><a href="#archbraille">braille</a></span></dt><dt><span class="section"><a href="#archmag">mag</a></span></dt></dl></dd></dl></div><p>The Orca architecture has been driven primarily by the Orca
User Experience Design. There are two primary operating modes
- of Orca: a focus tracking mode and a flat review mode.</P
-><P
->The focus tracking mode generally relies upon applications
+ of Orca: a focus tracking mode and a flat review mode.</p><p>The focus tracking mode generally relies upon applications
to provide reasonable keyboard navigation techniques to allow
the user to operate the application without requiring the mouse.
As the user uses traditional keyboard navigation techniques to
@@ -420,15 +45,11 @@ NAME="ARCHITECTURE"
the cases where more complex navigation is needed, such as
structural navigation of complex text documents, Orca also
provides a facility to define keyboard and braille input events
- that it can intercept and handle appropriately.</P
-><P
->The flat review mode provides the user with the ability to
+ that it can intercept and handle appropriately.</p><p>The flat review mode provides the user with the ability to
spatially navigate a window, giving them the ability to explore
as well as discover and interact with components in the window.
Orca provides a default set of keybindings for flat review, and
- these keybindings can be easily redefined by the user.</P
-><P
->The various modes of Orca are handled by "scripts," which
+ these keybindings can be easily redefined by the user.</p><p>The various modes of Orca are handled by "scripts," which
are Python modules that can provide a custom interpretation of
an application's interaction model. It is not intended that
there will be a unique script for every application. Instead,
@@ -437,81 +58,25 @@ NAME="ARCHITECTURE"
compelling or custom behavior is desired for an application,
however, one can use a custom script for the application.
Furthermore, scripts can subclass other scripts, allowing
- them to be quite simple.</P
-><P
->As illustrated in the high level Orca architecture diagram,
+ them to be quite simple.</p><p>As illustrated in the high level Orca architecture diagram,
the main components of Orca are as follows: desktop applications
that support the AT-SPI, the AT-SPI registry and infrastructure,
Orca itself, Orca Scripts, and system services (e.g., speech,
- braille, magnification).</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="AEN36"
-></A
-><P
-><B
->Figure 2-1. High Level Orca Architecture. The main components of Orca
+ braille, magnification).</p><div class="figure"><a name="id2489635"></a><p class="title"><b>Figure 2.1. High Level Orca Architecture. The main components of Orca
are as follows: desktop applications that support the AT-SPI,
the AT-SPI registry and infrastructure, Orca itself, Orca
Scripts, and system services. The key communication between
- the components is depicted.</B
-></P
-><DIV
-CLASS="MEDIAOBJECT"
-><P
-><IMG
-SRC="architecture.jpg"></P
-></DIV
-></DIV
-><P
->The following sections describe the architecture in more
- detail.</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="ARCHDESKTOP"
->2.1. Desktop and AT-SPI</A
-></H2
-><P
->Orca's sole view of any application on the desktop is via
- the AT-SPI [<SPAN
-CLASS="CITATION"
-><A
-HREF="#AT-SPI"
-><I
->AT-SPI</I
-></A
->></SPAN
->]. The AT-SPI is an
- IDL/CORBA/Bonobo-based technology [<SPAN
-CLASS="CITATION"
-><A
-HREF="#BONOBO"
-><I
->Bonobo</I
-></A
->></SPAN
->] that provides a common
+ the components is depicted.</b></p><div class="mediaobject"><img src="architecture.jpg" alt="High Level Orca Architecture"></div></div><p>The following sections describe the architecture in more
+ detail.</p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="archdesktop"></a>Desktop and AT-SPI</h2></div></div></div><p>Orca's sole view of any application on the desktop is via
+ the AT-SPI [<span class="citation"><a href="#at-spi">AT-SPI</a></span>]. The AT-SPI is an
+ IDL/CORBA/Bonobo-based technology [<span class="citation"><a href="#bonobo">Bonobo</a></span>] that provides a common
interface for the desktop and its applications to expose their
GUI component hierarchy to assistive technologies such as
Orca. AT-SPI support is provided by toolkits such as GNOME's
- GTK+ toolkit (via gail [<SPAN
-CLASS="CITATION"
-><A
-HREF="#GAIL"
-><I
->GAIL</I
-></A
->></SPAN
->]), the Java platform (via
+ GTK+ toolkit (via gail [<span class="citation"><a href="#gail">GAIL</a></span>]), the Java platform (via
the Java access bridge), and the custom
toolkits used by applications such as Mozilla and Open
- Office. Future support includes the Qt toolkit of KDE.</P
-><P
->Assistive Technologies interact with the AT-SPI via two
+ Office. Future support includes the Qt toolkit of KDE.</p><p>Assistive Technologies interact with the AT-SPI via two
primary means: the AT-SPI registry and accessible objects.
The AT-SPI registry permits assistive technologies to discover
existing applications on the desktop and to register for event
@@ -520,66 +85,22 @@ HREF="#GAIL"
keyboard input events). Accessible objects provide the
assistive technology with information about the application,
and tend to mirror the actual GUI component hierarchy.
- Accessible objects can be obtained in three ways: </P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
->From the AT-SPI registry via queries on the desktop</P
-></LI
-><LI
-><P
->From an AT-SPI event</P
-></LI
-><LI
-><P
->From another Accessible via parent/child relationships
+ Accessible objects can be obtained in three ways: </p><div class="orderedlist"><ol type="1"><li><p>From the AT-SPI registry via queries on the desktop</p></li><li><p>From an AT-SPI event</p></li><li><p>From another Accessible via parent/child relationships
and other relationships such as "label for" and
- "labeled by".</P
-></LI
-></OL
-><P
->Orca's interaction with the AT-SPI is managed through
- Orca's <TT
-CLASS="LITERAL"
->atspi.py</TT
-> module. The
- <TT
-CLASS="LITERAL"
->atspi.py</TT
-> module communicates directly with
+ "labeled by".</p></li></ol></div><p>Orca's interaction with the AT-SPI is managed through
+ Orca's <code class="literal">atspi.py</code> module. The
+ <code class="literal">atspi.py</code> module communicates directly with
the AT-SPI via the AT-SPI IDL interfaces and also provides a
number of classes that help with AT-SPI interaction:
- <TT
-CLASS="LITERAL"
->Registry</TT
->, <TT
-CLASS="LITERAL"
->Accessible</TT
->,
- and <TT
-CLASS="LITERAL"
->Event</TT
->. The full documentation for
+ <code class="literal">Registry</code>, <code class="literal">Accessible</code>,
+ and <code class="literal">Event</code>. The full documentation for
each of these classes is available in the pydoc for Orca
- while the following paragraphs provide a brief overview.</P
-><P
->The <TT
-CLASS="LITERAL"
->Registry</TT
-> class provides a singleton
+ while the following paragraphs provide a brief overview.</p><p>The <code class="literal">Registry</code> class provides a singleton
class instance to access to the AT-SPI
registry. It provides convenience methods for registering
AT-SPI event listeners and device event listeners, and also
provides the mechanism for starting and stopping event
- delivery from the AT-SPI registry.</P
-><P
->The <TT
-CLASS="LITERAL"
->Accessible</TT
-> class provides a wrapper
+ delivery from the AT-SPI registry.</p><p>The <code class="literal">Accessible</code> class provides a wrapper
for communicating with CORBA objects that implement the AT-SPI
Accessible and Application interfaces. Using Python's ability
to add new properties to a class instance at run time, Orca
@@ -587,583 +108,162 @@ CLASS="LITERAL"
information. The main purpose of an Accessible is to provide
a local cache for accessible objects, preventing the need for
numerous round trip calls to the AT-SPI registry and
- application for information.</P
-><P
->The <TT
-CLASS="LITERAL"
->Event</TT
-> class provides a wrapper for
- converting AT-SPI events into Python <TT
-CLASS="LITERAL"
->Event</TT
->
+ application for information.</p><p>The <code class="literal">Event</code> class provides a wrapper for
+ converting AT-SPI events into Python <code class="literal">Event</code>
instances. The main purpose is to convert the AT-SPI
accessible source of the event into a Python
- <TT
-CLASS="LITERAL"
->Accessible</TT
-> instance and to also provide an
- <TT
-CLASS="LITERAL"
->Event</TT
-> instance that can be annotated by
+ <code class="literal">Accessible</code> instance and to also provide an
+ <code class="literal">Event</code> instance that can be annotated by
scripts (the actual AT-SPI event delivered by the registry is
- read-only).</P
-><P
->As illustrated in the high level Orca architecture
- diagram, the <TT
-CLASS="LITERAL"
->atspi</TT
-> module has been used to
+ read-only).</p><p>As illustrated in the high level Orca architecture
+ diagram, the <code class="literal">atspi</code> module has been used to
register event and device listeners with the AT-SPI registry.
Each exemplary desktop application (Firefox, NetBeans, GAIM,
StarOffice) emits AT-SPI events to the AT-SPI registry which
- then delivers them to the <TT
-CLASS="LITERAL"
->atspi</TT
-> module.
- The <TT
-CLASS="LITERAL"
->atspi</TT
-> module then calls all appropriate
+ then delivers them to the <code class="literal">atspi</code> module.
+ The <code class="literal">atspi</code> module then calls all appropriate
listeners for the events it receives from the AT-SPI
- registry.</P
-><P
->In this case, the <TT
-CLASS="LITERAL"
->orca</TT
-> module receives
+ registry.</p><p>In this case, the <code class="literal">orca</code> module receives
keyboard events, which it interprets and also sends on to the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> module. Of more
+ <code class="literal">focus_tracking_presenter</code> module. Of more
interest, however, is that the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> module receives
+ <code class="literal">focus_tracking_presenter</code> module receives
AT-SPI events which it then passes on the script for the
application associated with the event. If there is no script,
- the <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will create an
- instance of the default script. See the <A
-HREF="#SCRIPTGUIDE"
->Orca Script Writing Guide</A
-> for
- more information.</P
-><P
->The <TT
-CLASS="LITERAL"
->atspi</TT
-> module also registers its
+ the <code class="literal">focus_tracking_presenter</code> will create an
+ instance of the default script. See the <a href="#scriptguide" title="Chapter 3. Introduction to Scripting">Orca Script Writing Guide</a> for
+ more information.</p><p>The <code class="literal">atspi</code> module also registers its
own set of event listeners that it uses to keep its local
- cache of accessible objects up to date.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> Because processing AT-SPI object events can be
+ cache of accessible objects up to date.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> Because processing AT-SPI object events can be
time consuming, and because the notification of AT-SPI object
events is relatively "bursty," the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> maintains a queue
+ <code class="literal">focus_tracking_presenter</code> maintains a queue
of AT-SPI object and input device events. It adds the events
to this queue when it receives them and processes the events
on the GLib idle handling thread. This permits Orca to
survive a relatively long burst of events and also allows it
to handle the events on a thread that is compatible with
- GLib.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="ARCHORCA"
->2.2. Orca Module</A
-></H2
-><P
->The <TT
-CLASS="LITERAL"
->orca</TT
-> module is the "main entry
+ GLib.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="archorca"></a>Orca Module</h2></div></div></div><p>The <code class="literal">orca</code> module is the "main entry
point" of Orca. It initializes the components that Orca uses
(atspi, speech, braille, mag) and loads the user's settings.
It also is the first to receive all keyboard and braille input
events and delves them out to other Orca components
- appropriately.</P
-><P
->The <TT
-CLASS="LITERAL"
->orca</TT
-> module maintains the current
- known "locus of focus" in the <TT
-CLASS="LITERAL"
->locusOfFocus</TT
->
- field of the <TT
-CLASS="LITERAL"
->orca_state</TT
-> module. The
- <TT
-CLASS="LITERAL"
->locusOfFocus</TT
-> is intended to represent the
+ appropriately.</p><p>The <code class="literal">orca</code> module maintains the current
+ known "locus of focus" in the <code class="literal">locusOfFocus</code>
+ field of the <code class="literal">orca_state</code> module. The
+ <code class="literal">locusOfFocus</code> is intended to represent the
current object that the user is working with. In simple
terms, it is the object that is highlighted or has the dotted
line drawn around it. Be advised that the notion of "focus"
differs from toolkit to toolkit. For example, the object with
toolkit focus may actually be the parent of the object that is
- highlighted. The <TT
-CLASS="LITERAL"
->locusOfFocus</TT
-> is an an
+ highlighted. The <code class="literal">locusOfFocus</code> is an an
attempt to neutralize these differences across toolkits: the
locus of focus is the individual object that is highlighted,
- has the caret, etc.</P
-><P
->Orca scripts set the locus of focus to inform Orca when
+ has the caret, etc.</p><p>Orca scripts set the locus of focus to inform Orca when
the locus of focus has changed. In addition, in the event
that there was a visual appearance change to the object that
- has the locus of focus, the <TT
-CLASS="LITERAL"
->orca</TT
-> module
- provides a <TT
-CLASS="LITERAL"
->visualAppearanceChanged</TT
-> that
- scripts can use to inform Orca of this event.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> The <TT
-CLASS="LITERAL"
->orca_state.locusOfFocus</TT
->
+ has the locus of focus, the <code class="literal">orca</code> module
+ provides a <code class="literal">visualAppearanceChanged</code> that
+ scripts can use to inform Orca of this event.</p><p><span class="emphasis"><em>NOTE:</em></span> The <code class="literal">orca_state.locusOfFocus</code>
field is intended to be set only via the
- <TT
-CLASS="LITERAL"
->setLocusOfFocus</TT
-> method of the
- <TT
-CLASS="LITERAL"
->orca</TT
-> module. Because the
- <TT
-CLASS="LITERAL"
->setLocusOfFocus</TT
-> method performs bookkeeping
+ <code class="literal">setLocusOfFocus</code> method of the
+ <code class="literal">orca</code> module. Because the
+ <code class="literal">setLocusOfFocus</code> method performs bookkeeping
and other tasks, the
- <TT
-CLASS="LITERAL"
->orca_state.locusOfFocus</TT
-> field should never
- be set directly.</P
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="ARCHSETTINGS"
->2.2.1. settings</A
-></H3
-><P
->The <SPAN
-CLASS="bold"
-><B
-CLASS="EMPHASIS"
->settings</B
-></SPAN
-> module
+ <code class="literal">orca_state.locusOfFocus</code> field should never
+ be set directly.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="archsettings"></a>settings</h3></div></div></div><p>The <span class="bold"><strong>settings</strong></span> module
(not depicted in the high level Orca architecture diagram)
holds preferences set by the user during configuration.
These settings include the following: use of speech and/or
braille, voice styles, key echo, text echo, and command
- echo.</P
-><P
->Any Orca module can check the value of a setting by
+ echo.</p><p>Any Orca module can check the value of a setting by
examining the field directly in the
- <TT
-CLASS="LITERAL"
->settings</TT
-> module. In addition, the
- <TT
-CLASS="LITERAL"
->orca</TT
-> module will import the
- <TT
-CLASS="LITERAL"
->user-settings</TT
-> module from the
- <TT
-CLASS="LITERAL"
->~/.orca directory</TT
->, if it exists (it
+ <code class="literal">settings</code> module. In addition, the
+ <code class="literal">orca</code> module will import the
+ <code class="literal">user-settings</code> module from the
+ <code class="literal">~/.orca directory</code>, if it exists (it
is created as part of the configuration process that
is run the first time Orca is used or when the user
- presses Insert+Space to invoke the configuration GUI).</P
-><P
->The <TT
-CLASS="LITERAL"
->user-settings</TT
-> module is a Python
+ presses Insert+Space to invoke the configuration GUI).</p><p>The <code class="literal">user-settings</code> module is a Python
script, allowing it to contain functions, class definitions,
etc. The primary job of the
- <TT
-CLASS="LITERAL"
->user-settings</TT
-> is to directly set the
- values of fields in the <TT
-CLASS="LITERAL"
->settings</TT
->
- module.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> the <TT
-CLASS="LITERAL"
->init</TT
-> method of the
- <TT
-CLASS="LITERAL"
->orca</TT
-> module obtains settings. As a
- result, the <TT
-CLASS="LITERAL"
->user-settings</TT
-> module is
- imported very early in the Orca life cycle.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SCRIPT"
->2.3. Orca Scripts</A
-></H2
-><P
->Internally, the <TT
-CLASS="LITERAL"
->orca</TT
-> module keeps track
- of list of <TT
-CLASS="LITERAL"
->PresentationManager</TT
-> instances
+ <code class="literal">user-settings</code> is to directly set the
+ values of fields in the <code class="literal">settings</code>
+ module.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> the <code class="literal">init</code> method of the
+ <code class="literal">orca</code> module obtains settings. As a
+ result, the <code class="literal">user-settings</code> module is
+ imported very early in the Orca life cycle.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="script"></a>Orca Scripts</h2></div></div></div><p>Internally, the <code class="literal">orca</code> module keeps track
+ of list of <code class="literal">PresentationManager</code> instances
(see the pydoc for
- <TT
-CLASS="LITERAL"
->presentation_manager.py</TT
->). The
- <TT
-CLASS="LITERAL"
->FocusTrackingPresenter</TT
-> (see
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->) is of the most
- interest, as it is the <TT
-CLASS="LITERAL"
->PresentationManager</TT
->
- that manages scripts.</P
-><P
->Details on the <TT
-CLASS="LITERAL"
->FocusTrackingPresenter</TT
->
+ <code class="literal">presentation_manager.py</code>). The
+ <code class="literal">FocusTrackingPresenter</code> (see
+ <code class="literal">focus_tracking_presenter</code>) is of the most
+ interest, as it is the <code class="literal">PresentationManager</code>
+ that manages scripts.</p><p>Details on the <code class="literal">FocusTrackingPresenter</code>
and Orca scripts can be found in the
- <A
-HREF="#SCRIPTGUIDE"
->Orca Script Writing Guide</A
->.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="ARCHSYSTEMSERVICES"
->2.4. System Services</A
-></H2
-><P
-> Orca relies on existing system services to provide
+ <a href="#scriptguide" title="Chapter 3. Introduction to Scripting">Orca Script Writing Guide</a>.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="archsystemservices"></a>System Services</h2></div></div></div><p> Orca relies on existing system services to provide
support for speech synthesis, braille, and screen
magnification. To interact with these services, Orca provides
the modules described in the following sections.
- </P
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="ARCHSPEECH"
->2.4.1. speech</A
-></H3
-><P
->The <SPAN
-CLASS="bold"
-><B
-CLASS="EMPHASIS"
->speech</B
-></SPAN
-> module
+ </p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="archspeech"></a>speech</h3></div></div></div><p>The <span class="bold"><strong>speech</strong></span> module
provides Orca's Python interface to system speech services.
Each speech service is generated by a "speech server
factory." There are currently two such factories: one for
- [<SPAN
-CLASS="CITATION"
-><A
-HREF="#GNOME-SPEECH"
-><I
->gnome-speech</I
-></A
->></SPAN
->] (see
- <TT
-CLASS="LITERAL"
->gnomespeechfactory.py</TT
-> and one for
- [<SPAN
-CLASS="CITATION"
-><A
-HREF="#EMACSPEAK"
-><I
->Emacspeak</I
-></A
->></SPAN
->] (see
- <TT
-CLASS="LITERAL"
->espeechfactory.py</TT
->), though it is expected
+ [<span class="citation"><a href="#gnome-speech">gnome-speech</a></span>] (see
+ <code class="literal">gnomespeechfactory.py</code> and one for
+ [<span class="citation"><a href="#emacspeak">Emacspeak</a></span>] (see
+ <code class="literal">espeechfactory.py</code>), though it is expected
that support for other factories can be added in the
- future.</P
-><P
->Each speech factory offers up a list of
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
->s, where each
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> is typically an interface to
+ future.</p><p>Each speech factory offers up a list of
+ <code class="literal">SpeechServer</code>s, where each
+ <code class="literal">SpeechServer</code> is typically an interface to
a particular speech engine. For example, the
- <TT
-CLASS="LITERAL"
->espeechfactory</TT
-> will offer up a
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> that talks to the Fonix
- DECtalk engine and a <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> that
+ <code class="literal">espeechfactory</code> will offer up a
+ <code class="literal">SpeechServer</code> that talks to the Fonix
+ DECtalk engine and a <code class="literal">SpeechServer</code> that
talks to the IBMTTS engine. Likewise, the
- <TT
-CLASS="LITERAL"
->gnomespeechfactory</TT
-> will offer up a
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> that uses the
- <TT
-CLASS="LITERAL"
->gnome-speech</TT
-> interface to talk to the
+ <code class="literal">gnomespeechfactory</code> will offer up a
+ <code class="literal">SpeechServer</code> that uses the
+ <code class="literal">gnome-speech</code> interface to talk to the
Festival Speech Synthesis System, a separate
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> that also uses the
- <TT
-CLASS="LITERAL"
->gnome-speech</TT
-> interface to talk to the
- Fonix DECtalk engine, and so on.</P
-><P
->Each <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> instance then provides
+ <code class="literal">SpeechServer</code> that also uses the
+ <code class="literal">gnome-speech</code> interface to talk to the
+ Fonix DECtalk engine, and so on.</p><p>Each <code class="literal">SpeechServer</code> instance then provides
a set of methods for actually speaking. Each of the methods
- accepts an <TT
-CLASS="LITERAL"
->ACSS</TT
-> instance, which represents
- an aural cascading style sheet ([<SPAN
-CLASS="CITATION"
-><A
-HREF="#ACSS"
-><I
->ACSS</I
-></A
->></SPAN
->]) that defines the voice
- and voice parameter settings to use.</P
-><P
->As part of the <TT
-CLASS="LITERAL"
->orca-setup</TT
-> process,
+ accepts an <code class="literal">ACSS</code> instance, which represents
+ an aural cascading style sheet ([<span class="citation"><a href="#acss">ACSS</a></span>]) that defines the voice
+ and voice parameter settings to use.</p><p>As part of the <code class="literal">orca-setup</code> process,
the user selects a particular speech factory,
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
->, and voice to use as their
+ <code class="literal">SpeechServer</code>, and voice to use as their
default voice. When Orca starts, the
- <TT
-CLASS="LITERAL"
->speech</TT
-> module looks for these settings
+ <code class="literal">speech</code> module looks for these settings
and connects to the appropriate speech factory and
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
->. In the event the a
- connection cannot be made, the <TT
-CLASS="LITERAL"
->speech</TT
->
+ <code class="literal">SpeechServer</code>. In the event the a
+ connection cannot be made, the <code class="literal">speech</code>
module attempts to find a working synthesis engine to use by
examining its list of speech factories. The
- <TT
-CLASS="LITERAL"
->speech</TT
-> module then provides simple
- methods that delegate to the <TT
-CLASS="LITERAL"
->SpeechServer</TT
->
+ <code class="literal">speech</code> module then provides simple
+ methods that delegate to the <code class="literal">SpeechServer</code>
instance. This model allows scripts to use their own
- <TT
-CLASS="LITERAL"
->SpeechServer</TT
-> instances if they wish, but
+ <code class="literal">SpeechServer</code> instances if they wish, but
scripts typically just rely upon the user's default
- preferences.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="ARCHBRAILLE"
->2.4.2. braille</A
-></H3
-><P
-> The <SPAN
-CLASS="bold"
-><B
-CLASS="EMPHASIS"
->braille</B
-></SPAN
-> module
+ preferences.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="archbraille"></a>braille</h3></div></div></div><p> The <span class="bold"><strong>braille</strong></span> module
provides Orca's Python interface to the system's BrlTTY
- [<SPAN
-CLASS="CITATION"
-><A
-HREF="#BRLTTY"
-><I
->BRLTTY</I
-></A
->></SPAN
->] daemon. The BrlTTY
+ [<span class="citation"><a href="#brltty">BRLTTY</a></span>] daemon. The BrlTTY
daemon, in turn, provides the interface to braille devices
for both displaying braille and receiving input from the
- user.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->TODO:</I
-></SPAN
-> flesh this section out more.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="ARCHMAG"
->2.4.3. mag</A
-></H3
-><P
-> The <SPAN
-CLASS="bold"
-><B
-CLASS="EMPHASIS"
->mag</B
-></SPAN
-> module
+ user.</p><p><span class="emphasis"><em>TODO:</em></span> flesh this section out more.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="archmag"></a>mag</h3></div></div></div><p> The <span class="bold"><strong>mag</strong></span> module
provides Orca's Python interface to the system's gnome-mag
- [<SPAN
-CLASS="CITATION"
-><A
-HREF="#GNOME-MAG"
-><I
->gnome-mag</I
-></A
->></SPAN
->] CORBA service(s).
+ [<span class="citation"><a href="#gnome-mag">gnome-mag</a></span>] CORBA service(s).
The magnification component provides methods that permit
Orca discover screen magnification services and set their
- desktop region of interest.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->TODO:</I
-></SPAN
-> flesh this section out more.</P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="SCRIPTGUIDE"
-></A
->Chapter 3. Introduction to Scripting</H1
-><P
->In this section, you will learn more about the Orca
+ desktop region of interest.</p><p><span class="emphasis"><em>TODO:</em></span> flesh this section out more.</p></div></div></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="scriptguide"></a>Chapter 3. Introduction to Scripting</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#sgcontract">Script Contract</a></span></dt><dt><span class="section"><a href="#sglifecycle">Script Life Cycle</a></span></dt></dl></div><p>In this section, you will learn more about the Orca
architecture as well as how to create your own custom scripts
- for Orca.</P
-><P
->The goal of scripting is to provide Orca with the capability
+ for Orca.</p><p>The goal of scripting is to provide Orca with the capability
of providing a natural feeling and compelling user experience
for the various user interaction models of different desktop
- applications.</P
-><P
->The Orca scripting approach allows scripts to extend and/or
+ applications.</p><p>The Orca scripting approach allows scripts to extend and/or
override the behavior of other scripts, thus simplifying the job
of a script writer. To further facilitate script writing, Orca
provides a "default" script that provides a reasonable default
@@ -1172,792 +272,225 @@ NAME="SCRIPTGUIDE"
off" point for writing custom scripts. Furthermore, keep in
mind that the "default" script is intended to cover a large
variety of applications. As such, you may find that it is
- not necessary to write a custom script.</P
-><P
->The primary operating mode of Orca is "focus tracking
+ not necessary to write a custom script.</p><p>The primary operating mode of Orca is "focus tracking
mode," where Orca keeps track of the most relevant user
interface object that has keyboard focus. When Orca detects
changes to this object, which Orca refers to as the "locus of
- focus," Orca will present relevant information to the user.</P
-><P
->As such, the primary goal of a script is to assist Orca in
+ focus," Orca will present relevant information to the user.</p><p>As such, the primary goal of a script is to assist Orca in
tracking of the locus of focus as well as presenting information
about the locus of focus. A script does this by registering for
one or more AT-SPI events and then reacting appropriately when
it receives those events. A script can also intercept and
interpret keystrokes and braille input events, allowing it to
- further extend the behavior of Orca.</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGCONTRACT"
->3.1. Script Contract</A
-></H2
-><P
->The contract for a script is documented in detail in the
- pydoc of the <TT
-CLASS="LITERAL"
->Script</TT
-> class in the
- <TT
-CLASS="LITERAL"
->script.py</TT
-> module. The
- <TT
-CLASS="LITERAL"
->Script</TT
-> subclass defined in the
- <TT
-CLASS="LITERAL"
->default.py</TT
-> module provides the default
+ further extend the behavior of Orca.</p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sgcontract"></a>Script Contract</h2></div></div></div><p>The contract for a script is documented in detail in the
+ pydoc of the <code class="literal">Script</code> class in the
+ <code class="literal">script.py</code> module. The
+ <code class="literal">Script</code> subclass defined in the
+ <code class="literal">default.py</code> module provides the default
behavior for Orca when it encounters applications and toolkits
that behave like the GTK toolkit. It is expected that new
- scripts will typically extend the <TT
-CLASS="LITERAL"
->Script</TT
->
- subclass of the <TT
-CLASS="LITERAL"
->default.py</TT
-> module rather
- than directly extending the <TT
-CLASS="LITERAL"
->Script</TT
-> class
- defined in the <TT
-CLASS="LITERAL"
->script.py</TT
-> module.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGLIFECYCLE"
->3.2. Script Life Cycle</A
-></H2
-><P
->BIRTH: Orca's <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->
+ scripts will typically extend the <code class="literal">Script</code>
+ subclass of the <code class="literal">default.py</code> module rather
+ than directly extending the <code class="literal">Script</code> class
+ defined in the <code class="literal">script.py</code> module.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sglifecycle"></a>Script Life Cycle</h2></div></div></div><p>BIRTH: Orca's <code class="literal">focus_tracking_presenter</code>
module is the sole maintainer of scripts. Whenever it receives
an event from the AT-SPI Registry, the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will determine the
+ <code class="literal">focus_tracking_presenter</code> will determine the
application associated with that event and create a new script
for that application if on has not yet been created. Only one
script instance per application instance is allowed by the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->.</P
-><P
->The script creation process consists of the following
- steps:</P
-><P
-></P
-><UL
-><LI
-><P
->The <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will
- attempt to perform a Python <TT
-CLASS="LITERAL"
->import</TT
->
+ <code class="literal">focus_tracking_presenter</code>.</p><p>The script creation process consists of the following
+ steps:</p><div class="itemizedlist"><ul type="disc"><li><p>The <code class="literal">focus_tracking_presenter</code> will
+ attempt to perform a Python <code class="literal">import</code>
using the application name as the name of an Orca module.
- For example, for the <TT
-CLASS="LITERAL"
->gnome-terminal</TT
->
+ For example, for the <code class="literal">gnome-terminal</code>
application, the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will look for
- the <TT
-CLASS="LITERAL"
->gnome-terminal.py</TT
-> in the
- <TT
-CLASS="LITERAL"
->orca.scripts</TT
-> package (see the script
- naming discussion in the <A
-HREF="#DEBUG"
->debug
- utilities section</A
-> to determine what to name your
+ <code class="literal">focus_tracking_presenter</code> will look for
+ the <code class="literal">gnome-terminal.py</code> in the
+ <code class="literal">orca.scripts</code> package (see the script
+ naming discussion in the <a href="#debug" title="Debug Utilities">debug
+ utilities section</a> to determine what to name your
script). If it cannot find such a module in the Python
search path, the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will then
- check in the <TT
-CLASS="LITERAL"
->orca</TT
-> package for a module
+ <code class="literal">focus_tracking_presenter</code> will then
+ check in the <code class="literal">orca</code> package for a module
matching the name of the toolkit used by the application.
Failing that, Orca will create an instance of the
- <TT
-CLASS="LITERAL"
->Script</TT
-> class defined in the
- <TT
-CLASS="LITERAL"
->default.py</TT
-> module.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> the <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->
+ <code class="literal">Script</code> class defined in the
+ <code class="literal">default.py</code> module.</p><p><span class="emphasis"><em>NOTE:</em></span> the <code class="literal">focus_tracking_presenter</code>
also maintains a table to map application names to script
names. This is useful in many cases, such as if the
application name changes over time or the application
contains characters that are awkward in file system names.
To extend or override this table, one can call the
- <TT
-CLASS="LITERAL"
->setScriptMapping</TT
-> method of the
- <TT
-CLASS="LITERAL"
->settings</TT
-> module.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> it is possible to tell Orca to bypass all
+ <code class="literal">setScriptMapping</code> method of the
+ <code class="literal">settings</code> module.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> it is possible to tell Orca to bypass all
custom script creation by setting
- <TT
-CLASS="LITERAL"
->orca.settings.enableCustomScripts=False</TT
->
- in your <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->
- module. This can be useful for debugging purposes.</P
-></LI
-><LI
-><P
->Each script module is expected to provide a
- <TT
-CLASS="LITERAL"
->Script</TT
-> class that ultimately extends
- the <TT
-CLASS="LITERAL"
->orca.Script</TT
-> class defined in the
- <TT
-CLASS="LITERAL"
->script.py</TT
-> module. The constructor
+ <code class="literal">orca.settings.enableCustomScripts=False</code>
+ in your <code class="literal">~/.orca/user-settings.py</code>
+ module. This can be useful for debugging purposes.</p></li><li><p>Each script module is expected to provide a
+ <code class="literal">Script</code> class that ultimately extends
+ the <code class="literal">orca.Script</code> class defined in the
+ <code class="literal">script.py</code> module. The constructor
takes the accessible application object as an
- argument.</P
-><P
->The constructor for the <TT
-CLASS="LITERAL"
->Script</TT
->
+ argument.</p><p>The constructor for the <code class="literal">Script</code>
instance is expected to define any keystrokes, braille
buttons, and AT-SPI event listeners it is interested in
- (see the <A
-HREF="#CUSTOMIZATION"
->Customized
- Behavior</A
-> section for how to do this).</P
-></LI
-><LI
-><P
->Once it has created a script, the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will register
+ (see the <a href="#customization" title="Chapter 4. Customized Behavior">Customized
+ Behavior</a> section for how to do this).</p></li><li><p>Once it has created a script, the
+ <code class="literal">focus_tracking_presenter</code> will register
event listeners for all AT-SPI events associated with
script (i.e., the script should not register these events
itself). When the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> receives the
+ <code class="literal">focus_tracking_presenter</code> receives the
events, it will pass the event to the script associated
with the event, regardless if the application associated
- with the script has focus or not.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> registers its
- own <TT
-CLASS="LITERAL"
->processObjectEvent</TT
-> method as the
+ with the script has focus or not.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> the
+ <code class="literal">focus_tracking_presenter</code> registers its
+ own <code class="literal">processObjectEvent</code> method as the
AT-SPI event listener. This method finds (and creates if
necessary) the script associated with the event and passes
the event onto the required
- <TT
-CLASS="LITERAL"
->processObjectEvent</TT
-> method of the script
- for processing. Each <TT
-CLASS="LITERAL"
->Event</TT
-> (see the
- <TT
-CLASS="LITERAL"
->atspi</TT
-> module) has the following
- fields:</P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="LITERAL"
->source</TT
->: an
- <TT
-CLASS="LITERAL"
->Accessible</TT
-> (see the
- <TT
-CLASS="LITERAL"
->atspi</TT
-> module) instance representing
- the object associated with the event</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->type</TT
->: a string describing the
+ <code class="literal">processObjectEvent</code> method of the script
+ for processing. Each <code class="literal">Event</code> (see the
+ <code class="literal">atspi</code> module) has the following
+ fields:</p><div class="itemizedlist"><ul type="circle"><li><p><code class="literal">source</code>: an
+ <code class="literal">Accessible</code> (see the
+ <code class="literal">atspi</code> module) instance representing
+ the object associated with the event</p></li><li><p><code class="literal">type</code>: a string describing the
event (e.g.,
- <TT
-CLASS="LITERAL"
->window:activated</TT
->)</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->detail1</TT
-> and
- <TT
-CLASS="LITERAL"
->detail2</TT
->: integer details for the
- event (see the AT-SPI documentation)</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->any_data</TT
->: something associated
- with the event (see the AT-SPI documentation)</P
-></LI
-></UL
-></LI
-><LI
-><P
->The <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> also
+ <code class="literal">window:activated</code>)</p></li><li><p><code class="literal">detail1</code> and
+ <code class="literal">detail2</code>: integer details for the
+ event (see the AT-SPI documentation)</p></li><li><p><code class="literal">any_data</code>: something associated
+ with the event (see the AT-SPI documentation)</p></li></ul></div></li><li><p>The <code class="literal">focus_tracking_presenter</code> also
keeps track of the active script (as determined by the
script associated with the currently active window) and
will pass all keyboard and braille input events to the
- active script.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> implements the
- <TT
-CLASS="LITERAL"
->processKeyboardEvent</TT
-> and
- <TT
-CLASS="LITERAL"
->processBrailleEvent</TT
-> methods which are
- called by the main <TT
-CLASS="LITERAL"
->orca</TT
-> module whenever
+ active script.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> the
+ <code class="literal">focus_tracking_presenter</code> implements the
+ <code class="literal">processKeyboardEvent</code> and
+ <code class="literal">processBrailleEvent</code> methods which are
+ called by the main <code class="literal">orca</code> module whenever
it receives a keystroke or braille input event. The
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will pass
+ <code class="literal">focus_tracking_presenter</code> will pass
these events onto the
- <TT
-CLASS="LITERAL"
->processKeyboardEvent</TT
-> and
- <TT
-CLASS="LITERAL"
->processBrailleEvent</TT
-> methods of the
- active script.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> Because processing AT-SPI object events can
+ <code class="literal">processKeyboardEvent</code> and
+ <code class="literal">processBrailleEvent</code> methods of the
+ active script.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> Because processing AT-SPI object events can
be time consuming, and because the notification of AT-SPI
object events is relatively "bursty," the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> maintains a
+ <code class="literal">focus_tracking_presenter</code> maintains a
queue of AT-SPI object and input device events. It adds
the events to this queue when it receives them and
processes the events on the GLib idle handling thread.
This permits Orca to survive a relatively long burst of
events and also allows it to handle the events on a thread
- that is compatible with GLib.</P
-></LI
-></UL
-><P
->LIFE: Whenever a script receives an event, the script can do
+ that is compatible with GLib.</p></li></ul></div><p>LIFE: Whenever a script receives an event, the script can do
whatever it wants. Its primary task, however, is to assist
Orca in keeping track of the locus of focus. When a script
detects a change in the locus of focus, it should call
- <TT
-CLASS="LITERAL"
->orca.setLocusOfFocus</TT
-> with the
- <TT
-CLASS="LITERAL"
->Accessible</TT
-> object instance that is the new
+ <code class="literal">orca.setLocusOfFocus</code> with the
+ <code class="literal">Accessible</code> object instance that is the new
locus of focus. Among other things, this results in the
- <TT
-CLASS="LITERAL"
->orca_state.locusOfFocus</TT
-> field being updated.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> The <TT
-CLASS="LITERAL"
->orca_state.locusOfFocus</TT
->
+ <code class="literal">orca_state.locusOfFocus</code> field being updated.</p><p><span class="emphasis"><em>NOTE:</em></span> The <code class="literal">orca_state.locusOfFocus</code>
field is intended to be set only via the
- <TT
-CLASS="LITERAL"
->setLocusOfFocus</TT
-> method of the
- <TT
-CLASS="LITERAL"
->orca</TT
-> module. Because the
- <TT
-CLASS="LITERAL"
->setLocusOfFocus</TT
-> method performs bookkeeping
+ <code class="literal">setLocusOfFocus</code> method of the
+ <code class="literal">orca</code> module. Because the
+ <code class="literal">setLocusOfFocus</code> method performs bookkeeping
and other tasks, the
- <TT
-CLASS="LITERAL"
->orca_state.locusOfFocus</TT
-> field should never
- be set directly.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> The <TT
-CLASS="LITERAL"
->orca</TT
-> module has logic to
+ <code class="literal">orca_state.locusOfFocus</code> field should never
+ be set directly.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> The <code class="literal">orca</code> module has logic to
detect if the locus of focus really changed and will propagate
the change on as appropriate. The
- <TT
-CLASS="LITERAL"
->orca.setLocusOfFocus</TT
-> method first sends the
- change to the <TT
-CLASS="LITERAL"
->locusOfFocusChanged</TT
-> method of
- the <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->, which then
+ <code class="literal">orca.setLocusOfFocus</code> method first sends the
+ change to the <code class="literal">locusOfFocusChanged</code> method of
+ the <code class="literal">focus_tracking_presenter</code>, which then
passes the change onto the required
- <TT
-CLASS="LITERAL"
->locusOfFocusChanged</TT
-> method of the active
- script. The <TT
-CLASS="LITERAL"
->locusOfFocusChanged</TT
-> method is
+ <code class="literal">locusOfFocusChanged</code> method of the active
+ script. The <code class="literal">locusOfFocusChanged</code> method is
the primary place where a script will present information to
- the user.</P
-><P
->In many cases, the locus of focus doesn't change, but some
+ the user.</p><p>In many cases, the locus of focus doesn't change, but some
property of the current locus of focus changes. For example,
a checkbox is checked or unchecked, yet remains as the locus
of focus. In these cases, a script should also keep Orca
informed by calling
- <TT
-CLASS="LITERAL"
->orca.visualAppearanceChanged</TT
->.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> Like the <TT
-CLASS="LITERAL"
->locusOfFocusChanged</TT
->
- method, the <TT
-CLASS="LITERAL"
->visualAppearanceChanged</TT
-> method
- of the <TT
-CLASS="LITERAL"
->orca</TT
-> module will first call the
- <TT
-CLASS="LITERAL"
->visualAppearanceChanged</TT
-> method of the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->, which will then
- call the required <TT
-CLASS="LITERAL"
->visualAppearanceChanged</TT
->
+ <code class="literal">orca.visualAppearanceChanged</code>.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> Like the <code class="literal">locusOfFocusChanged</code>
+ method, the <code class="literal">visualAppearanceChanged</code> method
+ of the <code class="literal">orca</code> module will first call the
+ <code class="literal">visualAppearanceChanged</code> method of the
+ <code class="literal">focus_tracking_presenter</code>, which will then
+ call the required <code class="literal">visualAppearanceChanged</code>
of the active script. The
- <TT
-CLASS="LITERAL"
->visualAppearanceChanged</TT
-> is the primary
+ <code class="literal">visualAppearanceChanged</code> is the primary
place where a script will present such information to the
- user.</P
-><P
->DEATH: Whenever the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> detects that an
+ user.</p><p>DEATH: Whenever the
+ <code class="literal">focus_tracking_presenter</code> detects that an
application has gone away (by determining that the application
has been removed from the desktop), it will delete the script
for that application and unregister any event listeners
- associated with that script.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->IMPLEMENTATION DETAIL:</I
-></SPAN
-> the <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->
+ associated with that script.</p><p><span class="emphasis"><em>IMPLEMENTATION DETAIL:</em></span> the <code class="literal">focus_tracking_presenter</code>
determines an application has gone away by detecting a
- <TT
-CLASS="LITERAL"
->object:children-changed:remove</TT
-> event on
- the desktop.</P
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="CUSTOMIZATION"
-></A
->Chapter 4. Customized Behavior</H1
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> THIS WILL CHANGE POST V1.0. In particular, the
+ <code class="literal">object:children-changed:remove</code> event on
+ the desktop.</p></div></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="customization"></a>Chapter 4. Customized Behavior</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#sgeventlisteners">Defining Event Listeners</a></span></dt><dt><span class="section"><a href="#sginputeventhandlers">Input Event Handlers</a></span></dt><dt><span class="section"><a href="#sgkeybindings">Defining Keyboard Bindings</a></span></dt><dt><span class="section"><a href="#sgbraillebindings">Defining Braille Bindings</a></span></dt></dl></div><p><span class="emphasis"><em>NOTE:</em></span> THIS WILL CHANGE POST V1.0. In particular, the
method for setting up event handlers and keyboard/braille
bindings will be changed so as to allow for easier customization
of these bindings. As such, the information in this chapter is
- here only for historical purposes.</P
-><P
->The customized behavior of a script is set up in its
+ here only for historical purposes.</p><p>The customized behavior of a script is set up in its
constructor. In its constructor, each script is expected to
extend/override several fields as illustrated in the following
- diagram and describe below:</P
-><DIV
-CLASS="FIGURE"
-><A
-NAME="AEN335"
-></A
-><P
-><B
->Figure 4-1. Orca Script Diagram</B
-></P
-><DIV
-CLASS="MEDIAOBJECT"
-><P
-><IMG
-SRC="script.jpg"></P
-></DIV
-></DIV
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="LITERAL"
->listeners</TT
->: a dictionary where the
+ diagram and describe below:</p><div class="figure"><a name="id2493464"></a><p class="title"><b>Figure 4.1. Orca Script Diagram</b></p><div class="mediaobject"><img src="script.jpg" alt="Orca Script Diagram"></div></div><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">listeners</code>: a dictionary where the
keys are strings that match AT-SPI event types (e.g.,
- <TT
-CLASS="LITERAL"
->focus:</TT
->,
- <TT
-CLASS="LITERAL"
->object:text-caret-moved</TT
->, etc.), and the
+ <code class="literal">focus:</code>,
+ <code class="literal">object:text-caret-moved</code>, etc.), and the
values are functions to handle the event. Each function
- is passed an <TT
-CLASS="LITERAL"
->Event</TT
-> instance (see the
- <TT
-CLASS="LITERAL"
->atspi.py</TT
-> module) as its sole
- parameter and no return value is expected.</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->keybindings</TT
->: an instance of
- <TT
-CLASS="LITERAL"
->keybindings.KeyBindings</TT
-> (see
- the <TT
-CLASS="LITERAL"
->keybindings.py</TT
-> module) that defines
- the keystrokes the script is interested in.</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->braillebindings</TT
->: a dictionary where
- the keys are BrlTTY commands (e.g., <TT
-CLASS="LITERAL"
->CMD_HWINLT</TT
->,
- defined in <TT
-CLASS="LITERAL"
->braille.py</TT
->), and the values are
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
-> instances.</P
-></LI
-></UL
-><P
->The constructor for the <TT
-CLASS="LITERAL"
->Script</TT
-> class,
+ is passed an <code class="literal">Event</code> instance (see the
+ <code class="literal">atspi.py</code> module) as its sole
+ parameter and no return value is expected.</p></li><li><p><code class="literal">keybindings</code>: an instance of
+ <code class="literal">keybindings.KeyBindings</code> (see
+ the <code class="literal">keybindings.py</code> module) that defines
+ the keystrokes the script is interested in.</p></li><li><p><code class="literal">braillebindings</code>: a dictionary where
+ the keys are BrlTTY commands (e.g., <code class="literal">CMD_HWINLT</code>,
+ defined in <code class="literal">braille.py</code>), and the values are
+ <code class="literal">InputEventHandler</code> instances.</p></li></ul></div><p>The constructor for the <code class="literal">Script</code> class,
which all scripts should ultimately extend (most will extend the
- <TT
-CLASS="LITERAL"
->Script</TT
-> subclass of the <TT
-CLASS="LITERAL"
->default.py</TT
->
+ <code class="literal">Script</code> subclass of the <code class="literal">default.py</code>
module, which in turn extends
- <TT
-CLASS="LITERAL"
->Script</TT
-> class of the <TT
-CLASS="LITERAL"
->script.py</TT
->
+ <code class="literal">Script</code> class of the <code class="literal">script.py</code>
module), sets up empty values for each of
these fields. As such, a subclass merely needs to
extend/override these fields. Each of these fields is described
- in more detail in the following sections.</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGEVENTLISTENERS"
->4.1. Defining Event Listeners</A
-></H2
-><P
->As described above, the <TT
-CLASS="LITERAL"
->listeners</TT
-> field
+ in more detail in the following sections.</p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sgeventlisteners"></a>Defining Event Listeners</h2></div></div></div><p>As described above, the <code class="literal">listeners</code> field
is a dictionary where the keys are strings that match AT-SPI
- event types (e.g., <TT
-CLASS="LITERAL"
->focus:</TT
->,
- <TT
-CLASS="LITERAL"
->object:text-caret-moved</TT
->, etc.), and the
+ event types (e.g., <code class="literal">focus:</code>,
+ <code class="literal">object:text-caret-moved</code>, etc.), and the
values are functions to handle the event. A script's
constructor can modify/extend this dictionary by merely
- defining an entry:</P
-><PRE
-CLASS="PROGRAMLISTING"
->self.listeners["focus:"] = self.onFocus</PRE
-><P
->In the event there is already an entry in the
- <TT
-CLASS="LITERAL"
->listeners</TT
-> dictionary, it will be overridden
- by the new value.</P
-><P
->As described previously, the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> will register
+ defining an entry:</p><pre class="programlisting">
+self.listeners["focus:"] = self.onFocus
+</pre><p>In the event there is already an entry in the
+ <code class="literal">listeners</code> dictionary, it will be overridden
+ by the new value.</p><p>As described previously, the
+ <code class="literal">focus_tracking_presenter</code> will register
listeners on behalf of a script, and will notify the script of
any events via the script's
- <TT
-CLASS="LITERAL"
->processObjectEvent</TT
-> method. The
- <TT
-CLASS="LITERAL"
->processObjectEvent</TT
-> method of the top level
- <TT
-CLASS="LITERAL"
->Script</TT
-> class examines the
- <TT
-CLASS="LITERAL"
->type</TT
-> field of the given
- <TT
-CLASS="LITERAL"
->event</TT
->, calling any matching functions from
- the <TT
-CLASS="LITERAL"
->listeners</TT
-> dictionary. As such, it is
- unlikely that a <TT
-CLASS="LITERAL"
->Script</TT
-> subclass will ever
- need to override the <TT
-CLASS="LITERAL"
->processObjectEvent</TT
->
+ <code class="literal">processObjectEvent</code> method. The
+ <code class="literal">processObjectEvent</code> method of the top level
+ <code class="literal">Script</code> class examines the
+ <code class="literal">type</code> field of the given
+ <code class="literal">event</code>, calling any matching functions from
+ the <code class="literal">listeners</code> dictionary. As such, it is
+ unlikely that a <code class="literal">Script</code> subclass will ever
+ need to override the <code class="literal">processObjectEvent</code>
method. Instead, it merely needs to populate the
- <TT
-CLASS="LITERAL"
->listeners</TT
-> dictionary as appropriate.</P
-><P
->The function for an event listener merely takes an
- <TT
-CLASS="LITERAL"
->Event</TT
-> instance (see the
- <TT
-CLASS="LITERAL"
->atspi.py</TT
-> module) and does whatever it
+ <code class="literal">listeners</code> dictionary as appropriate.</p><p>The function for an event listener merely takes an
+ <code class="literal">Event</code> instance (see the
+ <code class="literal">atspi.py</code> module) and does whatever it
wants; the return value is ignored. For example, the function
definition associated with the above
- <TT
-CLASS="LITERAL"
->listeners</TT
-> entry might look like the
- following, where the <TT
-CLASS="LITERAL"
->event</TT
-> is described
- above:</P
-><PRE
-CLASS="PROGRAMLISTING"
->def onFocus(self, event):
+ <code class="literal">listeners</code> entry might look like the
+ following, where the <code class="literal">event</code> is described
+ above:</p><pre class="programlisting">
+def onFocus(self, event):
"""Called whenever an object gets focus.
Arguments:
@@ -1966,38 +499,16 @@ CLASS="PROGRAMLISTING"
...
orca.setLocusOfFocus(event, event.source)
- ...</PRE
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGINPUTEVENTHANDLERS"
->4.2. Input Event Handlers</A
-></H2
-><P
->Before describing how to set up keyboard and braille event
+ ...
+</pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sginputeventhandlers"></a>Input Event Handlers</h2></div></div></div><p>Before describing how to set up keyboard and braille event
handlers, it is import to first understand the
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
->, which is defined in the
- <TT
-CLASS="LITERAL"
->input_event.py</TT
-> module.
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
->s serve a purpose of
+ <code class="literal">InputEventHandler</code>, which is defined in the
+ <code class="literal">input_event.py</code> module.
+ <code class="literal">InputEventHandler</code>s serve a purpose of
holding a function to call for a particular input event, and a
human consumable string that provides a short description of
the function's behavior. The main purpose of the
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
-> is to provide support for
+ <code class="literal">InputEventHandler</code> is to provide support for
the "learn mode" of Orca. If learn mode is enabled, the input
event handler will consume the input event (i.e., return True)
and merely speak and braille the human consumable string. If
@@ -2005,1270 +516,330 @@ CLASS="LITERAL"
the active script and the input event on to the function,
returning the boolean value of the function as indication of
whether the event should be consumed by Orca or passed on to
- the application.</P
-><P
->The best place to look for examples of
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
->s is in the
- <TT
-CLASS="LITERAL"
->default.py</TT
-> module. For example, this
+ the application.</p><p>The best place to look for examples of
+ <code class="literal">InputEventHandler</code>s is in the
+ <code class="literal">default.py</code> module. For example, this
module defines an input event handler for telling the flat
review context to move to the home position of a
- window:</P
-><PRE
-CLASS="PROGRAMLISTING"
->reviewHomeHandler = input_event.InputEventHandler(
+ window:</p><pre class="programlisting">
+reviewHomeHandler = input_event.InputEventHandler(
Script.reviewHome,
- _("Moves flat review to the home position."))</PRE
-><P
->In this definition, <TT
-CLASS="LITERAL"
->default.py</TT
-> is creating
- an <TT
-CLASS="LITERAL"
->InputEventHandler</TT
-> instance whose function is
- the Script's method, <TT
-CLASS="LITERAL"
->reviewHome</TT
-> and whose
+ _("Moves flat review to the home position."))
+</pre><p>In this definition, <code class="literal">default.py</code> is creating
+ an <code class="literal">InputEventHandler</code> instance whose function is
+ the Script's method, <code class="literal">reviewHome</code> and whose
human consumable text describes what will happen. The Script's
- <TT
-CLASS="LITERAL"
->reviewHome</TT
-> method is defined as follows:</P
-><PRE
-CLASS="PROGRAMLISTING"
->def reviewHome(self, inputEvent):
+ <code class="literal">reviewHome</code> method is defined as follows:</p><pre class="programlisting">
+def reviewHome(self, inputEvent):
"""Moves the flat review context to the top left of the current
window."""
context = self.getFlatReviewContext()
context.goBegin()
self.reviewCurrentLine(inputEvent)
self.targetCursorCell = braille.cursorCell
- return True</PRE
-><P
->Note that the method returns <TT
-CLASS="LITERAL"
->True</TT
-> to
- indicate the input event has been consumed.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGKEYBINDINGS"
->4.3. Defining Keyboard Bindings</A
-></H2
-><P
->The keyboard bindings for a script are held in the
- <TT
-CLASS="LITERAL"
->keybindings</TT
-> field, which is a
- <TT
-CLASS="LITERAL"
->KeyBindings</TT
-> instance. This field maintains
- a set of <TT
-CLASS="LITERAL"
->KeyBinding</TT
-> instances.</P
-><P
->Keyboard bindings merely define the keystroke and modifier
+ return True
+</pre><p>Note that the method returns <code class="literal">True</code> to
+ indicate the input event has been consumed.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sgkeybindings"></a>Defining Keyboard Bindings</h2></div></div></div><p>The keyboard bindings for a script are held in the
+ <code class="literal">keybindings</code> field, which is a
+ <code class="literal">KeyBindings</code> instance. This field maintains
+ a set of <code class="literal">KeyBinding</code> instances.</p><p>Keyboard bindings merely define the keystroke and modifier
circumstances needed to invoke an
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
-> instance. This definition
- is held in a <TT
-CLASS="LITERAL"
->KeyBinding</TT
-> instance (see the
- <TT
-CLASS="LITERAL"
->keybindings.py</TT
-> module):</P
-><PRE
-CLASS="PROGRAMLISTING"
->self.keybindings.add(
+ <code class="literal">InputEventHandler</code> instance. This definition
+ is held in a <code class="literal">KeyBinding</code> instance (see the
+ <code class="literal">keybindings.py</code> module):</p><pre class="programlisting">
+self.keybindings.add(
keybindings.KeyBinding("KP_7",
- 1 << orca.MODIFIER_ORCA,
- 1 << orca.MODIFIER_ORCA,
- reviewHomeHandler))</PRE
-><P
->The first parameter of a <TT
-CLASS="LITERAL"
->KeyBinding</TT
-> is
+ 1 << orca.MODIFIER_ORCA,
+ 1 << orca.MODIFIER_ORCA,
+ reviewHomeHandler))
+</pre><p>The first parameter of a <code class="literal">KeyBinding</code> is
a string that represents an X Window System KeySym string for
the key. This is typically a string from
- <TT
-CLASS="LITERAL"
->/usr/include/X11/keysymdef.h</TT
-> with the
+ <code class="literal">/usr/include/X11/keysymdef.h</code> with the
preceding 'XK_' removed (e.g., XK_KP_Enter becomes the string
'KP_Enter'), and is used as a means to express the physical
- key associated with the KeySym.</P
-><P
->The second parameter is a bit mask that defines which
+ key associated with the KeySym.</p><p>The second parameter is a bit mask that defines which
modifiers the keybinding cares about. If it does not care
about any modifier state, then this mask can be set to 0. In
the example above, the keybinding is being told to pay
- attention to the <TT
-CLASS="LITERAL"
->MODIFIER_ORCA</TT
-> modifier,
+ attention to the <code class="literal">MODIFIER_ORCA</code> modifier,
which is a modifier Orca sets when the "Insert" key is
pressed. Other examples of modifier bit positions include
those defined in the AT-SPI Accessibility specification:
MODIFIER_SHIFT, MODIFIER_SHIFTLOCK, MODIFIER_CONTROL,
MODIFIER_ALT, MODIFIER_META, MODIFIER_META2, MODIFIER_META3,
and MODIFIER_NUMLOCK. These can be obtained via the
- <TT
-CLASS="LITERAL"
->orca.atspi.Accessibility</TT
-> field. For
+ <code class="literal">orca.atspi.Accessibility</code> field. For
example,
- <TT
-CLASS="LITERAL"
->orca.atspi.Accessibility.MODIFIER_SHIFTLOCK</TT
->.</P
-><P
->The third parameter is a bit mask that defines what the
+ <code class="literal">orca.atspi.Accessibility.MODIFIER_SHIFTLOCK</code>.</p><p>The third parameter is a bit mask that defines what the
modifier settings must be. If a bit is set, it means the
associated modifier must be set. The only meaningful bits in
this mask are those that are defined by the second
parameter. In the example above, the keybinding cares
- about the <TT
-CLASS="LITERAL"
->MODIFIER_ORCA</TT
-> modifier, and
- the third parameter says this modifier must be set.</P
-><P
->The last parameter is the
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
-> to us if the user types a
+ about the <code class="literal">MODIFIER_ORCA</code> modifier, and
+ the third parameter says this modifier must be set.</p><p>The last parameter is the
+ <code class="literal">InputEventHandler</code> to us if the user types a
keystroke qualified by the previous
- parameters. <TT
-CLASS="LITERAL"
->InputEventHandler</TT
->s are
- described in the previous section.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGBRAILLEBINDINGS"
->4.4. Defining Braille Bindings</A
-></H2
-><P
->Refreshable braille displays have buttons that the user
+ parameters. <code class="literal">InputEventHandler</code>s are
+ described in the previous section.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sgbraillebindings"></a>Defining Braille Bindings</h2></div></div></div><p>Refreshable braille displays have buttons that the user
can press. The BrlTTY system provides a means for
standardizing the types of input events one can generate using
these buttons, and a script can set up braille bindings to
- handle these events.</P
-><P
->The braille bindings for a script are held in the
- <TT
-CLASS="LITERAL"
->braillebindings</TT
-> field, which is a
+ handle these events.</p><p>The braille bindings for a script are held in the
+ <code class="literal">braillebindings</code> field, which is a
dictionary. The keys for the dictionary are BrlTTY constants
representing braille input events (see
- <TT
-CLASS="LITERAL"
->braille.py</TT
-> for a list), and the values are
- <TT
-CLASS="LITERAL"
->InputEventHandler</TT
-> instances:</P
-><PRE
-CLASS="PROGRAMLISTING"
->self.braillebindings[braille.CMD_TOP_LEFT] = reviewHomeHandler</PRE
-><P
->In the above example, the BrlTTY
- <TT
-CLASS="LITERAL"
->braille.CMD_TOP_LEFT</TT
-> input event has been
+ <code class="literal">braille.py</code> for a list), and the values are
+ <code class="literal">InputEventHandler</code> instances:</p><pre class="programlisting">
+self.braillebindings[braille.CMD_TOP_LEFT] = reviewHomeHandler
+</pre><p>In the above example, the BrlTTY
+ <code class="literal">braille.CMD_TOP_LEFT</code> input event has been
set to be handled by the same
- <TT
-CLASS="LITERAL"
->reviewHomeHandler</TT
-> instance described
- previously.</P
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="SGUTILITIES"
-></A
->Chapter 5. Script Utilities</H1
-><P
->There are many common things a script wants to do: generate
+ <code class="literal">reviewHomeHandler</code> instance described
+ previously.</p></div></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="sgutilities"></a>Chapter 5. Script Utilities</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#debug">Debug Utilities</a></span></dt><dt><span class="section"><a href="#sgtts">Speech Synthesis</a></span></dt><dd><dl><dt><span class="section"><a href="#sgspeechpy"><code class="literal">speech.py</code></a></span></dt><dt><span class="section"><a href="#sgsgpy"><code class="literal">speechgenerator.py</code></a></span></dt></dl></dd><dt><span class="section"><a href="#sgbrailleoutput">Braille Output</a></span></dt><dd><dl><dt><span class="section"><a href="#sgbraillepy"><code class="literal">braille.py</code></a></span></dt><dt><span class="section"><a href="#sgbgpy"><code class="literal">braillegenerator.py</code></a></span></dt></dl></dd></dl></div><p>There are many common things a script wan
ts to do: generate
speech, update braille, etc. In addition, there are many common
things a script writer wants to do, especially getting debug
output to determine just what the AT-SPI is sending it. This
chapter discusses the debug utilities of Orca as well as a
variety of utilities to assist a script in managing speech,
- braille, and magnification.</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="DEBUG"
->5.1. Debug Utilities</A
-></H2
-><P
->The debug utilities (defined in the
- <TT
-CLASS="LITERAL"
->debug.py</TT
-> module) of Orca provide a means
+ braille, and magnification.</p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="debug"></a>Debug Utilities</h2></div></div></div><p>The debug utilities (defined in the
+ <code class="literal">debug.py</code> module) of Orca provide a means
for selectively turning on information to be sent to the
console where Orca is running. This information is quite
useful in determining what is happening inside Orca as well as
- what the AT-SPI is sending to Orca.</P
-><P
->Let's begin the discussion of the debug utilities with the
+ what the AT-SPI is sending to Orca.</p><p>Let's begin the discussion of the debug utilities with the
top question on any script writer's mind: "What do I name my
script?" As you may recall, the name of a script is based
upon the name of the application as given to us by the AT-SPI.
One of the easy ways to determine this is to listen for
- <TT
-CLASS="LITERAL"
->window:activate</TT
-> events that will be issued
+ <code class="literal">window:activate</code> events that will be issued
when an application is started. These events can then be used
- to determine the name of the application.</P
-><P
->Fortunately, the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> already registers
- for <TT
-CLASS="LITERAL"
->window:activate</TT
-> events, so all you need
+ to determine the name of the application.</p><p>Fortunately, the
+ <code class="literal">focus_tracking_presenter</code> already registers
+ for <code class="literal">window:activate</code> events, so all you need
to do is tell Orca to print these events out when it receives
them. The method for doing this involves telling the debug
utilities what to do, and this can be done by modifying your
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->.</P
-><P
->There are two main settings to tell Orca to print out
+ <code class="literal">~/.orca/user-settings.py</code>.</p><p>There are two main settings to tell Orca to print out
events: an event filter and an event debug level. The event
filter is a regular expression that is used to match AT-SPI
event types, and the event debug level specifies a threshold
for when to actually print information to the console (for
more complete detail on these settings, refer to
- <TT
-CLASS="LITERAL"
->debug.py</TT
->). These settings can be modified
+ <code class="literal">debug.py</code>). These settings can be modified
by adding the following lines to your
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->:</P
-><PRE
-CLASS="PROGRAMLISTING"
->orca.debug.setEventDebugFilter(re.compile('window:activate'))
+ <code class="literal">~/.orca/user-settings.py</code>:</p><pre class="programlisting">
+orca.debug.setEventDebugFilter(re.compile('window:activate'))
orca.debug.setEventDebugLevel(debug.LEVEL_OFF)
- </PRE
-><P
->Now, when you rerun Orca, it will output information
- whenever it receives a <TT
-CLASS="LITERAL"
->window:activate</TT
->
+ </pre><p>Now, when you rerun Orca, it will output information
+ whenever it receives a <code class="literal">window:activate</code>
event from the AT-SPI registry. For example, if you run Star
- Office, you should see output similar to the following:</P
-><PRE
-CLASS="PROGRAMLISTING"
->OBJECT EVENT: window:activate detail=(0,0)
+ Office, you should see output similar to the following:</p><pre class="programlisting">
+OBJECT EVENT: window:activate detail=(0,0)
app='StarOffice' name='StarOffice' role='frame'
state='ENABLED FOCUSABLE RESIZABLE SENSITIVE SHOWING VISIBLE'
- </PRE
-><P
->The string <TT
-CLASS="LITERAL"
->app='StarOffice'</TT
-> indicates
+ </pre><p>The string <code class="literal">app='StarOffice'</code> indicates
the name of the application is 'StarOffice.' As such, if you
wanted to write a custom script, you would call it
- <TT
-CLASS="LITERAL"
->StarOffice.py</TT
->.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> you can also get other information while Orca is
- running by pressing the debug keystrokes:</P
-><P
-></P
-><UL
-><LI
-><P
->Insert+F5: dump a list of all applications to the
- console</P
-></LI
-><LI
-><P
->Insert+F6: speak/braille information about the active
- script and application with focus</P
-></LI
-><LI
-><P
->Insert+F7: dump the ancestors of the object with focus
- to the console</P
-></LI
-><LI
-><P
->Insert+F8: dump the entire widget hierarchy of the
- application with focus to the console</P
-></LI
-></UL
-><P
->The debug module also includes a number of other methods,
+ <code class="literal">StarOffice.py</code>.</p><p><span class="emphasis"><em>NOTE:</em></span> you can also get other information while Orca is
+ running by pressing the debug keystrokes:</p><div class="itemizedlist"><ul type="disc"><li><p>Insert+F5: dump a list of all applications to the
+ console</p></li><li><p>Insert+F6: speak/braille information about the active
+ script and application with focus</p></li><li><p>Insert+F7: dump the ancestors of the object with focus
+ to the console</p></li><li><p>Insert+F8: dump the entire widget hierarchy of the
+ application with focus to the console</p></li></ul></div><p>The debug module also includes a number of other methods,
each of which is described in more detail in
- <TT
-CLASS="LITERAL"
->debug.py</TT
->. Note that each method includes a
- debug level threshold. The <TT
-CLASS="LITERAL"
->debug.py</TT
-> module
+ <code class="literal">debug.py</code>. Note that each method includes a
+ debug level threshold. The <code class="literal">debug.py</code> module
has a description of various level settings and what to expect
- for output.</P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="LITERAL"
->setDebugLevel(newLevel)</TT
->: sets the
+ for output.</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">setDebugLevel(newLevel)</code>: sets the
debug level threshold, turning on or off the various debug
code built in to the various Orca modules. This is
typically called from
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->.</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->setEventDebugLevel(newLevel)</TT
->:
+ <code class="literal">~/.orca/user-settings.py</code>.</p></li><li><p><code class="literal">setEventDebugLevel(newLevel)</code>:
described above; typically called from
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->.</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->setEventDebugFilter(regExpression)</TT
->:
+ <code class="literal">~/.orca/user-settings.py</code>.</p></li><li><p><code class="literal">setEventDebugFilter(regExpression)</code>:
described above; typically called from
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->.</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->printException(level)</TT
->: if an
+ <code class="literal">~/.orca/user-settings.py</code>.</p></li><li><p><code class="literal">printException(level)</code>: if an
exception is caught, this can be used to print out detail
- about it</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->printStack(level)</TT
->: prints the
+ about it</p></li><li><p><code class="literal">printStack(level)</code>: prints the
current stack; useful for determining when and why a code
- path is being executed</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->println(level, text)</TT
->: prints the
- given text; useful for general debug output</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->printObjectEvent(level, event)</TT
->:
- prints out the given AT-SPI event</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->printObjectEvent(level, event)</TT
->:
+ path is being executed</p></li><li><p><code class="literal">println(level, text)</code>: prints the
+ given text; useful for general debug output</p></li><li><p><code class="literal">printObjectEvent(level, event)</code>:
+ prints out the given AT-SPI event</p></li><li><p><code class="literal">printObjectEvent(level, event)</code>:
prints out the given AT-SPI event, using the event debug
level as an additional threshold; this is already used by
- the <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->, so you
- are unlikely to need it</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->printInputEvent(level, string)</TT
->:
+ the <code class="literal">focus_tracking_presenter</code>, so you
+ are unlikely to need it</p></li><li><p><code class="literal">printInputEvent(level, string)</code>:
prints out the given AT-SPI event, using the event debug
level as an additional threshold; this is already used by
- <TT
-CLASS="LITERAL"
->orca.py</TT
-> (for keyboard events) and
- <TT
-CLASS="LITERAL"
->braille.py</TT
-> (for braille events), so you
- are unlikely to need it</P
-></LI
-></UL
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> One debug level of interest is
- <TT
-CLASS="LITERAL"
->debug.LEVEL_FINE</TT
->. This level will tell you
+ <code class="literal">orca.py</code> (for keyboard events) and
+ <code class="literal">braille.py</code> (for braille events), so you
+ are unlikely to need it</p></li></ul></div><p><span class="emphasis"><em>NOTE:</em></span> One debug level of interest is
+ <code class="literal">debug.LEVEL_FINE</code>. This level will tell you
when a script is activated, and can be useful to determine if
Orca is actually finding your script! For example, when the
- script for the <TT
-CLASS="LITERAL"
->gnome-terminal</TT
-> is activated
- by the <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
->, you will
- see the following output:</P
-><PRE
-CLASS="PROGRAMLISTING"
->ACTIVE SCRIPT: gnome-terminal (module=orca.scripts.gnome-terminal)
- </PRE
-><P
->Notice that the class of the script instance is included.
+ script for the <code class="literal">gnome-terminal</code> is activated
+ by the <code class="literal">focus_tracking_presenter</code>, you will
+ see the following output:</p><pre class="programlisting">
+ACTIVE SCRIPT: gnome-terminal (module=orca.scripts.gnome-terminal)
+ </pre><p>Notice that the class of the script instance is included.
If you determine that this class is not what you expect when
you are developing your custom script, then something went
wrong when trying to find or load your custom script. This
can often happen because Python performs a lot of late binding
and compilation, thus errors are often not encountered until a
specific code path is executed at run time. You can tell the
- <TT
-CLASS="LITERAL"
->focus_tracking_presenter</TT
-> to give you more
+ <code class="literal">focus_tracking_presenter</code> to give you more
information about any possible failures or exceptions it
handles in this area by setting the debug level to
- <TT
-CLASS="LITERAL"
->debug.LEVEL_FINEST</TT
->.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGTTS"
->5.2. Speech Synthesis</A
-></H2
-><P
->Orca provides two main modules for speech output:
- <TT
-CLASS="LITERAL"
->speech.py</TT
-> and
- <TT
-CLASS="LITERAL"
->speechgenerator.py</TT
->. The
- <TT
-CLASS="LITERAL"
->speech.py</TT
-> module provides the main interface
+ <code class="literal">debug.LEVEL_FINEST</code>.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sgtts"></a>Speech Synthesis</h2></div></div></div><p>Orca provides two main modules for speech output:
+ <code class="literal">speech.py</code> and
+ <code class="literal">speechgenerator.py</code>. The
+ <code class="literal">speech.py</code> module provides the main interface
to the speech synthesis subsystem. The
- <TT
-CLASS="LITERAL"
->speechgenerator.py</TT
-> module provides a
- <TT
-CLASS="LITERAL"
->SpeechGenerator</TT
-> class that can be used to to
+ <code class="literal">speechgenerator.py</code> module provides a
+ <code class="literal">SpeechGenerator</code> class that can be used to to
actually generate the text to be spoken for various objects.
The expected use of the two modules is as follows: a script will
create its own instance of a
- <TT
-CLASS="LITERAL"
->SpeechGenerator</TT
-> and will use it to generate
+ <code class="literal">SpeechGenerator</code> and will use it to generate
text. The script will then pass this text to the
- <TT
-CLASS="LITERAL"
->speech.py</TT
-> module to be spoken.</P
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="SGSPEECHPY"
->5.2.1. <TT
-CLASS="LITERAL"
->speech.py</TT
-></A
-></H3
-><P
->For the purposes of script writing, the main entry
- points of the <TT
-CLASS="LITERAL"
->speech.py</TT
-> module are
- <TT
-CLASS="LITERAL"
->speak</TT
->,
- <TT
-CLASS="LITERAL"
->speakUtterances</TT
->, and
- <TT
-CLASS="LITERAL"
->stop</TT
-></P
-><P
->See the <TT
-CLASS="LITERAL"
->speech.py</TT
-> module for more
- information.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="SGSGPY"
->5.2.2. <TT
-CLASS="LITERAL"
->speechgenerator.py</TT
-></A
-></H3
-><P
->The primary goal of a <TT
-CLASS="LITERAL"
->SpeechGenerator</TT
->
+ <code class="literal">speech.py</code> module to be spoken.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sgspeechpy"></a><code class="literal">speech.py</code></h3></div></div></div><p>For the purposes of script writing, the main entry
+ points of the <code class="literal">speech.py</code> module are
+ <code class="literal">speak</code>,
+ <code class="literal">speakUtterances</code>, and
+ <code class="literal">stop</code></p><p>See the <code class="literal">speech.py</code> module for more
+ information.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sgsgpy"></a><code class="literal">speechgenerator.py</code></h3></div></div></div><p>The primary goal of a <code class="literal">SpeechGenerator</code>
is to create text to be spoken for an accessible object.
There are two public entry points into a
- <TT
-CLASS="LITERAL"
->SpeechGenerator</TT
->:</P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="LITERAL"
->getSpeech(obj, already_focused)</TT
->:
+ <code class="literal">SpeechGenerator</code>:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">getSpeech(obj, already_focused)</code>:
returns a list of strings to be spoken
for the given accessible object. The
- <TT
-CLASS="LITERAL"
->already_focused</TT
-> boolean parameter
+ <code class="literal">already_focused</code> boolean parameter
provides a hint to the speech generator about how much
text to generate. For example, if a check box that
already has focus is to be spoken, usually the reason
for this is that the state changed between checked and
unchecked. As a result, an appropriate thing to do in
this situation is to only speak the new change in
- state (e.g., "checked").</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->getSpeechContext(obj,
- stopAncestor)</TT
->: returns a list
+ state (e.g., "checked").</p></li><li><p><code class="literal">getSpeechContext(obj,
+ stopAncestor)</code>: returns a list
of strings to be spoken that describe the visual context
of the given accessible object. This is loosely
represented by the hierarchical relationship of the
object (i.e., the "Quit" button in the "File" menu in
the ...), and the amount of information can be contained
by specifying an accessible
- <TT
-CLASS="LITERAL"
->stopAncestor</TT
-> above which we do not
+ <code class="literal">stopAncestor</code> above which we do not
want to know anything about. The primary use of this
method is to provide the user with feedback regarding
the relevant visual context information that changed
when the locus of focus changes, but this method is also
- useful for assisting in "where am I" queries.</P
-></LI
-></UL
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> Orca currently provides some level of support for
- verbosity via the <TT
-CLASS="LITERAL"
->VERBOSITY_LEVEL</TT
-> fields
- of the <TT
-CLASS="LITERAL"
->settings.py</TT
-> module. There are
+ useful for assisting in "where am I" queries.</p></li></ul></div><p><span class="emphasis"><em>NOTE:</em></span> Orca currently provides some level of support for
+ verbosity via the <code class="literal">VERBOSITY_LEVEL</code> fields
+ of the <code class="literal">settings.py</code> module. There are
currently two verbosity levels:
- <TT
-CLASS="LITERAL"
->VERBOSITY_LEVEL_BRIEF</TT
-> and
- <TT
-CLASS="LITERAL"
->VERBOSITY_LEVEL_VERBOSE</TT
->. A
- <TT
-CLASS="LITERAL"
->SpeechGenerator</TT
-> subclass is expected to
- examine the <TT
-CLASS="LITERAL"
->speechVerbosityLevel</TT
-> property
- of the <TT
-CLASS="LITERAL"
->settings.py</TT
-> module and provide the
- appropriate level of text:</P
-><PRE
-CLASS="PROGRAMLISTING"
->if settings.speechVerbosityLevel == settings.VERBOSITY_LEVEL_VERBOSE:
+ <code class="literal">VERBOSITY_LEVEL_BRIEF</code> and
+ <code class="literal">VERBOSITY_LEVEL_VERBOSE</code>. A
+ <code class="literal">SpeechGenerator</code> subclass is expected to
+ examine the <code class="literal">speechVerbosityLevel</code> property
+ of the <code class="literal">settings.py</code> module and provide the
+ appropriate level of text:</p><pre class="programlisting">
+if settings.speechVerbosityLevel == settings.VERBOSITY_LEVEL_VERBOSE:
utterances.append(rolenames.getSpeechForRoleName(obj))
- </PRE
-></DIV
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="SGBRAILLEOUTPUT"
->5.3. Braille Output</A
-></H2
-><P
->Like speech, Orca provides two main modules for braille:
- <TT
-CLASS="LITERAL"
->braille.py</TT
-> and
- <TT
-CLASS="LITERAL"
->braillegenerator.py</TT
->. The
- <TT
-CLASS="LITERAL"
->braille.py</TT
-> module provides the main interface
+ </pre></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sgbrailleoutput"></a>Braille Output</h2></div></div></div><p>Like speech, Orca provides two main modules for braille:
+ <code class="literal">braille.py</code> and
+ <code class="literal">braillegenerator.py</code>. The
+ <code class="literal">braille.py</code> module provides the main interface
to the braille display. The
- <TT
-CLASS="LITERAL"
->braillegenerator.py</TT
-> module provides a
- <TT
-CLASS="LITERAL"
->BrailleGenerator</TT
-> class that can be used to to
+ <code class="literal">braillegenerator.py</code> module provides a
+ <code class="literal">BrailleGenerator</code> class that can be used to to
actually generate the text to be displayed for various objects.
The expected use of the two modules is as follows: a script will
create its own instance of a
- <TT
-CLASS="LITERAL"
->BrailleGenerator</TT
-> and will use it to braille
+ <code class="literal">BrailleGenerator</code> and will use it to braille
regions. The script will then pass these braille regions to the
- <TT
-CLASS="LITERAL"
->braille.py</TT
-> module to be displayed.</P
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="SGBRAILLEPY"
->5.3.1. <TT
-CLASS="LITERAL"
->braille.py</TT
-></A
-></H3
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->TODO:</I
-></SPAN
-> [[[WDW - much writing to be done here, especially
+ <code class="literal">braille.py</code> module to be displayed.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sgbraillepy"></a><code class="literal">braille.py</code></h3></div></div></div><p><span class="emphasis"><em>TODO:</em></span> [[[WDW - much writing to be done here, especially
regarding how regions will provide automatic support for
- cursor routing keys.]]]</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H3
-CLASS="SECTION"
-><A
-NAME="SGBGPY"
->5.3.2. <TT
-CLASS="LITERAL"
->braillegenerator.py</TT
-></A
-></H3
-><P
->The primary goal of a <TT
-CLASS="LITERAL"
->BrailleGenerator</TT
->
+ cursor routing keys.]]]</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sgbgpy"></a><code class="literal">braillegenerator.py</code></h3></div></div></div><p>The primary goal of a <code class="literal">BrailleGenerator</code>
is to create text to be displayed for an accessible object.
There are two public entry points into a
- <TT
-CLASS="LITERAL"
->BrailleGenerator</TT
->:</P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="LITERAL"
->getBrailleRegions(obj,
- groupChildren=True)</TT
->: returns a list of two
+ <code class="literal">BrailleGenerator</code>:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">getBrailleRegions(obj,
+ groupChildren=True)</code>: returns a list of two
items: the first is an ordered list of braille
- <TT
-CLASS="LITERAL"
->Region</TT
-> instances that represent text
+ <code class="literal">Region</code> instances that represent text
to be displayed on the braille display, left-to-right on
one line; and the second is an element from the first
- list that represents which <TT
-CLASS="LITERAL"
->Region</TT
-> has
+ list that represents which <code class="literal">Region</code> has
"focus" and should be represented by the braille cursor
- on the display.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->TODO:</I
-></SPAN
-> [[[WDW - describe grouping of children.]]]</P
-></LI
-><LI
-><P
-><TT
-CLASS="LITERAL"
->getBrailleContext(obj)</TT
->: returns
+ on the display.</p><p><span class="emphasis"><em>TODO:</em></span> [[[WDW - describe grouping of children.]]]</p></li><li><p><code class="literal">getBrailleContext(obj)</code>: returns
an ordered list (i.e., an array) of braille
- <TT
-CLASS="LITERAL"
->Region</TT
-> instances that describe the
+ <code class="literal">Region</code> instances that describe the
visual context of the given accessible object. This is
loosely represented by the hierarchical relationship of
the object (i.e., the "Quit" button in the "File" menu
- in the ...).</P
-></LI
-></UL
-><P
->Typically, a script will "build up" a single logical
+ in the ...).</p></li></ul></div><p>Typically, a script will "build up" a single logical
line of text for the braille display. The beginning of this
line will be the result of the call to
- <TT
-CLASS="LITERAL"
->getBrailleContext</TT
-> and the remainder of
+ <code class="literal">getBrailleContext</code> and the remainder of
the line will be the result of one or more calls to
- <TT
-CLASS="LITERAL"
->getBrailleRegions</TT
->. Since the logical
+ <code class="literal">getBrailleRegions</code>. Since the logical
line will typically be longer than the number of cells on
- the braille display, the <TT
-CLASS="LITERAL"
->braille.py</TT
->
+ the braille display, the <code class="literal">braille.py</code>
module will scroll to show the braille
- <TT
-CLASS="LITERAL"
->Region</TT
-> with focus. Furthermore, the
- <TT
-CLASS="LITERAL"
->braille.py</TT
-> will also respond to BrlTTY
+ <code class="literal">Region</code> with focus. Furthermore, the
+ <code class="literal">braille.py</code> will also respond to BrlTTY
input events to allow the user to use braille display input
- buttons for scrolling to review the entire line.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> Orca currently provides some level of support for
- verbosity via the <TT
-CLASS="LITERAL"
->VERBOSITY_LEVEL</TT
-> fields
- of the <TT
-CLASS="LITERAL"
->settings.py</TT
-> module. There are
+ buttons for scrolling to review the entire line.</p><p><span class="emphasis"><em>NOTE:</em></span> Orca currently provides some level of support for
+ verbosity via the <code class="literal">VERBOSITY_LEVEL</code> fields
+ of the <code class="literal">settings.py</code> module. There are
currently two verbosity levels:
- <TT
-CLASS="LITERAL"
->VERBOSITY_LEVEL_BRIEF</TT
-> and
- <TT
-CLASS="LITERAL"
->VERBOSITY_LEVEL_VERBOSE</TT
->. A
- <TT
-CLASS="LITERAL"
->BrailleGenerator</TT
-> subclass is expected to
- examine the <TT
-CLASS="LITERAL"
->brailleVerbosityLevel</TT
-> property
- of the <TT
-CLASS="LITERAL"
->settings.py</TT
-> module and provide the
- appropriate level of text:</P
-><PRE
-CLASS="PROGRAMLISTING"
->if settings.brailleVerbosityLevel == settings.VERBOSITY_LEVEL_VERBOSE:
+ <code class="literal">VERBOSITY_LEVEL_BRIEF</code> and
+ <code class="literal">VERBOSITY_LEVEL_VERBOSE</code>. A
+ <code class="literal">BrailleGenerator</code> subclass is expected to
+ examine the <code class="literal">brailleVerbosityLevel</code> property
+ of the <code class="literal">settings.py</code> module and provide the
+ appropriate level of text:</p><pre class="programlisting">
+if settings.brailleVerbosityLevel == settings.VERBOSITY_LEVEL_VERBOSE:
regions.append(braille.Region(
" " + rolenames.getBrailleForRoleName(obj)))
- </PRE
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="I18N"
-></A
->Chapter 6. Internationalization (I18N) Support</H1
-><P
->All human-consumable text obtained from AT-SPI calls is
+ </pre></div></div></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="i18n"></a>Chapter 6. Internationalization (I18N) Support</h2></div></div></div><p>All human-consumable text obtained from AT-SPI calls is
expected to be in a localized form. As such, Orca does not
do any extra localization processing when working with text
- obtained via the AT-SPI.</P
-><P
->For text generated by Orca itself, Orca handles
- internationalization and localization using the [<SPAN
-CLASS="CITATION"
-><A
-HREF="#GETTEXT"
-><I
->gettext</I
-></A
->></SPAN
->] support
+ obtained via the AT-SPI.</p><p>For text generated by Orca itself, Orca handles
+ internationalization and localization using the [<span class="citation"><a href="#gettext">gettext</a></span>] support
of Python. The gettext support of Python is similar to the GNU
gettext module. Each human consumable string of Orca is US
English text wrapped in a call to gettext.gettext. The call to
gettext.gettext will either return a localized string or default
to the US English text. Orca depends upon an active and thriving
community of open source translators to provide the
- localizations.</P
-><P
->The synthesis of localized speech is to be provided by the
+ localizations.</p><p>The synthesis of localized speech is to be provided by the
underlying gnome-speech engine. That is, Orca merely passes
localized text to the speech engine, which is responsible for
- the correct interpretation and pronunciation.</P
-><P
->The generation of localized braille is to be determined.
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->TODO:</I
-></SPAN
-> BrlTTY currently does not support this at the moment, but
+ the correct interpretation and pronunciation.</p><p>The generation of localized braille is to be determined.
+ <span class="emphasis"><em>TODO:</em></span> BrlTTY currently does not support this at the moment, but
it is expected that the BrlTTY developers will add this in the
- future.</P
-></DIV
-><A
-NAME="ARCHBIBLIOGRAPHY"
-></A
-><HR><H1
-><A
-NAME="ARCHBIBLIOGRAPHY"
-></A
->Bibliography</H1
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="AT-SPI"
-></A
-><P
->[AT-SPI] <SPAN
-CLASS="AUTHOR"
->Bill Haneman, </SPAN
-><SPAN
-CLASS="AUTHOR"
->Marc Mulcahy, </SPAN
-><SPAN
-CLASS="AUTHOR"
->and Michael Meeks</SPAN
->, <I
-><A
-HREF="http://directory.fsf.org/accessibility/at-spi.html"
-TARGET="_top"
-> AT-SPI</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="ACSS"
-></A
-><P
->[ACSS] <SPAN
-CLASS="AUTHOR"
->T.V. Raman</SPAN
->, <I
-><A
-HREF="http://www.w3.org/TR/1998/REC-CSS2-19980512/aural.html"
-TARGET="_top"
->Aural Style Sheets</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="BONOBO"
-></A
-><P
->[Bonobo] <SPAN
-CLASS="AUTHOR"
->George Lebl</SPAN
->, <I
-><A
-HREF="http://lidn.sourceforge.net/articles/gnomenclatureintrotobonobo/"
-TARGET="_top"
-> Gnomenclature: Intro to bonobo</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="BRLTTY"
-></A
-><P
->[BRLTTY] <SPAN
-CLASS="AUTHOR"
->Dave Meilke, </SPAN
-><SPAN
-CLASS="AUTHOR"
->Nicolas Pitre, </SPAN
-><SPAN
-CLASS="AUTHOR"
->and Stephane Doyon</SPAN
->, <I
-><A
-HREF="http://directory.fsf.org/accessibility/brltty.html"
-TARGET="_top"
-> BRLTTY</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="EMACSPEAK"
-></A
-><P
->[Emacspeak] <SPAN
-CLASS="AUTHOR"
->T.V. Raman</SPAN
->, <I
-><A
-HREF="http://emacspeak.sourceforge.net/"
-TARGET="_top"
->Emacspeak</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="GAIL"
-></A
-><P
->[GAIL] <SPAN
-CLASS="AUTHOR"
->Bill Haneman</SPAN
->, <I
-><A
-HREF="http://freshmeat.net/projects/gail/"
-TARGET="_top"
-> GAIL</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="GETTEXT"
-></A
-><P
->[gettext] <SPAN
-CLASS="AUTHOR"
->TODO: Unknown</SPAN
->, <I
-><A
-HREF="http://docs.python.org/lib/module-gettext.html"
-TARGET="_top"
-> gettext</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="GNOME-MAG"
-></A
-><P
->[gnome-mag] <SPAN
-CLASS="AUTHOR"
->Bill Haneman</SPAN
->, <I
-><A
-HREF="http://directory.fsf.org/accessibility/gnome-mag.html"
-TARGET="_top"
-> gnome-mag</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="GNOME-SPEECH"
-></A
-><P
->[gnome-speech] <SPAN
-CLASS="AUTHOR"
->Marc Mulcahy </SPAN
-><SPAN
-CLASS="AUTHOR"
->and Michael Meeks</SPAN
->, <I
-><A
-HREF="http://directory.fsf.org/accessibility/gnome-speech.html"
-TARGET="_top"
-> gnome-speech</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="GNOPERNICUS"
-></A
-><P
->[Gnopernicus] <SPAN
-CLASS="AUTHOR"
->Remus Draica</SPAN
->, <I
-><A
-HREF="http://directory.fsf.org/accessibility/gnopernicus.html"
-TARGET="_top"
-> Gnopernicus</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="JAWS"
-></A
-><P
->[JAWS] <SPAN
-CLASS="AUTHOR"
-> Freedom Scientific</SPAN
->, <I
-><A
-HREF="http://www.freedomscientific.com/fsproducts/softwarejaws.asp"
-TARGET="_top"
-> JAWS</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-><DIV
-CLASS="BIBLIOENTRY"
-><A
-NAME="XKB"
-></A
-><P
->[XKB] <SPAN
-CLASS="AUTHOR"
->Erik Fortune, </SPAN
-><SPAN
-CLASS="AUTHOR"
->William Walker, </SPAN
-><SPAN
-CLASS="AUTHOR"
->Donna Converse, </SPAN
-><SPAN
-CLASS="AUTHOR"
->and George Sachs</SPAN
->, <I
-><A
-HREF="http://matrix.netsoc.tcd.ie/hcksplat/work/XKBlib.pdf"
-TARGET="_top"
-> The XKB keyboard extension</A
->
- </I
->.</P
-><DIV
-CLASS="BIBLIOENTRYBLOCK"
-STYLE="margin-left: 0.5in"
-></DIV
-></DIV
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
+ future.</p></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a name="archbibliography"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a name="at-spi"></a><p>[<span class="abbrev"><a name="at-spi.abbrev"></a>AT-SPI</span>] <span class="authorgroup"><span class="firstname">Bill</span> <span class="surname">Haneman</span>, <span class="firstname">Marc</span> <span class="surname">Mulcahy</span>, and <span class="firstname">Michael</span> <span class="surname">Meeks</span>. </span><span class="title"><i><a href="http://directory.fsf.org/accessibility/at-spi.html" target="_top">
+ AT-SPI</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="acss"></a><p>[<span class="abbrev"><a name="acss.abbrev"></a>ACSS</span>] <span class="authorgroup"><span class="firstname">T.V.</span> <span class="surname">Raman</span>. </span><span class="title"><i><a href="http://www.w3.org/TR/1998/REC-CSS2-19980512/aural.html" target="_top">Aural Style Sheets</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="bonobo"></a><p>[<span class="abbrev"><a name="bonobo.abbrev"></a>Bonobo</span>] <span class="author"><span class="firstname">George</span> <span class="surname">Lebl</span>. </span><span class="title"><i><a href="http://lidn.sourceforge.net/articles/gnomenclatureintrotobonobo/" target="_top">
+ Gnomenclature: Intro to bonobo</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="brltty"></a><p>[<span class="abbrev"><a name="brltty.abbrev"></a>BRLTTY</span>] <span class="authorgroup"><span class="firstname">Dave</span> <span class="surname">Meilke</span>, <span class="firstname">Nicolas</span> <span class="surname">Pitre</span>, and <span class="firstname">Stephane</span> <span class="surname">Doyon</span>. </span><span class="title"><i><a href="http://directory.fsf.org/accessibility/brltty.html" target="_top">
+ BRLTTY</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="emacspeak"></a><p>[<span class="abbrev"><a name="emacspeak.abbrev"></a>Emacspeak</span>] <span class="authorgroup"><span class="firstname">T.V.</span> <span class="surname">Raman</span>. </span><span class="title"><i><a href="http://emacspeak.sourceforge.net/" target="_top">Emacspeak</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="gail"></a><p>[<span class="abbrev"><a name="gail.abbrev"></a>GAIL</span>] <span class="author"><span class="firstname">Bill</span> <span class="surname">Haneman</span>. </span><span class="title"><i><a href="http://freshmeat.net/projects/gail/" target="_top">
+ GAIL</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="gettext"></a><p>[<span class="abbrev"><a name="gettext.abbrev"></a>gettext</span>] <span class="author"><span class="surname"><span class="emphasis"><em>TODO:</em></span> Unknown</span>. </span><span class="title"><i><a href="http://docs.python.org/lib/module-gettext.html" target="_top">
+ gettext</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="gnome-mag"></a><p>[<span class="abbrev"><a name="gnome-mag.abbrev"></a>gnome-mag</span>] <span class="author"><span class="firstname">Bill</span> <span class="surname">Haneman</span>. </span><span class="title"><i><a href="http://directory.fsf.org/accessibility/gnome-mag.html" target="_top">
+ gnome-mag</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="gnome-speech"></a><p>[<span class="abbrev"><a name="gnome-speech.abbrev"></a>gnome-speech</span>] <span class="authorgroup"><span class="firstname">Marc</span> <span class="surname">Mulcahy</span> and <span class="firstname">Michael</span> <span class="surname">Meeks</span>. </span><span class="title"><i><a href="http://directory.fsf.org/accessibility/gnome-speech.html" target="_top">
+ gnome-speech</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="gnopernicus"></a><p>[<span class="abbrev"><a name="gnopernicus.abbrev"></a>Gnopernicus</span>] <span class="author"><span class="firstname">Remus</span> <span class="surname">Draica</span>. </span><span class="title"><i><a href="http://directory.fsf.org/accessibility/gnopernicus.html" target="_top">
+ Gnopernicus</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="jaws"></a><p>[<span class="abbrev"><a name="jaws.abbrev"></a>JAWS</span>] <span class="author"><span class="firstname"></span> <span class="surname">Freedom Scientific</span>. </span><span class="title"><i><a href="http://www.freedomscientific.com/fsproducts/softwarejaws.asp" target="_top">
+ JAWS</a>
+ </i>. </span></p></div><div class="biblioentry"><a name="xkb"></a><p>[<span class="abbrev"><a name="xkb.abbrev"></a>XKB</span>] <span class="authorgroup"><span class="firstname">Erik</span> <span class="surname">Fortune</span>, <span class="firstname">William</span> <span class="surname">Walker</span>, <span class="firstname">Donna</span> <span class="surname">Converse</span>, and <span class="firstname">George</span> <span class="surname">Sachs</span>. </span><span class="title"><i><a href="http://matrix.netsoc.tcd.ie/hcksplat/work/XKBlib.pdf" target="_top">
+ The XKB keyboard extension</a>
+ </i>. </span></p></div></div></div></body></html>
diff --git a/docs/doc-set/internals.sgml b/docs/doc-set/internals.sgml
index b63b031..bf9e895 100644
--- a/docs/doc-set/internals.sgml
+++ b/docs/doc-set/internals.sgml
@@ -1,6 +1,6 @@
<!-- Copyright 2005-2008, Sun Microsystems, Inc. -->
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.0//EN"
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.0//EN" "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"
[
<!ENTITY blurb SYSTEM "blurb.sgml">
<!ENTITY legal SYSTEM "legal.sgml">
diff --git a/docs/doc-set/script_guide.sgml b/docs/doc-set/script_guide.sgml
index 7ea65f9..36ce74b 100644
--- a/docs/doc-set/script_guide.sgml
+++ b/docs/doc-set/script_guide.sgml
@@ -297,7 +297,7 @@
<title>Orca Script Diagram</title>
<mediaobject>
<imageobject>
- <imagedata fileref="script.jpg" format="JPEG">
+ <imagedata fileref="script.jpg" format="JPEG"/>
</imageobject>
<textobject>
<phrase>Orca Script Diagram</phrase>
@@ -468,8 +468,8 @@ def reviewHome(self, inputEvent):
<programlisting>
self.keybindings.add(
keybindings.KeyBinding("KP_7",
- 1 << orca.MODIFIER_ORCA,
- 1 << orca.MODIFIER_ORCA,
+ 1 << orca.MODIFIER_ORCA,
+ 1 << orca.MODIFIER_ORCA,
reviewHomeHandler))
</programlisting>
diff --git a/docs/doc-set/user_guide.html b/docs/doc-set/user_guide.html
index 227556b..46218dd 100644
--- a/docs/doc-set/user_guide.html
+++ b/docs/doc-set/user_guide.html
@@ -1,211 +1,36 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
-<HTML
-><HEAD
-><TITLE
->Orca User's Guide</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD
-><BODY
-CLASS="BOOK"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="BOOK"
-><A
-NAME="USERGUIDE"
-></A
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="USERGUIDE"
->Orca User's Guide</A
-></H1
-><DIV
-CLASS="LEGALNOTICE"
-><P
-></P
-><A
-NAME="AEN4"
-></A
-><P
->Copyright 2005-2008, Sun Microsystems, Inc.</P
-><P
-></P
-></DIV
-><HR></DIV
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="#UGFORWARD"
->Foreword</A
-></DT
-><DT
->1. <A
-HREF="#UGINTRODUCTION"
->Introduction</A
-></DT
-><DT
->2. <A
-HREF="#UGRUNNING"
->Running Orca</A
-></DT
-><DT
->3. <A
-HREF="#UGCUSTOMIZATION"
->Customizing Orca</A
-></DT
-><DD
-><DL
-><DT
->3.1. <A
-HREF="#UGMODKEYS"
-><TT
-CLASS="LITERAL"
->orcaModifierKeys</TT
-> - Override "Insert" as Orca Modifier Key</A
-></DT
-></DL
-></DD
-></DL
-></DIV
-><DIV
-CLASS="PREFACE"
-><HR><H1
-><A
-NAME="UGFORWARD"
-></A
->Foreword</H1
-><P
->Orca is a flexible, extensible, and powerful assistive
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Orca User's Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="userguide"></a>Orca User's Guide</h1></div><div><div class="legalnotice"><a name="id2488892"></a><p>Copyright 2005-2008, Sun Microsystems, Inc.</p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#ugforward">Foreword</a></span></dt><dt><span class="chapter"><a href="#ugintroduction">1. Introduction</a></span></dt><dt><span class="chapter"><a href="#ugrunning">2. Running Orca</a></span></dt><dt><span class="chapter"><a href="#ugcustomization">3. Customizing Orca</a></span></dt><dd><dl><dt><span class="section"><a href="#ugmodkeys"><code class="literal">orcaMod
ifierKeys</code> - Override "Insert" as Orca Modifier Key</a></span></dt></dl></dd></dl></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ugforward"></a>Foreword</h2></div></div></div><p>Orca is a flexible, extensible, and powerful assistive
technology that provides end-user access to applications and
toolkits that support the AT-SPI (e.g., the GNOME desktop). With
early input from and continued engagement with its end users, Orca
has been designed and implemented by the Sun Microsystems, Inc.,
- Accessibility Program Office.</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> Orca is currently a work in progress. As a result, this
+ Accessibility Program Office.</p><p><span class="emphasis"><em>NOTE:</em></span> Orca is currently a work in progress. As a result, this
and other books in the Orca Documentation Series are under
continuous modification and are also in various states of
- completeness.</P
-><P
->This book provides a guide for the installation, configuration
+ completeness.</p><p>This book provides a guide for the installation, configuration
and use of Orca. It also includes details on how users can customize
the keyboard and braille input mappings of Orca.
- </P
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="UGINTRODUCTION"
-></A
->Chapter 1. Introduction</H1
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->TODO:</I
-></SPAN
-> To be written. This currently contains just the most
+ </p></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ugintroduction"></a>Chapter 1. Introduction</h2></div></div></div><p><span class="emphasis"><em>TODO:</em></span> To be written. This currently contains just the most
important stuff you need to know. In addition, you should always
- visit <A
-HREF="http://live.gnome.org/Orca"
-TARGET="_top"
-> http://live.gnome.org/Orca</A
-> for the
- latest information and hints on using Orca.</P
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="UGRUNNING"
-></A
->Chapter 2. Running Orca</H1
-><P
->You can run Orca in many ways:</P
-><P
-></P
-><UL
-><LI
-><P
->Using the <TT
-CLASS="LITERAL"
->orca</TT
-> command from a terminal
+ visit <a href="http://live.gnome.org/Orca" target="_top">
+ http://live.gnome.org/Orca</a> for the
+ latest information and hints on using Orca.</p></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ugrunning"></a>Chapter 2. Running Orca</h2></div></div></div><p>You can run Orca in many ways:</p><div class="itemizedlist"><ul type="disc"><li><p>Using the <code class="literal">orca</code> command from a terminal
or virtual console. For many users, this is the easiest and
- most accessible way to launch Orca.</P
-></LI
-><LI
-><P
->Via the "Run Application" dialog that you can bring up
- by pressing <TT
-CLASS="LITERAL"
->Alt+F2</TT
->. In this dialog, type
- <TT
-CLASS="LITERAL"
->orca</TT
-> and press
- <TT
-CLASS="LITERAL"
->Return</TT
->.</P
-></LI
-><LI
-><P
->Via the "Orca Screen Reader and Magnifier" menu item
+ most accessible way to launch Orca.</p></li><li><p>Via the "Run Application" dialog that you can bring up
+ by pressing <code class="literal">Alt+F2</code>. In this dialog, type
+ <code class="literal">orca</code> and press
+ <code class="literal">Return</code>.</p></li><li><p>Via the "Orca Screen Reader and Magnifier" menu item
available from the "Accessibility" submenu off of the
- "Applications" menu on some systems.</P
-></LI
-><LI
-><P
->For GNOME 2.16 and later, via the "Assistive Technology
+ "Applications" menu on some systems.</p></li><li><p>For GNOME 2.16 and later, via the "Assistive Technology
Support" preferences dialog that you can launch from the
"Preferences" menu on some systems. This will enable
accessibility in your environment and tell Orca to
- automatically launch when you log in.</P
-></LI
-><LI
-><P
->Via the "Startup Programs" tab in the "Sessions" dialog
+ automatically launch when you log in.</p></li><li><p>Via the "Startup Programs" tab in the "Sessions" dialog
that you can launch from the "Preferences" menu on some
systems. This will automatically launch Orca when you
- log in if you add <TT
-CLASS="LITERAL"
->orca</TT
-> as a startup
- program.</P
-></LI
-></UL
-><P
->When you run the <TT
-CLASS="LITERAL"
->orca</TT
-> command from a
- terminal window, you have the following options:</P
-><PRE
-CLASS="PROGRAMLISTING"
->Usage: orca [OPTION...]
+ log in if you add <code class="literal">orca</code> as a startup
+ program.</p></li></ul></div><p>When you run the <code class="literal">orca</code> command from a
+ terminal window, you have the following options:</p><pre class="programlisting">
+Usage: orca [OPTION...]
-?, --help Show this help message
-v, --version 0.9.0
@@ -218,156 +43,44 @@ will automatically launch the preferences set up unless
the -n or --no-setup option is used.
Report bugs to orca-list gnome org
- </PRE
-><P
->If you have not run Orca before, it will automatically query
+ </pre><p>If you have not run Orca before, it will automatically query
you for preferences, such as whether you want to use speech,
braille, or magnification. These preferences are saved in
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
-> (see material in
- the following sections for more information).</P
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> The GNOME accessibility environment requires
+ <code class="literal">~/.orca/user-settings.py</code> (see material in
+ the following sections for more information).</p><p><span class="emphasis"><em>NOTE:</em></span> The GNOME accessibility environment requires
accessibility to be enabled for your login session, which is not
the default configuration. The first time you run Orca, Orca
will detect this and will enable accessibility for you. In
order for this to take effect, however, you still need to log
- out and log back in.</P
-><P
->To get help while running Orca, you can press
- <TT
-CLASS="LITERAL"
->Insert+F1</TT
-> to enter learn mode. In learn
+ out and log back in.</p><p>To get help while running Orca, you can press
+ <code class="literal">Insert+F1</code> to enter learn mode. In learn
mode, you can type any key combination and Orca will tell you
the effects of that key combination. To exit learn mode, press
- <TT
-CLASS="LITERAL"
->Escape</TT
->.</P
-><P
->To quit Orca, you can do any of the following:</P
-><P
-></P
-><UL
-><LI
-><P
->Press <TT
-CLASS="LITERAL"
->Insert+Q</TT
-></P
-></LI
-><LI
-><P
->Enter <TT
-CLASS="LITERAL"
->killall -TERM orca</TT
-> in a
- terminal window. <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> if you enter <TT
-CLASS="LITERAL"
->killall -HUP
- orca</TT
-> in a terminal window, Orca will restart.</P
-></LI
-></UL
-><P
-><SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->NOTE:</I
-></SPAN
-> the main shell script to start Orca,
- <TT
-CLASS="LITERAL"
->/usr/bin/orca</TT
->, will detect failures in Orca
+ <code class="literal">Escape</code>.</p><p>To quit Orca, you can do any of the following:</p><div class="itemizedlist"><ul type="disc"><li><p>Press <code class="literal">Insert+Q</code></p></li><li><p>Enter <code class="literal">killall -TERM orca</code> in a
+ terminal window. <span class="emphasis"><em>NOTE:</em></span> if you enter <code class="literal">killall -HUP
+ orca</code> in a terminal window, Orca will restart.</p></li></ul></div><p><span class="emphasis"><em>NOTE:</em></span> the main shell script to start Orca,
+ <code class="literal">/usr/bin/orca</code>, will detect failures in Orca
and restart it if necessary. In addition, it will stop any
existing Orca-related processes before starting Orca again.
As such, if something bad seems to have happened with Orca,
you can force it to clean up and restart by merely launching
- Orca again via any of the methods listed previously.</P
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="UGCUSTOMIZATION"
-></A
->Chapter 3. Customizing Orca</H1
-><P
->To be written. Include verbosity, speech rate, braille,
+ Orca again via any of the methods listed previously.</p></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ugcustomization"></a>Chapter 3. Customizing Orca</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#ugmodkeys"><code class="literal">orcaModifierKeys</code> - Override "Insert" as Orca Modifier Key</a></span></dt></dl></div><p>To be written. Include verbosity, speech rate, braille,
braille monitor, orca modifier keys, voices, key/word echo, read
- table line, etc.</P
-><P
->To configure Orca, you can do any of the following:</P
-><P
-></P
-><UL
-><LI
-><P
->Run <TT
-CLASS="LITERAL"
->orca --setup</TT
-></P
-></LI
-><LI
-><P
->Press <TT
-CLASS="LITERAL"
->Insert+Space</TT
-> while Orca is
- running</P
-></LI
-></UL
-><P
->When you configure Orca, it will create
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
->. You can edit this
+ table line, etc.</p><p>To configure Orca, you can do any of the following:</p><div class="itemizedlist"><ul type="disc"><li><p>Run <code class="literal">orca --setup</code></p></li><li><p>Press <code class="literal">Insert+Space</code> while Orca is
+ running</p></li></ul></div><p>When you configure Orca, it will create
+ <code class="literal">~/.orca/user-settings.py</code>. You can edit this
file using a text editor, but be aware that it will be
overwritten the next time you configure Orca. If you wish to
have more persistent settings for Orca, you can create
- <TT
-CLASS="LITERAL"
->~/.orca/orca-customizations.py</TT
->. If this file
+ <code class="literal">~/.orca/orca-customizations.py</code>. If this file
exists (you need to create it if you want one),
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
-> will import it each
+ <code class="literal">~/.orca/user-settings.py</code> will import it each
time the settings are reloaded. You can force Orca to reload
the settings by pressing
- <TT
-CLASS="LITERAL"
->Ctrl+Insert+Space</TT
->.</P
-><P
->The contents of a typical
- <TT
-CLASS="LITERAL"
->~/.orca/user-settings.py</TT
-> look similar to the
- following:</P
-><PRE
-CLASS="PROGRAMLISTING"
-># user-settings.py - custom Orca settings
+ <code class="literal">Ctrl+Insert+Space</code>.</p><p>The contents of a typical
+ <code class="literal">~/.orca/user-settings.py</code> look similar to the
+ following:</p><pre class="programlisting">
+# user-settings.py - custom Orca settings
# Generated by orca. DO NOT EDIT THIS FILE!!!
# If you want permanent customizations that will not
# be overwritten, edit orca-customizations.py.
@@ -456,64 +169,21 @@ orca.settings.verbalizePunctuationStyle = orca.settings.PUNCTUATION_STYLE_MOST
try:
__import__("orca-customizations")
except ImportError:
- pass</PRE
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="UGMODKEYS"
->3.1. <TT
-CLASS="LITERAL"
->orcaModifierKeys</TT
-> - Override "Insert" as Orca Modifier Key</A
-></H2
-><P
->Orca defines keystrokes for the
+ pass
+</pre><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ugmodkeys"></a><code class="literal">orcaModifierKeys</code> - Override "Insert" as Orca Modifier Key</h2></div></div></div><p>Orca defines keystrokes for the
keypad and also makes special used of the
- <TT
-CLASS="LITERAL"
->Insert</TT
-> key as the Orca modifier key. Orca
- also provides an <TT
-CLASS="LITERAL"
->orcaModifierKeys</TT
->
+ <code class="literal">Insert</code> key as the Orca modifier key. Orca
+ also provides an <code class="literal">orcaModifierKeys</code>
customization setting to allow the user to override
- <TT
-CLASS="LITERAL"
->Insert</TT
-> as the Orca modifier key. This
+ <code class="literal">Insert</code> as the Orca modifier key. This
setting contains a list of key strings that represent the key
to be used as the Orca modifier key. For example, the
following example specifies that the keyboard
- <TT
-CLASS="LITERAL"
->Insert</TT
-> key (typically near the
- <TT
-CLASS="LITERAL"
->Delete</TT
-> key) and the keypad
- <TT
-CLASS="LITERAL"
->Insert</TT
-> key (typically the 0 key) are to
- both act as the Orca modifier key:</P
-><PRE
-CLASS="PROGRAMLISTING"
->
-orca.settings.orcaModifierKeys = ["Insert", "KP_Insert"] </PRE
-><P
->You can override this setting in your
- <TT
-CLASS="LITERAL"
->~/.orca/orca-customizations.py</TT
-> module if
- you wish.</P
-></DIV
-></DIV
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
+ <code class="literal">Insert</code> key (typically near the
+ <code class="literal">Delete</code> key) and the keypad
+ <code class="literal">Insert</code> key (typically the 0 key) are to
+ both act as the Orca modifier key:</p><pre class="programlisting">
+orca.settings.orcaModifierKeys = ["Insert", "KP_Insert"]
+</pre><p>You can override this setting in your
+ <code class="literal">~/.orca/orca-customizations.py</code> module if
+ you wish.</p></div></div></div></body></html>
diff --git a/docs/doc-set/user_guide.sgml b/docs/doc-set/user_guide.sgml
index 84e0304..467057d 100644
--- a/docs/doc-set/user_guide.sgml
+++ b/docs/doc-set/user_guide.sgml
@@ -1,6 +1,6 @@
<!-- Copyright 2005-2008, Sun Microsystems, Inc. -->
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.0//EN"
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.0//EN" "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"
[
<!ENTITY blurb SYSTEM "blurb.sgml">
<!ENTITY legal SYSTEM "legal.sgml">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]