~ubuntu-branches/ubuntu/natty/vlc/natty

« back to all changes in this revision

Viewing changes to modules/misc/lua/libs/xml.c

  • Committer: Bazaar Package Importer
  • Author(s): Benjamin Drung
  • Date: 2010-06-25 01:09:16 UTC
  • mfrom: (1.1.30 upstream)
  • Revision ID: james.westby@ubuntu.com-20100625010916-asxhep2mutg6g6pd
Tags: 1.1.0-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - build and install the libx264 plugin
  - add Xb-Npp header to vlc package
  - Add apport hook to include more vlc dependencies in bug reports
* Drop xulrunner patches.
* Drop 502_xulrunner_191.diff.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*****************************************************************************
 
2
 * xml.c: XML related functions
 
3
 *****************************************************************************
 
4
 * Copyright (C) 2010 Antoine Cellerier
 
5
 * $Id: cd655613e16f05747ac484ddf68b0a238f40462b $
 
6
 *
 
7
 * Authors: Antoine Cellerier <dionoea at videolan tod org>
 
8
 *
 
9
 * This program is free software; you can redistribute it and/or modify
 
10
 * it under the terms of the GNU General Public License as published by
 
11
 * the Free Software Foundation; either version 2 of the License, or
 
12
 * (at your option) any later version.
 
13
 *
 
14
 * This program is distributed in the hope that it will be useful,
 
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
 * GNU General Public License for more details.
 
18
 *
 
19
 * You should have received a copy of the GNU General Public License
 
20
 * along with this program; if not, write to the Free Software
 
21
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 
22
 *****************************************************************************/
 
23
 
 
24
/*****************************************************************************
 
25
 * Preamble
 
26
 *****************************************************************************/
 
27
#ifndef  _GNU_SOURCE
 
28
#   define  _GNU_SOURCE
 
29
#endif
 
30
 
 
31
#ifdef HAVE_CONFIG_H
 
32
# include "config.h"
 
33
#endif
 
34
 
 
35
#include <vlc_common.h>
 
36
#include <vlc_xml.h>
 
37
 
 
38
#include <lua.h>        /* Low level lua C API */
 
39
#include <lauxlib.h>    /* Higher level C API */
 
40
 
 
41
#include "../vlc.h"
 
42
#include "../libs.h"
 
43
 
 
44
/*****************************************************************************
 
45
 * XML
 
46
 *****************************************************************************/
 
47
static int vlclua_xml_create_reader( lua_State * );
 
48
static int vlclua_xml_load_catalog( lua_State * );
 
49
static int vlclua_xml_add_catalog( lua_State * );
 
50
 
 
51
static const luaL_Reg vlclua_xml_reg[] = {
 
52
    { "create_reader", vlclua_xml_create_reader },
 
53
    { "load_catalog", vlclua_xml_load_catalog },
 
54
    { "add_catalog", vlclua_xml_add_catalog },
 
55
    { NULL, NULL }
 
56
};
 
57
 
 
58
static int vlclua_xml_delete( lua_State *L )
 
59
{
 
60
    xml_t *p_xml = *(xml_t**)luaL_checkudata( L, 1, "xml" );
 
61
    xml_Delete( p_xml );
 
62
    return 0;
 
63
}
 
64
 
 
65
static int vlclua_xml_create( lua_State *L )
 
66
{
 
67
    xml_t *p_xml = xml_Create( vlclua_get_this( L ) );
 
68
    if( !p_xml )
 
69
        return luaL_error( L, "XML module creation failed." );
 
70
 
 
71
    xml_t **pp_xml = lua_newuserdata( L, sizeof( xml_t * ) );
 
72
    *pp_xml = p_xml;
 
73
 
 
74
    if( luaL_newmetatable( L, "xml" ) )
 
75
    {
 
76
        lua_newtable( L );
 
77
        luaL_register( L, NULL, vlclua_xml_reg );
 
78
        lua_setfield( L, -2, "__index" );
 
79
        lua_pushcfunction( L, vlclua_xml_delete );
 
80
        lua_setfield( L, -2, "__gc" );
 
81
    }
 
82
 
 
83
    lua_setmetatable( L, -2 );
 
84
    return 1;
 
85
}
 
86
 
 
87
static int vlclua_xml_load_catalog( lua_State *L )
 
88
{
 
89
    xml_t *p_xml = *(xml_t**)luaL_checkudata( L, 1, "xml" );
 
90
    const char *psz_catalog = luaL_checkstring( L, 2 );
 
91
    xml_CatalogLoad( p_xml, psz_catalog );
 
92
    return 0;
 
93
}
 
94
 
 
95
static int vlclua_xml_add_catalog( lua_State *L )
 
