]> git.sesse.net Git - vlc/blob - modules/gui/skins2/parser/xmlparser.cpp
* configure.ac: check xml2-config for skins2
[vlc] / modules / gui / skins2 / parser / xmlparser.cpp
1 /*****************************************************************************
2  * xmlparser.cpp
3  *****************************************************************************
4  * Copyright (C) 2004 VideoLAN
5  * $Id: xmlparser.cpp,v 1.1 2004/01/24 13:08:12 asmax Exp $
6  *
7  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
8  *          Olivier Teulière <ipkiss@via.ecp.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
23  *****************************************************************************/
24
25 #include "xmlparser.hpp"
26
27 XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName ):
28     SkinObject( pIntf )
29 {
30     m_pReader = xmlNewTextReaderFilename( rFileName.c_str() );
31     if( !m_pReader )
32     {
33         msg_Err( getIntf(), "Failed to open %s for parsing",
34                  rFileName.c_str() );
35     }
36 }
37
38
39 XMLParser::~XMLParser()
40 {
41     if( m_pReader )
42     {
43         xmlFreeTextReader( m_pReader );
44     }
45 }
46
47
48 int XMLParser::parse()
49 {
50     if( !m_pReader )
51     {
52         return -1;
53     }
54
55     int ret = xmlTextReaderRead( m_pReader );
56     while (ret == 1)
57     {
58         // Get the node type
59         int type = xmlTextReaderNodeType( m_pReader );
60         switch (type )
61         {
62             // Error
63             case -1:
64                 return -1;
65                 break;
66
67             // Begin element
68             case 1:
69                 // Read the element name
70                 const xmlChar *eltName = xmlTextReaderConstName( m_pReader );
71                 if( !eltName )
72                 {
73                     return -1;
74                 }
75                 // Read the attributes
76                 AttrList_t attributes;
77                 while( xmlTextReaderMoveToNextAttribute( m_pReader ) == 1 )
78                 {
79                     const xmlChar *name = xmlTextReaderConstName( m_pReader );
80                     const xmlChar *value = xmlTextReaderConstValue( m_pReader );
81                     if( !name || !value )
82                     {
83                         return -1;
84                     }
85                     attributes[(const char*)name] = (const char*)value;
86                 }
87                 handleBeginElement( (const char*)eltName, attributes);
88                 break;
89         }
90         ret = xmlTextReaderRead( m_pReader );
91     }
92     return 0;
93 }
94
95
96 void XMLParser::handleBeginElement( const string &rName,
97                                     AttrList_t &attributes )
98 {
99     fprintf(stderr,"%s\n", rName.c_str());
100     AttrList_t::const_iterator it;
101     for (it = attributes.begin(); it != attributes.end(); it++)
102     {
103         fprintf(stderr,"  %s = %s\n", (*it).first, (*it).second);
104     }
105 }