Ginga  0.13.6.1771-df200
The iTV middleware.
Parser.cpp File Reference
#include "aux-ginga.h"
#include "Parser.h"
#include "Context.h"
#include "Document.h"
#include "Media.h"
#include "MediaSettings.h"
#include "Switch.h"
#include <libxml/tree.h>
#include <libxml/parser.h>
Include dependency graph for Parser.cpp:

Classes

class  ParserElt
 
struct  ParserConnRole
 
struct  ParserLinkBind
 
class  ParserState
 
struct  ParserSyntaxAttr
 
struct  ParserSyntaxElt
 

Macros

#define toCString(s)   deconst (char *, (s))
 
#define toXmlChar(s)   (xmlChar *)(deconst (char *, (s).c_str ()))
 
#define toCPPString(s)   string (deconst (char *, (s)))
 
#define UDATA_GET(obj, key, ptr)
 
#define UDATA_SET(obj, key, ptr, fn)
 
#define ATTR_REQUIRED   (PARSER_SYNTAX_ATTR_REQUIRED)
 
#define ATTR_UNIQUE   (PARSER_SYNTAX_ATTR_UNIQUE)
 
#define ATTR_NONEMPTY   (PARSER_SYNTAX_ATTR_NONEMPTY)
 
#define ATTR_NAME   (PARSER_SYNTAX_ATTR_NAME)
 
#define ATTR_NONEMPTY_NAME   (ATTR_NONEMPTY | ATTR_NAME)
 
#define ATTR_REQUIRED_NONEMPTY_NAME   (ATTR_REQUIRED | ATTR_NONEMPTY_NAME)
 
#define ATTR_ID   (ATTR_UNIQUE | ATTR_REQUIRED_NONEMPTY_NAME)
 
#define ATTR_OPT_ID   (ATTR_UNIQUE | ATTR_NONEMPTY_NAME)
 
#define ATTR_IDREF   (ATTR_REQUIRED_NONEMPTY_NAME)
 
#define ATTR_OPT_IDREF   (ATTR_NONEMPTY_NAME)
 
#define ELT_CACHE   (PARSER_SYNTAX_ELT_CACHE)
 
#define ELT_GEN_ID   (PARSER_SYNTAX_ELT_GEN_ID)
 
#define PARSER_SYNTAX_TABLE_INDEX_DEFN(tabname, Type)
 
#define FLAGS   (XML_PARSE_NOERROR | XML_PARSE_NOWARNING)
 

Typedefs

typedef struct ParserConnRole ParserConnRole
 
typedef struct ParserLinkBind ParserLinkBind
 
typedef bool( ParserSyntaxEltPush) (ParserState *, ParserElt *)
 
typedef bool( ParserSyntaxEltPop) (ParserState *, ParserElt *)
 
typedef struct ParserSyntaxAttr ParserSyntaxAttr
 
typedef struct ParserSyntaxElt ParserSyntaxElt
 

Enumerations

enum  ParserSyntaxAttrFlag { PARSER_SYNTAX_ATTR_REQUIRED = 1<<1, PARSER_SYNTAX_ATTR_UNIQUE = 1<<2, PARSER_SYNTAX_ATTR_NONEMPTY = 1<<3, PARSER_SYNTAX_ATTR_NAME = 1<<4 }
 
enum  ParserSyntaxEltFlag { PARSER_SYNTAX_ELT_CACHE = 1<<1, PARSER_SYNTAX_ELT_GEN_ID = 1<<2 }
 

Functions

static bool xmlGetPropAsString (xmlNode *node, const string &name, string *result)
 
static bool xmlIsValidName (const string &value, char *offending)
 
static bool parser_syntax_table_index (const string &tag, ParserSyntaxElt **result)
 
static map< string, bool > parser_syntax_table_get_possible_children (const string &tag)
 
static bool parser_syntax_reserved_role_table_index (const string &role, bool *condition, Event::Type *type, Event::Transition *transition)
 
 PARSER_SYNTAX_TABLE_INDEX_DEFN (event_type, Event::Type)
 
 PARSER_SYNTAX_TABLE_INDEX_DEFN (transition, Event::Transition)
 
 PARSER_SYNTAX_TABLE_INDEX_DEFN (connective, Predicate::Type)
 
 PARSER_SYNTAX_TABLE_INDEX_DEFN (comparator, Predicate::Test)
 