96
{
 
97
    xml_t *p_xml = *(xml_t**)luaL_checkudata( L, 1, "xml" );
 
98
    const char *psz_str1 = luaL_checkstring( L, 2 );
 
99
    const char *psz_str2 = luaL_checkstring( L, 3 );
 
100
    const char *psz_str3 = luaL_checkstring( L, 4 );
 
101
    xml_CatalogAdd( p_xml, psz_str1, psz_str2, psz_str3 );
 
102
    return 0;
 
103
}
 
104
 
 
105
/*****************************************************************************
 
106
 * XML Reader
 
107
 *****************************************************************************/
 
108
static int vlclua_xml_reader_read( lua_State * );
 
109
static int vlclua_xml_reader_node_type( lua_State * );
 
110
static int vlclua_xml_reader_name( lua_State * );
 
111
static int vlclua_xml_reader_value( lua_State * );
 
112
static int vlclua_xml_reader_next_attr( lua_State * );
 
113
static int vlclua_xml_reader_use_dtd( lua_State * );
 
114
 
 
115
static const luaL_Reg vlclua_xml_reader_reg[] = {
 
116
    { "read", vlclua_xml_reader_read },
 
117
    { "node_type", vlclua_xml_reader_node_type },
 
118
    { "name", vlclua_xml_reader_name },
 
119
    { "value", vlclua_xml_reader_value },
 
120
    { "next_attr", vlclua_xml_reader_next_attr },
 
121
    { "use_dtd", vlclua_xml_reader_use_dtd },
 
122
    { NULL, NULL }
 
123
};
 
124
 
 
125
static int vlclua_xml_reader_delete( lua_State *L )
 
126
{
 
127
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
128
    xml_ReaderDelete( p_reader->p_xml, p_reader );
 
129
    return 0;
 
130
}
 
131
 
 
132
static int vlclua_xml_create_reader( lua_State *L )
 
133
{
 
134
    xml_t *p_xml = *(xml_t**)luaL_checkudata( L, 1, "xml" );
 
135
    stream_t *p_stream = *(stream_t **)luaL_checkudata( L, 2, "stream" );
 
136
 
 
137
    xml_reader_t *p_reader = xml_ReaderCreate( p_xml, p_stream );
 
138
    if( !p_reader )
 
139
        return luaL_error( L, "XML reader creation failed." );
 
140
 
 
141
    xml_reader_t **pp_reader = lua_newuserdata( L, sizeof( xml_reader_t * ) );
 
142
    *pp_reader = p_reader;
 
143
 
 
144
    if( luaL_newmetatable( L, "xml_reader" ) )
 
145
    {
 
146
        lua_newtable( L );
 
147
        luaL_register( L, NULL, vlclua_xml_reader_reg );
 
148
        lua_setfield( L, -2, "__index" );
 
149
        lua_pushcfunction( L, vlclua_xml_reader_delete );
 
150
        lua_setfield( L, -2, "__gc" );
 
151
    }
 
152
 
 
153
    lua_setmetatable( L, -2 );
 
154
    return 1;
 
155
}
 
156
 
 
157
static int vlclua_xml_reader_read( lua_State *L )
 
158
{
 
159
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
160
    lua_pushinteger( L, xml_ReaderRead( p_reader ) );
 
161
    return 1;
 
162
}
 
163
 
 
164
static int vlclua_xml_reader_node_type( lua_State *L )
 
165
{
 
166
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
167
    static const char *ppsz_type[] = { "none", "startelem", "endelem", "text" };
 
168
    lua_pushstring( L, ppsz_type[xml_ReaderNodeType( p_reader )] );
 
169
    return 1;
 
170
}
 
171
 
 
172
static int vlclua_xml_reader_name( lua_State *L )
 
173
{
 
174
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
175
    lua_pushstring( L, xml_ReaderName( p_reader ) );
 
176
    return 1;
 
177
}
 
178
 
 
179
static int vlclua_xml_reader_value( lua_State *L )
 
180
{
 
181
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
182
    lua_pushstring( L, xml_ReaderValue( p_reader ) );
 
183
    return 1;
 
184
}
 
185
 
 
186
static int vlclua_xml_reader_next_attr( lua_State *L )
 
187
{
 
188
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
189
    lua_pushinteger( L, xml_ReaderNextAttr( p_reader ) );
 
190
    return 1;
 
191
}
 
192
 
 
193
static int vlclua_xml_reader_use_dtd( lua_State *L )
 
194
{
 
195
    xml_reader_t *p_reader = *(xml_reader_t**)luaL_checkudata( L, 1, "xml_reader" );
 
196
    bool b_value = lua_toboolean( L, 2 );
 
197
    lua_pushinteger( L, xml_ReaderUseDTD( p_reader, b_value ) );
 
198
    return 1;
 
199
}
 
200
 
 
201
void luaopen_xml( lua_State *L )
 
202
{
 
203
    lua_pushcfunction( L, vlclua_xml_create );
 
204
    lua_setfield( L, -2, "xml" );
 
205
}