Index: src/orca/default.py
===================================================================
RCS file: /cvs/gnome/orca/src/orca/default.py,v
retrieving revision 1.242
diff -u -r1.242 default.py
--- src/orca/default.py	15 Nov 2006 03:22:26 -0000	1.242
+++ src/orca/default.py	18 Nov 2006 00:05:22 -0000
@@ -2528,37 +2528,43 @@
         Arguments:
         - str: the string of tokens containing <key>:<value>; pairs.
 
-        Returns a dictionary of key/value items.
+        Returns a list containing two items:
+        A list of the keys in the order they were extracted from the 
+        text attribute string and a dictionary of key/value items.
         """
 
+        list = []
         dictionary = {}
         allTokens = str.split()
         for i in range(0, len(allTokens)):
             item = allTokens[i].split(":")
-            if item[1].endswith(";"):
-              item[1] = item[1][0:len(item[1])-1]
+            if item[1] and item[1].endswith(";"):
+                item[1] = item[1][0:len(item[1])-1]
+            list.append(item[0])
             dictionary[item[0]] = item[1]
 
-        return dictionary
+        return [list, dictionary]
 
-    def outputCharAttributes(self, attributes):
+    def outputCharAttributes(self, keys, attributes):
         """Speak each of the text attributes given dictionary.
 
         Arguments:
         - attributes: a dictionary of text attributes to speak.
         """
 
-        for key in attributes.keys():
-            attribute = attributes[key]
-            if attribute:
-                # If it's the 'weight' attribute and greater than 400, just
-                # speak it as bold, otherwise speak the weight.
-                #
-                if key == "weight" and int(attribute) > 400:
-                    line = _("bold")
-                else:
-                    line = key + " " + attribute
-                speech.speak(line)
+        for i in range(0, len(keys)):
+            key = keys[i]
+            if attributes.has_key(key):
+                attribute = attributes[key]
+                if attribute:
+                    # If it's the 'weight' attribute and greater than 400, just
+                    # speak it as bold, otherwise speak the weight.
+                    #
+                    if key == "weight" and int(attribute) > 400:
+                        line = _("bold")
+                    else:
+                        line = key + " " + attribute
+                    speech.speak(line)
 
     def readCharAttributes(self, inputEvent=None):
         """Reads the attributes associated with the current text character.
@@ -2578,12 +2584,13 @@
             # entries we are interested in.
             #
             defAttributes = text.getDefaultAttributes()
-            defDict = self.textAttrsToDictionary(defAttributes)
+            [defUser, defDict] = self.textAttrsToDictionary(defAttributes)
             allAttributes = defDict
 
             charAttributes = text.getAttributes(caretOffset)
             if charAttributes[0]:
-                charDict = self.textAttrsToDictionary(charAttributes[0])
+                [charList, charDict] = \
+                    self.textAttrsToDictionary(charAttributes[0])
 
                 # It looks like some applications like Evolution and Star
                 # Office don't implement getDefaultAttributes(). In that
@@ -2596,39 +2603,25 @@
                 else:
                     allAttributes = charDict
 
+            # Get a dictionary of text attributes that the user cares about.
+            #
+            [userAttrList, userAttrDict] = \
+                self.textAttrsToDictionary(settings.enabledTextAttributes)
+
             # Create a dictionary of just the items we are interested in.
             # Always include size and family-name. For the others, if the
             # value is the default, then ignore it.
             #
             attributes = {}
-            attributes['size']        = allAttributes.get('size')
-            attributes['family-name'] = allAttributes.get('family-name')
-
-            attr = allAttributes.get('weight')
-            if attr != "400":
-                attributes['weight'] = attr
-
-            attr = allAttributes.get('indent')
-            if attr != "0":
-                attributes['indent'] = attr
-
-            attr = allAttributes.get('underline')
-            if attr != "none":
-                attributes['underline'] = attr
-
-            attr = allAttributes.get('strikethrough')
-            if attr != "false":
-                attributes['strikethrough'] = attr
-
-            attr = allAttributes.get('justification')
-            if attr != "left":
-                attributes['justification'] = attr
-
-            attr = allAttributes.get('style')
-            if attr != "normal":
-                attributes['style'] = attr
+            for i in range(0, len(userAttrList)):
+                key = userAttrList[i]
+                if allAttributes.has_key(key):
+                    textAttr = allAttributes.get(key)
+                    userAttr = userAttrDict.get(key)
+                    if textAttr != userAttr or len(userAttr) == 0:
+                        attributes[key] = textAttr
 
-            self.outputCharAttributes(attributes)
+            self.outputCharAttributes(userAttrList, attributes)
 
         return True
 
Index: src/orca/pronunciation_dict.py
===================================================================
RCS file: /cvs/gnome/orca/src/orca/pronunciation_dict.py,v
retrieving revision 1.2
diff -u -r1.2 pronunciation_dict.py
--- src/orca/pronunciation_dict.py	23 Oct 2006 17:16:30 -0000	1.2
+++ src/orca/pronunciation_dict.py	18 Nov 2006 00:05:22 -0000
@@ -38,6 +38,7 @@
 pronunciation_dict[_("ASAP")]    = _("as soon as possible")
 pronunciation_dict[_("IMAP")]    = _("eye map")
 pronunciation_dict[_("LOL")]     = _("laughing out loud")
+pronunciation_dict[_("strikethrough")] = _("strike through")
 
 def getPronunciation(word):
     """Given a word, return a string that represents what this word
Index: src/orca/settings.py
===================================================================
RCS file: /cvs/gnome/orca/src/orca/settings.py,v
retrieving revision 1.89
diff -u -r1.89 settings.py
--- src/orca/settings.py	16 Nov 2006 17:21:15 -0000	1.89
+++ src/orca/settings.py	18 Nov 2006 00:05:22 -0000
@@ -336,6 +336,16 @@
 #
 readTableCellRow    = True
 
+# The default set of text attributes to speak to the user. Specific
+# application scripts (or individual users can override these values if
+# so desired. Each of these text attributes is of the form <key>:<value>;
+# The <value> part will be the "default" value for that attribute. In
+# other words, if the attribute for a given piece of text has that value,
+# it won't be spoken. If no value part is given, then that attribute will
+# always be spoken.
+
+enabledTextAttributes = "size:; family-name:; weight:400; indent:0; underline:none; strikethrough:false; justification:left; style:normal;"
+
 # The limit to enable a repeat character count to be spoken.
 # If set to 0, then there will be no repeat character count.
 # Each character will be spoken singularly (i.e. "dash dash
Index: src/orca/scripts/Evolution.py
===================================================================
RCS file: /cvs/gnome/orca/src/orca/scripts/Evolution.py,v
retrieving revision 1.72
diff -u -r1.72 Evolution.py
--- src/orca/scripts/Evolution.py	15 Nov 2006 03:22:27 -0000	1.72
+++ src/orca/scripts/Evolution.py	18 Nov 2006 00:05:22 -0000
@@ -186,7 +186,8 @@
             if label.text:
                 charAttributes = label.text.getAttributes(0)
                 if charAttributes[0]:
-                    charDict = self.textAttrsToDictionary(charAttributes[0])
+                    [charKeys, charDict] = \
+                        self.textAttrsToDictionary(charAttributes[0])
                     weight = charDict.get('weight')
                     if weight and weight == '800':
                         text = util.getDisplayedText(label)
