Commit 87c67756 authored by Peter Parente's avatar Peter Parente

Initial revision

parents
en_GB.po
build
doc
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>lsr</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>
Pete Brunet <pbrunet@us.ibm.com>
Larry Weiss <lweiss@us.ibm.com>
Peter Parente <pparent@us.ibm.com>
Brett Clippingdale <dclippi@us.ibm.com>
See http://www.ibm.com/contact/employees/us/ for updated contact information.
This diff is collapsed.
2006-05-19 Peter Parente <parente@cvs.gnome.org>
* First import of LSR sources into cvs.gnome.org
2006-03-17 Peter Parente <pparent@us.ibm.com>
* LSR 0.1.0 first release on alphaWorks
== Python sourceprolog ==
All source files are to have the following at the top of the file to
indicate the copyright and license.
'''
[REPLACE WITH FILE DESCRIPTION]
@author: [RELACE WITH AUTHOR NAME]
@organization: IBM Corporation
@copyright: Copyright (c) 2006 IBM Corporation
@license: Common Public License 1.0
All rights reserved. This program and the accompanying materials are made
available under the terms of the Common Public License v1.0 which accompanies
this distribution, and is available at
U{http://www.opensource.org/licenses/cpl1.0.php}
'''
== Common Publice License (CPL) FAQ ==
See http://www-128.ibm.com/developerworks/library/os-cplfaq.html.
== Contributions ==
Contact one of the authors for assistance in contributing to LSR. See
the AUTHORS file.
Email: parente@cvs.gnome.org
Email: dbclippi@us.ibm.com
Email: lweiss@us.ibm.com
\ No newline at end of file
SUBDIRS = src po doc
0.2.0
* @todo: PP: fill in new features since 0.1.0
Linux Screen Reader Software User Agreement
November 1, 2005
Use Of Content
THE LINUX SCREEN READER (LSR) PROJECT MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
INFORMATION AND/OR OTHER MATERIALS FOR THIS OPEN SOURCE PROJECT (COLLECTIVELY
"CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS
AGREEMENT OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES
INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF
THE CONTENT IS GOVERNED BY THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY
APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU
DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR
REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.
Applicable Licenses
Unless otherwise indicated, all Content made available by the LSR Project is
provided to you under the terms and conditions of the Common Public License
Version 1.0 ("CPL"). A copy of the CPL is provided with this Content (COPYING)
and is also available at http://www.opensource.org/licenses/cpl1.0.php
Content is a “Program” under the CPL. Content includes, but is not limited to,
source code, object code, documentation and other files maintained in the LSR
Project CVS repository ("Repository") in CVS modules ("Modules") and made
available as downloadable archives ("Downloads").
== Getting started (in five steps) ==
These directions boil down the setup instructions listed at
http://live.gnome.org/LSR/GettingStarted to five steps necessary to get
LSR up and running ASAP. These steps create a basic configuration
that uses the Festival speech engine for output. For more detailed
instructions, an improved setup, or troubleshooting directions, see that
web page.
1) Satisfy library requirements.
su
yum install gnome-common pyorbit-devel gnome-speech
exit
2) Get the LSR source from CVS.
cvs -z3 -d:pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co -P lsr
3) Or, get a stable LSR release from http://live.gnome.org/LSR and
unpack it.
tar xzf lsr-<INSERT VERSION HERE>.tar.gz
4) Build and install LSR.
./autogen.sh
make
su root
make install
exit
5) Run lsr.
lsr
Linux Screen Reader (LSR) 0.2.0
Copyright (c) 2005, 2006 IBM Corporation
All rights reserved. This program and the accompanying materials are
made available under the terms of the Common Public License v1.0 which
accompanies this distribution, and is available at
http://www.opensource.org/licenses/cpl1.0.php
== Getting started ==
Visit the http://live.gnome.org/LSR/GettingStarted page for help with
installing, configuring, and running LSR. Alternatively, see the
QUICKSTART file for the terse, five-step approach to installing LSR.
== Commit permission ==
Anyone with a gnome.org CVS account may request commit priviledges in the
/cvs/gnome/lsr module by asking the LSR maintainers (lsr-maint@gnome.org). The
maintainers will typically require evidence that the requestor understands the
LSR code base and has a strong need for commit permission. Both can be
evidenced by previous contributions of patches, bug reports, and so on.
== CVS checklist ==
Follow these steps, preferably in this order, before you commit your changes to
CVS.
1. Did you run cvs update to ensure there are no conflicts between your changes
and the code in the repository?
2. If there were conflicts, did you search for conflict blocks
(starting with ===) and merge changes?
3. Does the code run locally when you execute LSRMain.py after you’ve resolved
conflicts?
4. If you added new modules/packages,
1. Did you update the Makefile.am files and configure.in file either manually
or with pyauto?
2. Did you re-build and re-install LSR to test the installation procedure
after generating the makefiles?
3. Did you run the installed copy of LSR to test the installation?
4. Did you run cvs add on the new modules, packages, and (possibly) new
makefiles?
5. If you added a translation,
1. Did you update the POTFILES.in manually or with pyauto?
2. Did you re-build and re-install LSR to ensure the translation is compiled
and installed properly?
3. Did you run the installed copy of LSR to test the translation?
\ No newline at end of file
# Calls gnome-autogen to build Makefiles and run configure
REQUIRED_AUTOMAKE_VERSION=1.7.2
USE_GNOME2_MACROS=1 . gnome-autogen.sh
\ No newline at end of file
AC_INIT(LSR, 0.2.0, pparent@us.ibm.com, lsr)
AC_CONFIG_SRCDIR(src/lsr.in)
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
dnl AC_PATH_PROG(GCONFTOOL, gconftool-2)
dnl AM_GCONF_SOURCE_2
AC_PROG_INTLTOOL([0.21])
dnl == check for python ==
AM_PATH_PYTHON(2.4)
dnl == check for required modules ==
GNOME_MODULES="glib-2.0 >= 2.0.0 libbonobo-2.0 >= 2.0.0 pyorbit-2 >= 2.0.0 pygtk-2.0 >= 2.0.0 gnome-python-2.0 >= 2.6.0"
PKG_CHECK_MODULES(GNOME, $GNOME_MODULES)
ALL_LINGUAS="en_GB"
GETTEXT_PACKAGE=lsr
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The gettext package])
AM_GLIB_GNU_GETTEXT
dnl == generate makefiles ==
AC_OUTPUT([
Makefile
doc/Makefile
doc/man/Makefile
doc/workbook/Makefile
po/Makefile.in
src/AEChooser/Makefile
src/AEEvent/Makefile
src/AEInput/Makefile
src/AEMonitor/Makefile
src/AEOutput/Makefile
src/AEState/Makefile
src/Adapters/ATSPI/Makefile
src/Adapters/Makefile
src/Choosers/Makefile
src/Devices/Makefile
src/Makefile
src/Monitors/Makefile
src/Perks/Makefile
src/Task/Makefile
src/Task/Tools/Makefile
src/Walker/Makefile
src/i18n.py
src/lsr
src/pyLinAcc/Makefile
])
AC_INIT(LSR, 0.2.0, pparent@us.ibm.com, lsr)
AC_CONFIG_SRCDIR(src/lsr.in)
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
dnl AC_PATH_PROG(GCONFTOOL, gconftool-2)
dnl AM_GCONF_SOURCE_2
AC_PROG_INTLTOOL([0.21])
dnl == check for python ==
AM_PATH_PYTHON(2.4)
dnl == check for required modules ==
GNOME_MODULES="glib-2.0 >= 2.0.0 libbonobo-2.0 >= 2.0.0 pyorbit-2 >= 2.0.0 pygtk-2.0 >= 2.0.0 gnome-python-2.0 >= 2.6.0"
PKG_CHECK_MODULES(GNOME, $GNOME_MODULES)
ALL_LINGUAS="%(linguas)s"
GETTEXT_PACKAGE=lsr
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The gettext package])
AM_GLIB_GNU_GETTEXT
dnl == generate makefiles ==
AC_OUTPUT([
%(outputs)s
])
src/AccessEngine.py
src/EventMonitor.py
src/ViewMonitor.py
\ No newline at end of file
# English translations for lsr package.
# Copyright (C) 2005 ORGANIZATION
# Peter Parente <parente@us.ibm.com>, 2005.
#
msgid ""
msgstr ""
"Project-Id-Version: lsr 0.1\n"
"POT-Creation-Date: 2005-06-29 10:40+EDT\n"
"PO-Revision-Date: 2005-06-29 10:40-0400\n"
"Last-Translator: Peter Parente <parente@us.ibm.com>\n"
"Language-Team: English\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/AccessEngine.py:106
msgid "show the view monitor on startup"
msgstr "show the view monitor on startup"
#: src/AccessEngine.py:108
msgid "show the event monitor on startup"
msgstr "show the event monitor on startup"
#: src/AccessEngine.py:111
msgid "level of log messages"
msgstr "level of log messages"
#: src/AccessEngine.py:113
msgid "channel of log messages, any of:"
msgstr "channel of log messages, any of:"
#: src/AccessEngine.py:115
msgid "filename for the log, defaults to stdout if not specified"
msgstr "filename for the log, defaults to stdout if not specified"
#: src/EventMonitor.py:88
msgid "Event Monitor"
msgstr "Cheerio! Event Monitor"
#: src/EventMonitor.py:100
msgid "_Logging enabled"
msgstr "_Logging enabled"
#: src/EventMonitor.py:125
msgid "AT-SPI"
msgstr "AT-SPI"
#: src/EventMonitor.py:126
msgid "Tasks"
msgstr "Tasks"
#: src/EventMonitor.py:152
msgid "_Save log..."
msgstr "_Save log..."
#: src/EventMonitor.py:158
msgid "_Clear log"
msgstr "_Clear log"
#: src/EventMonitor.py:166
msgid "_Quit"
msgstr "_Quit"
#: src/EventMonitor.py:173
msgid "_File"
msgstr "_File"
#: src/EventMonitor.py:175
msgid "_AT-SPI"
msgstr "_AT-SPI"
#: src/EventMonitor.py:177
msgid "_Task"
msgstr "_Task"
#: src/EventMonitor.py:201
msgid "Show"
msgstr "Show"
#: src/EventMonitor.py:201
msgid "events"
msgstr "events"
#: src/EventMonitor.py:261
msgid "Save log"
msgstr "Save log"
#: src/ViewMonitor.py:32
msgid "Name"
msgstr "Name"
#: src/ViewMonitor.py:32
msgid "Role"
msgstr "Role"
#: src/ViewMonitor.py:195
msgid "View Monitor"
msgstr "Cheerio! View Monitor"
#!/usr/bin/python
'''
Generates all Makefile.am files and the configure.in automatically. Relieves me
from manual updates of Makefile.am and configure.in when packages and modules
are moved, added, or deleted. Has options for updating POTFILES.in and the
epydoc HTML files. This script doesn't need to be distributed with LSR or run by
anyone other than the code and doc mantainers.
@author: Peter Parente
@organization: IBM Corporation
@copyright: Copyright (c) 2005 IBM Corporation
@license: Common Public License 1.0
All rights reserved. This program and the accompanying materials are made
available under the terms of the Common Public License v1.0 which accompanies
this distribution, and is available at
U{http://www.opensource.org/licenses/cpl1.0.php}
'''
configure_template = file('configure.pyauto').read()
import os, os.path, glob, optparse
registry = ['Makefile', 'po/Makefile.in', 'doc/Makefile', 'doc/man/Makefile',
'doc/workbook/Makefile']
binary = ['lsr']
exclude = ['CVS', 'Makefile.in', 'Makefile', 'ui']
src_path = 'src/'
po_path = 'po/'
doc_path = 'doc/epydoc'
def unix_path(path):
return path.replace('\\', '/')
def extless(name, ext='.in'):
if name.endswith(ext):
return name[:-len(ext)]
else:
return name
class DocWriter(object):
def __init__(self):
self.args = ['epydoc', '--html', '-o', doc_path,
'--inheritance', 'listed', '--ignore-param-mismatch']
self.targets = []
self.paths = []
def write(self):
# make sure all folders are in the Python path
import sys
# epydoc has trouble finding this module, so import it ourselves
__import__('src/i18n')
self.args.extend(self.targets)
# hack to reuse the epydoc CLI
from epydoc.cli import cli
import sys
argv = sys.argv
sys.argv = self.args
cli()
sys.argv = argv
def register(self, child, back=True):
if back:
self.targets.append(unix_path(child))
else:
self.targets.insert(0, unix_path(child))
def go(self):
children = glob.glob(os.path.join(src_path, '*'))
for child in children:
if os.path.isdir(child) and (os.path.basename(child) not in exclude):
grand = glob.glob(os.path.join(child, '*.py'))
if os.path.join(child, '__init__.py') in grand:
# it's a module
self.register(child, False)
else:
# it's a UIE folder
self.paths.append(os.path.abspath(child))
for g in grand:
self.register(g)
elif child.endswith('.py') and (os.path.basename(child) not in exclude):
self.register(child)
self.write()
class i18nTemplateWriter(object):
def __init__(self):
self.args = ['pygettext.py', '-olsr.pot']
self.register(src_path)
def write(self):
# hack to reuse the gettext CLI
import pygettext, sys
argv = sys.argv
sys.argv = self.args
pygettext.main()
sys.argv = argv
def register(self, child):
self.args.append(os.path.join(child, '*.py'))
def go(self):
children = glob.glob(os.path.join(src_path, '*'))
for child in children:
if os.path.isdir(child) and os.path.basename(child) not in exclude:
self.register(child)
self.write()
class PotfileWriter(object):
def __init__(self):
self.sources = {}
def go(self):
pos = glob.glob(os.path.join(po_path, '*.po'))
for po in pos:
text = file(po).readlines()
text = [line for line in text if line.startswith('#: ')]
for line in text:
try:
fn, ln = line[3:].split(':')
except TypeError:
continue
self.sources[fn] = None
self.write()
def write(self):
keys = self.sources.keys()
keys.sort()
f = file(os.path.join(po_path, 'POTFILES.in'), 'w')
f.write(unix_path('\n'.join(keys)))
f.close()
class ConfigureWriter(object):
def go(self):
self.linguas = [extless(os.path.basename(fn), '.po') for fn in
glob.glob(os.path.join(po_path, '*.po'))]
self.write()
def render(self):
d = {}
registry.sort()
d['outputs'] = unix_path('\n'.join(registry))
d['linguas'] = ' '.join(self.linguas)
return d
def write(self):
f = file('configure.in', 'w')
f.write(configure_template % self.render())
f.close()
class MakefileWriter(object):
def __init__(self, folder):
self.subdirs = []
self.binaries = {}
self.sources = {}
self.folder = folder
def subdir(self, child):
name = os.path.basename(child)
if name not in exclude:
if MakefileWriter(child).go():
self.subdirs.append(name)
def binary(self, child):
name = os.path.basename(child)
if name not in exclude:
self.binaries[name] = None
def source(self, child):
name = os.path.basename(child)
if name not in exclude:
self.sources[name] = None
def register(self, child):
name = os.path.basename(child)
if name not in exclude:
registry.append(child)
def go(self):
children = glob.glob(os.path.join(self.folder, '*'))
for child in children:
if os.path.isdir(child):
self.subdir(child)
elif os.path.isfile(child):
if os.path.basename(extless(child)) in binary:
self.binary(extless(child))
elif child.find('.py') > -1 and child.find('.pyc') == -1:
self.source(extless(child))
if child.endswith('.in'):
self.register(extless(child))
return self.write()
def render(self):
d = []
if len(self.binaries):
keys = self.binaries.keys()
keys.sort()
d.append('bin_SCRIPTS = ')
d.append(' \\\n\t'.join(keys))
d.append('\n')
if len(self.sources):
keys = self.sources.keys()
keys.sort()
d.append('lsr_PYTHON = ')
d.append(' \\\n\t'.join(keys))
d.append('\n')
if len(self.subdirs):
self.subdirs.sort()
d.append('SUBDIRS = ')
d.append(' \\\n\t'.join(self.subdirs))
d.append('\n')
d.append('lsrdir = $(pkgpythondir)/')
d.append(unix_path(self.folder[len(src_path):]))
return d
def write(self):
if len(self.binaries) == 0 and len(self.sources) == 0 and \
len(self.subdirs) == 0:
return False
registry.append(os.path.join(self.folder, 'Makefile'))
f = file(os.path.join(self.folder, 'Makefile.am'), 'w')
f.write(''.join(self.render()))
f.close()
return True
if __name__ == '__main__':
op = optparse.OptionParser()
op.add_option('-i', '--i18n-template', action='store_true', dest='i18n',
default=False, help='update/create lsr.pot template')
op.add_option('-p', '--potfiles', action='store_true', dest='pot',
default=False, help='update/create POTFILES.in')
op.add_option('-a', '--automake', action='store_true', dest='automake',
default=False,
help='update/create Makefile.am and configure.in')
op.add_option('-d', '--epydoc', action='store_true', dest='epydoc',
default=False, help='update/create epydoc documentation')
(options, args) = op.parse_args()
if options.i18n:
print 'Updating lsr.pot translation template'
print 'N.B.: Run autogen.sh first to ensure *.py are created from *.py.in'
i18nTemplateWriter().go()
elif options.automake:
print 'Updating all Makefile.am files'
MakefileWriter(src_path).go()
print 'Updating configure.in file'
ConfigureWriter().go()
elif options.pot:
print 'Updating POTFILES.in file from available *.po'
PotfileWriter().go()
elif options.epydoc:
print 'Updating epydoc documentation'
print 'N.B.: Run autogen.sh first to ensure *.py are created from *.py.in'
print 'N.B.: Must be run within a gnome session since it imports files'
DocWriter().go()
else:
print op.format_help()
lsr_PYTHON = __init__.py
lsrdir = $(pkgpythondir)/AEChooser
\ No newline at end of file
'''
Defines abstract classes representing the interfaces that must be implemented
by a chooser for LSR.
@author: Peter Parente
@organization: IBM Corporation
@copyright: Copyright (c) 2005 IBM Corporation
@license: Common Public License 1.0
All rights reserved. This program and the accompanying materials are made
available under the terms of the Common Public License v1.0 which accompanies
this distribution, and is available at
U{http://www.opensource.org/licenses/cpl1.0.php}
'''
def isAEChooser(obj):
return True
\ No newline at end of file
'''
Defines the base class for all L{AccessEngine} events (L{AEEvent}s).
@author: Peter Parente
@author: Pete Brunet
@organization: IBM Corporation
@copyright: Copyright (c) 2005 IBM Corporation
@license: Common Public License 1.0
All rights reserved. This program and the accompanying materials are made
available under the terms of the Common Public License v1.0 which accompanies
this distribution, and is available at
U{http://www.opensource.org/licenses/cpl1.0.php}
'''
from LSRInterfaces import *
import Constants
class AccessEngineEvent(object):
'''
Most base class for all L{AccessEngine} events. Supports the concept of a
priority which may be used to prioritize event execution.
@ivar priority: Priority of this event
@type priority: integer
@ivar focused: Was the source of the event focused at the time of event
creation?
@type focused: boolean
@ivar por: Point of regard associated with this event
@type por: L{POR}
'''
def __init__(self, priority=Constants.NORMAL, focused=False):
'''
Stores the event priority and whether the event source was focused or not.
@param priority: Priority of this event, defaults to L{Constants.NORMAL}
@type priority: integer
@param focused: Was the source of the event focused at the time of event
creation?
@type focused: boolean
'''
self.priority = priority