Annotation of chimera/GeckoUtils.h, revision 1.3

1.1       hyatt       1: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
                      2: /* ***** BEGIN LICENSE BLOCK *****
                      3:  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
                      4:  *
                      5:  * The contents of this file are subject to the Netscape Public License
                      6:  * Version 1.1 (the "License"); you may not use this file except in
                      7:  * compliance with the License. You may obtain a copy of the License at
                      8:  * http://www.mozilla.org/NPL/
                      9:  *
                     10:  * Software distributed under the License is distributed on an "AS IS" basis,
                     11:  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
                     12:  * for the specific language governing rights and limitations under the
                     13:  * License.
                     14:  *
                     15:  * The Original Code is mozilla.org code.
                     16:  *
                     17:  * The Initial Developer of the Original Code is 
                     18:  * Netscape Communications Corporation.
                     19:  * Portions created by the Initial Developer are Copyright (C) 2002
                     20:  * the Initial Developer. All Rights Reserved.
                     21:  *
                     22:  * Contributor(s):
                     23:  *
                     24:  * Alternatively, the contents of this file may be used under the terms of
                     25:  * either the GNU General Public License Version 2 or later (the "GPL"), or 
                     26:  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
                     27:  * in which case the provisions of the GPL or the LGPL are applicable instead
                     28:  * of those above. If you wish to allow use of your version of this file only
                     29:  * under the terms of either the GPL or the LGPL, and not to allow others to
                     30:  * use your version of this file under the terms of the NPL, indicate your
                     31:  * decision by deleting the provisions above and replace them with the notice
                     32:  * and other provisions required by the GPL or the LGPL. If you do not delete
                     33:  * the provisions above, a recipient may use your version of this file under
                     34:  * the terms of any one of the NPL, the GPL or the LGPL.
                     35:  *
                     36:  * ***** END LICENSE BLOCK ***** */
                     37: 
                     38: #ifndef __GeckoUtils_h__
                     39: #define __GeckoUtils_h__
                     40: 
                     41: class GeckoUtils
                     42: {
                     43: public:
                     44:   static void GatherTextUnder(nsIDOMNode* aNode, nsString& aResult) {
1.2       hyatt      45:     nsAutoString text;
                     46:     nsCOMPtr<nsIDOMNode> node;
                     47:     aNode->GetFirstChild(getter_AddRefs(node));
                     48:     PRUint32 depth = 1;
                     49:     while (node && depth) {
                     50:       nsCOMPtr<nsIDOMCharacterData> charData(do_QueryInterface(node));
                     51:       PRUint16 nodeType;
                     52:       node->GetNodeType(&nodeType);
                     53:       if (charData && nodeType == nsIDOMNode::TEXT_NODE) {
                     54:         // Add this text to our collection.
                     55:         text += NS_LITERAL_STRING(" ");
                     56:         nsAutoString data;
                     57:         charData->GetData(data);
                     58:         text += data;
                     59:       }
                     60:       else {
                     61:         nsCOMPtr<nsIDOMHTMLImageElement> img(do_QueryInterface(node));
                     62:         if (img) {
                     63:           nsAutoString altText;
                     64:           img->GetAlt(altText);
                     65:           if (!altText.IsEmpty()) {
                     66:             text = altText;
                     67:             break;
                     68:           }
                     69:         }
                     70:       }
1.3     ! hyatt      71: 
        !            72:       // Find the next node to test.
        !            73:       PRBool hasChildNodes;
        !            74:       node->HasChildNodes(&hasChildNodes);
        !            75:       if (hasChildNodes) {
        !            76:         nsCOMPtr<nsIDOMNode> temp = node;
        !            77:         temp->GetFirstChild(getter_AddRefs(node));
        !            78:         depth++;
        !            79:       }
        !            80:       else {
        !            81:         nsCOMPtr<nsIDOMNode> nextSibling;
        !            82:         node->GetNextSibling(getter_AddRefs(nextSibling));
        !            83:         if (nextSibling)
        !            84:           node = nextSibling;
        !            85:         else {
        !            86:           nsCOMPtr<nsIDOMNode> parentNode;
        !            87:           node->GetParentNode(getter_AddRefs(parentNode));
        !            88:           if (!parentNode)
        !            89:             node = nsnull;
        !            90:           else {
        !            91:             nsCOMPtr<nsIDOMNode> nextSibling;
        !            92:             parentNode->GetNextSibling(getter_AddRefs(nextSibling));
        !            93:             node = nextSibling;
        !            94:             depth--;
        !            95:           }
        !            96:         }
        !            97:       }
1.2       hyatt      98:     }
1.3     ! hyatt      99: 
        !           100:     text.CompressWhitespace();
1.2       hyatt     101:     aResult = text;
1.1       hyatt     102:   };
                    103: };
                    104: 
                    105: 
                    106: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>