static bool parser_syntax_parse_bool (const string &str, bool *result)
 
static void savedRectCleanup (void *ptr)
 
static void assessCleanup (void *ptr)
 
static void rolesCleanup (void *ptr)
 
static void predCleanup (void *ptr)
 
static void leftOrRightCleanup (void *ptr)
 
static void portsCleanup (void *ptr)
 
static void bindsCleanup (void *ptr)
 
static void paramsCleanup (void *ptr)
 
static Documentprocess (xmlDoc *xml, int width, int height, string *errmsg)
 

Variables

static map< string, ParserSyntaxEltparser_syntax_table
 
static map< string, pair< Event::Type, Event::Transition > > parser_syntax_reserved_role_table
 
static map< string, Event::Typeparser_syntax_event_type_table
 
static map< string, Event::Transitionparser_syntax_transition_table
 
static map< string, Predicate::Typeparser_syntax_connective_table
 
static map< string, Predicate::Testparser_syntax_comparator_table
 

Macro Definition Documentation

#define ATTR_ID   (ATTR_UNIQUE | ATTR_REQUIRED_NONEMPTY_NAME)
#define ATTR_IDREF   (ATTR_REQUIRED_NONEMPTY_NAME)
#define ATTR_NAME   (PARSER_SYNTAX_ATTR_NAME)
#define ATTR_NONEMPTY   (PARSER_SYNTAX_ATTR_NONEMPTY)
#define ATTR_NONEMPTY_NAME   (ATTR_NONEMPTY | ATTR_NAME)
#define ATTR_OPT_ID   (ATTR_UNIQUE | ATTR_NONEMPTY_NAME)
#define ATTR_OPT_IDREF   (ATTR_NONEMPTY_NAME)
#define ATTR_REQUIRED   (PARSER_SYNTAX_ATTR_REQUIRED)
#define ATTR_REQUIRED_NONEMPTY_NAME   (ATTR_REQUIRED | ATTR_NONEMPTY_NAME)
#define ATTR_UNIQUE   (PARSER_SYNTAX_ATTR_UNIQUE)
#define ELT_CACHE   (PARSER_SYNTAX_ELT_CACHE)
#define ELT_GEN_ID   (PARSER_SYNTAX_ELT_GEN_ID)
#define FLAGS   (XML_PARSE_NOERROR | XML_PARSE_NOWARNING)
#define PARSER_SYNTAX_TABLE_INDEX_DEFN (   tabname,
  Type 
)
Value:
static bool \
parser_syntax_##tabname##_table_index (const string &str, \
Type *result) \
{ \
auto it = parser_syntax_##tabname##_table.find (str); \
if (it == parser_syntax_##tabname##_table.end ()) \
return false; \
tryset (result, it->second); \
return true; \
}
#define tryset(p, x)
Definition: aux-glib.h:30
#define toCString (   s)    deconst (char *, (s))

Referenced by ParserState::errElt().

#define toXmlChar (   s)    (xmlChar *)(deconst (char *, (s).c_str ()))

Referenced by xmlGetPropAsString().

Typedef Documentation

typedef bool( ParserSyntaxEltPop) (ParserState *, ParserElt *)
typedef bool( ParserSyntaxEltPush) (ParserState *, ParserElt *)

Enumeration Type Documentation

Enumerator
PARSER_SYNTAX_ATTR_REQUIRED 
PARSER_SYNTAX_ATTR_UNIQUE 
PARSER_SYNTAX_ATTR_NONEMPTY 
PARSER_SYNTAX_ATTR_NAME 
Enumerator
PARSER_SYNTAX_ELT_CACHE 
PARSER_SYNTAX_ELT_GEN_ID 

Function Documentation

static void assessCleanup ( void *  ptr)
static
static void bindsCleanup ( void *  ptr)
static

Referenced by ParserState::pushLink().

static void leftOrRightCleanup ( void *  ptr)
static
static void paramsCleanup ( void *  ptr)
static

Referenced by ParserState::pushLink().

static bool parser_syntax_parse_bool ( const string &  str,
bool *  result 
)
static
static bool parser_syntax_reserved_role_table_index ( const string &  role,
bool *  condition,
Event::Type type,
Event::Transition transition 
)
static
static map<string, bool> parser_syntax_table_get_possible_children ( const string &  tag)
static

References parser_syntax_table.

Referenced by ParserState::processNode().

static bool parser_syntax_table_index ( const string &  tag,
ParserSyntaxElt **  result 
)
static

References parser_syntax_table, and tryset.

Referenced by ParserState::processNode().

PARSER_SYNTAX_TABLE_INDEX_DEFN ( event_type  ,
Event::Type   
)
PARSER_SYNTAX_TABLE_INDEX_DEFN ( transition  ,
Event::Transition   
)
PARSER_SYNTAX_TABLE_INDEX_DEFN ( connective  ,
Predicate::Type   
)
PARSER_SYNTAX_TABLE_INDEX_DEFN ( comparator  ,
Predicate::Test   
)
static void portsCleanup ( void *  ptr)
static
static void predCleanup ( void *  ptr)
static
static Document* process ( xmlDoc *  xml,
int  width,
int  height,
string *  errmsg 
)
static
static void rolesCleanup ( void *  ptr)
static
static void savedRectCleanup ( void *  ptr)
static

Referenced by ParserState::pushRegion().

static bool xmlGetPropAsString ( xmlNode *  node,
const string &  name,
string *  result 
)
inlinestatic

References g_free(), toCPPString, toXmlChar, and tryset.

Referenced by ParserState::processNode().

static bool xmlIsValidName ( const string &  value,
char *  offending 
)
static

References tryset.

Referenced by ParserState::processNode().

Variable Documentation

map<string, Predicate::Test> parser_syntax_comparator_table
static
Initial value:
=
{
{"eq", Predicate::EQ},
{"ne", Predicate::NE},
{"lt", Predicate::LT},
{"lte", Predicate::LE},
{"gt", Predicate::GT},
{"gte", Predicate::GE},
}
Definition: Predicate.h:44
Definition: Predicate.h:43
Definition: Predicate.h:40
Definition: Predicate.h:41
Definition: Predicate.h:45
Definition: Predicate.h:42
map<string, Predicate::Type> parser_syntax_connective_table
static
Initial value:
=
{
}
Definition: Predicate.h:35
Definition: Predicate.h:34
Definition: Predicate.h:33
map<string, Event::Type> parser_syntax_event_type_table
static
Initial value:
=
{
{"presentation", Event::PRESENTATION},
{"attribution", Event::ATTRIBUTION},
{"selection", Event::SELECTION},
}
Definition: Event.h:34
Definition: Event.h:32
Definition: Event.h:33
map<string, pair<Event::Type, Event::Transition> > parser_syntax_reserved_role_table
static
Initial value:
=
{
{"onBeginAttribution", {Event::ATTRIBUTION, Event::START}},
{"onEndAttribution", {Event::ATTRIBUTION, Event::STOP}},
{"onSelection", {Event::SELECTION, Event::START}},
{"onBeginSelection", {Event::SELECTION, Event::START}},
{"onEndSelection", {Event::SELECTION, Event::STOP}},
{"start", {Event::PRESENTATION, Event::START}},
{"stop", {Event::PRESENTATION, Event::STOP}},
{"abort", {Event::PRESENTATION, Event::ABORT}},
{"pause", {Event::PRESENTATION, Event::PAUSE}},
{"resume", {Event::PRESENTATION, Event::RESUME}},
{"set", {Event::ATTRIBUTION, Event::START}},
}
Definition: Event.h:34
Definition: Event.h:32
Definition: Event.h:47
Definition: Event.h:50
Definition: Event.h:33
Definition: Event.h:48
Definition: Event.h:49
Definition: Event.h:46

Referenced by parser_syntax_reserved_role_table_index().

map<string, ParserSyntaxElt> parser_syntax_table
static
map<string, Event::Transition> parser_syntax_transition_table
static
Initial value:
=
{
{"start", Event::START},
{"starts", Event::START},
{"pause", Event::PAUSE},
{"pauses", Event::PAUSE},
{"resume", Event::RESUME},
{"resumes", Event::RESUME},
{"stop", Event::STOP},
{"stops", Event::STOP},
{"abort", Event::ABORT},
{"aborts", Event::ABORT},
}
Definition: Event.h:47
Definition: Event.h:50
Definition: Event.h:48
Definition: Event.h:49
Definition: Event.h:46