#include <blockmemshell/memory.h>
#include "xml.h"
#include "xmldef.h"
#include "scip/misc.h"
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
#include <string.h>
Go to the source code of this file.
Data Structures | |
struct | parse_stack_struct |
struct | parse_pos_struct |
Macros | |
#define | NAME_EXT_SIZE 128 |
#define | ATTR_EXT_SIZE 4096 |
#define | DATA_EXT_SIZE 4096 |
#define | LINE_BUF_SIZE 8192 |
#define | xmlError(a, b) xmlErrmsg(a, b, FALSE, __FILE__, __LINE__) |
Typedefs | |
typedef struct parse_stack_struct | PSTACK |
typedef struct parse_pos_struct | PPOS |
typedef enum parse_state_enum | PSTATE |
Enumerations | |
enum | parse_state_enum { XML_STATE_ERROR, XML_STATE_BEFORE, XML_STATE_IN_TAG, XML_STATE_PCDATA, XML_STATE_EOF } |
Functions | |
static void | xmlErrmsg (PPOS *ppos, const char *msg, XML_Bool msg_only, const char *file, int line) |
static XML_Bool | pushPstack (PPOS *ppos, XML_NODE *node) |
static XML_NODE * | topPstack (const PPOS *ppos) |
static XML_Bool | popPstack (PPOS *ppos) |
static void | clearPstack (PPOS *ppos) |
static int | mygetc (PPOS *ppos) |
static int | getsymbol (PPOS *ppos) |
static void | ungetsymbol (PPOS *ppos, int c) |
static int | skipSpace (PPOS *ppos) |
static char * | getName (PPOS *ppos) |
static char * | getAttrval (PPOS *ppos) |
static XML_Bool | doComment (PPOS *ppos) |
static char * | doCdata (PPOS *ppos) |
static void | handlePi (PPOS *ppos) |
static void | handleDecl (PPOS *ppos) |
static void | handleEndtag (PPOS *ppos) |
static void | handleStarttag (PPOS *ppos) |
static void | procBefore (PPOS *ppos) |
static void | procInTag (PPOS *ppos) |
static void | procPcdata (PPOS *ppos) |
static XML_Bool | xmlParse (PPOS *ppos) |
XML_NODE * | xmlProcess (const char *filename) |
XML_NODE * | xmlNewNode (const char *name, int lineno) |
XML_ATTR * | xmlNewAttr (const char *name, const char *value) |
void | xmlAddAttr (XML_NODE *n, XML_ATTR *a) |
void | xmlAppendChild (XML_NODE *parent, XML_NODE *child) |
static void | xmlFreeAttr (XML_ATTR *attr) |
void | xmlFreeNode (XML_NODE *node) |
void | xmlShowNode (const XML_NODE *root) |
const char * | xmlGetAttrval (const XML_NODE *node, const char *name) |
const XML_NODE * | xmlFirstNode (const XML_NODE *node, const char *name) |
const XML_NODE * | xmlNextNode (const XML_NODE *node, const char *name) |
const XML_NODE * | xmlFindNode (const XML_NODE *node, const char *name) |
const XML_NODE * | xmlFindNodeMaxdepth (const XML_NODE *node, const char *name, int depth, int maxdepth) |
const XML_NODE * | xmlNextSibl (const XML_NODE *node) |
const XML_NODE * | xmlPrevSibl (const XML_NODE *node) |
const XML_NODE * | xmlFirstChild (const XML_NODE *node) |
const XML_NODE * | xmlLastChild (const XML_NODE *node) |
const char * | xmlGetName (const XML_NODE *node) |
int | xmlGetLine (const XML_NODE *node) |
const char * | xmlGetData (const XML_NODE *node) |
const char * | xmlFindPcdata (const XML_NODE *node, const char *name) |
Macro Definition Documentation
◆ NAME_EXT_SIZE
#define NAME_EXT_SIZE 128 |
Definition at line 55 of file xmlparse.c.
Referenced by getName().
◆ ATTR_EXT_SIZE
#define ATTR_EXT_SIZE 4096 |
Definition at line 56 of file xmlparse.c.
Referenced by getAttrval().
◆ DATA_EXT_SIZE
#define DATA_EXT_SIZE 4096 |
Definition at line 57 of file xmlparse.c.
Referenced by doCdata(), and procPcdata().
◆ LINE_BUF_SIZE
#define LINE_BUF_SIZE 8192 |
Definition at line 58 of file xmlparse.c.
Referenced by mygetc().
◆ xmlError
Definition at line 60 of file xmlparse.c.
Referenced by doCdata(), doComment(), getAttrval(), getName(), handleDecl(), handleEndtag(), handlePi(), handleStarttag(), popPstack(), procBefore(), procInTag(), procPcdata(), xmlParse(), and xmlProcess().
Typedef Documentation
◆ PSTACK
typedef struct parse_stack_struct PSTACK |
Definition at line 64 of file xmlparse.c.
◆ PPOS
typedef struct parse_pos_struct PPOS |
Definition at line 65 of file xmlparse.c.
◆ PSTATE
typedef enum parse_state_enum PSTATE |
Definition at line 76 of file xmlparse.c.
Enumeration Type Documentation
◆ parse_state_enum
enum parse_state_enum |
state of the parser
Enumerator | |
---|---|
XML_STATE_ERROR | |
XML_STATE_BEFORE | |
XML_STATE_IN_TAG | |
XML_STATE_PCDATA | |
XML_STATE_EOF |
Definition at line 68 of file xmlparse.c.
Function Documentation
◆ xmlErrmsg()
|
static |
output error message with corresponding line and position
Definition at line 101 of file xmlparse.c.
References parse_pos_struct::buf, parse_pos_struct::filename, parse_pos_struct::lineno, NULL, and parse_pos_struct::pos.
Referenced by xmlProcess().
◆ pushPstack()
Push new element on the parse stack.
TRUE if it worked, FAILURE otherwise.
Definition at line 160 of file xmlparse.c.
References ALLOC_FALSE, BMSallocMemory, debugMessage, parse_stack_struct::next, parse_stack_struct::node, NULL, parse_pos_struct::top, and TRUE.
Referenced by handleStarttag(), and xmlProcess().
◆ topPstack()
returns top element on stack (which has to be present)
Definition at line 183 of file xmlparse.c.
References parse_stack_struct::node, NULL, and parse_pos_struct::top.
Referenced by handleDecl(), handleEndtag(), handleStarttag(), procInTag(), and procPcdata().
◆ popPstack()
remove top element from stack and deletes it
TRUE if ok, FALSE otherwise
- Parameters
-
ppos input stream position
Definition at line 198 of file xmlparse.c.
References BMSfreeMemory, debugMessage, FALSE, parse_stack_struct::next, parse_stack_struct::node, NULL, parse_pos_struct::top, TRUE, XML_Bool, and xmlError.
Referenced by clearPstack(), handleEndtag(), and procInTag().
◆ clearPstack()
|
static |
remove complete stack
Definition at line 226 of file xmlparse.c.
References NULL, popPstack(), and parse_pos_struct::top.
Referenced by xmlProcess().
◆ mygetc()
|
static |
Returns the next character from the input buffer and fills the buffer if it is empty (similar to fgetc()).
Definition at line 238 of file xmlparse.c.
References parse_pos_struct::buf, FGETS, parse_pos_struct::fp, FREAD, getsymbol(), parse_pos_struct::lastsym, LINE_BUF_SIZE, parse_pos_struct::lineno, parse_pos_struct::nextsym, NULL, and parse_pos_struct::pos.
Referenced by getsymbol().
◆ getsymbol()
|
static |
Read input from fp_in (variant).
Here we convert all LF or CR into SPACE and return maximally one SPACE after the other.
- Note
- This function counts lines differently. On systems that have only one '\r' as line feed (MAC) it does not count correctly.
Definition at line 312 of file xmlparse.c.
References debugMessage, parse_pos_struct::lastsym, parse_pos_struct::lineno, mygetc(), parse_pos_struct::nextsym, and NULL.
Referenced by doCdata(), doComment(), getAttrval(), getName(), handleDecl(), handlePi(), mygetc(), procBefore(), procInTag(), procPcdata(), and skipSpace().
◆ ungetsymbol()
|
static |
Reinserts a character into the input stream
Definition at line 348 of file xmlparse.c.
References parse_pos_struct::nextsym, and NULL.
Referenced by getName(), procBefore(), procInTag(), and procPcdata().
◆ skipSpace()
|
static |
Skip all spaces and return the next non-space character or EOF
Definition at line 361 of file xmlparse.c.
References getsymbol(), and NULL.
Referenced by getAttrval(), handleEndtag(), procBefore(), procInTag(), and procPcdata().
◆ getName()
|
static |
Get name of a TAG or attribute from the input stream.
Either it returns a pointer to allocated memory which contains the name or it returns NULL if there is some error.
Definition at line 384 of file xmlparse.c.
References ALLOC_ABORT, BMSallocMemoryArray, BMSfreeMemoryArray, BMSreallocMemoryArray, getsymbol(), NAME_EXT_SIZE, NULL, ungetsymbol(), and xmlError.
Referenced by handleEndtag(), handleStarttag(), and procInTag().
◆ getAttrval()
|
static |
Read the value of an attribute from the input stream.
The value has to be between two " or ' (the other character is then valid as well). The function returns a pointer to allocated memory containing the value or it returns NULL in case of an error.
Definition at line 449 of file xmlparse.c.
References ALLOC_ABORT, ATTR_EXT_SIZE, BMSallocMemoryArray, BMSfreeMemoryArray, BMSreallocMemoryArray, getsymbol(), NULL, skipSpace(), and xmlError.
Referenced by procInTag().
◆ doComment()
Skip comment
Return FALSE if an error occurs.
Definition at line 513 of file xmlparse.c.
References FALSE, getsymbol(), NULL, TRUE, XML_Bool, and xmlError.
Referenced by handleDecl().
◆ doCdata()
|
static |
Handles a CDATA section.
Returns a pointer to allocated memory containing the data of this section or NULL in case of an error.
Definition at line 549 of file xmlparse.c.
References ALLOC_ABORT, BMSallocMemoryArray, BMSfreeMemoryArray, BMSreallocMemoryArray, DATA_EXT_SIZE, getsymbol(), NULL, and xmlError.
Referenced by handleDecl().
◆ handlePi()
|
static |
Handle processing instructions (skipping)
Definition at line 615 of file xmlparse.c.
References getsymbol(), NULL, parse_pos_struct::state, XML_STATE_BEFORE, XML_STATE_ERROR, XML_STATE_PCDATA, and xmlError.
Referenced by procBefore().
◆ handleDecl()
|
static |
Handles declarations that start with a <!.
This includes comments. Does currenlty not work very well, because of DTDs.
Definition at line 644 of file xmlparse.c.
References BMSduplicateMemoryArray, BMSfreeMemoryArray, doCdata(), doComment(), getsymbol(), parse_pos_struct::lineno, parse_stack_struct::node, NULL, parse_pos_struct::state, topPstack(), XML_STATE_BEFORE, XML_STATE_ERROR, xmlAppendChild(), xmlError, and xmlNewNode().
Referenced by procBefore().
◆ handleEndtag()
|
static |
Handle end tag
Definition at line 748 of file xmlparse.c.
References BMSfreeMemoryArray, getName(), NULL, popPstack(), skipSpace(), parse_pos_struct::state, topPstack(), XML_STATE_ERROR, XML_STATE_PCDATA, and xmlError.
Referenced by procBefore().
◆ handleStarttag()
|
static |
Handle start tag
Definition at line 790 of file xmlparse.c.
References BMSfreeMemoryArray, getName(), parse_pos_struct::lineno, parse_stack_struct::node, NULL, pushPstack(), parse_pos_struct::state, topPstack(), XML_STATE_ERROR, XML_STATE_IN_TAG, xmlAppendChild(), xmlError, and xmlNewNode().
Referenced by procBefore().
◆ procBefore()
|
static |
Checks for next tag
- Parameters
-
ppos input stream position
Definition at line 828 of file xmlparse.c.
References getsymbol(), handleDecl(), handleEndtag(), handlePi(), handleStarttag(), NULL, skipSpace(), parse_pos_struct::state, ungetsymbol(), XML_STATE_BEFORE, XML_STATE_ERROR, and xmlError.
Referenced by xmlParse().
◆ procInTag()
|
static |
Process tag
- Parameters
-
ppos input stream position
Definition at line 873 of file xmlparse.c.
References BMSfreeMemoryArray, FALSE, getAttrval(), getName(), getsymbol(), NULL, popPstack(), skipSpace(), parse_pos_struct::state, topPstack(), TRUE, ungetsymbol(), XML_Bool, XML_STATE_ERROR, XML_STATE_IN_TAG, XML_STATE_PCDATA, xmlAddAttr(), xmlError, and xmlNewAttr().
Referenced by xmlParse().
◆ procPcdata()
|
static |
- Parameters
-
ppos input stream position
Definition at line 956 of file xmlparse.c.
References ALLOC_ABORT, BMSallocMemoryArray, BMSduplicateMemoryArray, BMSfreeMemoryArray, BMSreallocMemoryArray, DATA_EXT_SIZE, getsymbol(), parse_pos_struct::lineno, parse_stack_struct::node, NULL, skipSpace(), parse_pos_struct::state, topPstack(), ungetsymbol(), XML_STATE_BEFORE, XML_STATE_EOF, XML_STATE_ERROR, XML_STATE_PCDATA, xmlAppendChild(), xmlError, and xmlNewNode().
Referenced by xmlParse().
◆ xmlParse()
Parse input stream
- Parameters
-
ppos input stream position
Definition at line 1040 of file xmlparse.c.
References debugMessage, FALSE, procBefore(), procInTag(), procPcdata(), parse_pos_struct::state, TRUE, XML_Bool, XML_STATE_BEFORE, XML_STATE_EOF, XML_STATE_ERROR, XML_STATE_IN_TAG, XML_STATE_PCDATA, and xmlError.
Referenced by xmlProcess().
◆ xmlProcess()
XML_NODE* xmlProcess | ( | const char * | filename | ) |
Parse file
- Parameters
-
filename XML file name
Definition at line 1076 of file xmlparse.c.
References BMSallocMemoryArray, BMScopyMemoryArray, BMSfreeMemoryArray, parse_pos_struct::buf, clearPstack(), FALSE, FCLOSE, parse_pos_struct::filename, FOPEN, parse_pos_struct::fp, parse_pos_struct::lastsym, parse_pos_struct::lineno, parse_pos_struct::nextsym, parse_stack_struct::node, NULL, parse_pos_struct::pos, pushPstack(), SCIPstrncpy(), parse_pos_struct::state, parse_pos_struct::top, TRUE, XML_Bool, XML_STATE_BEFORE, xmlAddAttr(), xmlErrmsg(), xmlError, xmlFreeNode(), xmlNewAttr(), xmlNewNode(), and xmlParse().
Referenced by readXmlSolFile(), and SCIP_DECL_READERREAD().
◆ xmlNewNode()
XML_NODE* xmlNewNode | ( | const char * | name, |
int | lineno | ||
) |
create new node
Definition at line 1167 of file xmlparse.c.
References BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, and NULL.
Referenced by handleDecl(), handleStarttag(), procPcdata(), and xmlProcess().
◆ xmlNewAttr()
XML_ATTR* xmlNewAttr | ( | const char * | name, |
const char * | value | ||
) |
create new attribute
Definition at line 1186 of file xmlparse.c.
References a, BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, and NULL.
Referenced by procInTag(), and xmlProcess().
◆ xmlAddAttr()
add attribute
Definition at line 1206 of file xmlparse.c.
Referenced by procInTag(), and xmlProcess().
◆ xmlAppendChild()
append child node
Definition at line 1219 of file xmlparse.c.
References NULL.
Referenced by handleDecl(), handleStarttag(), and procPcdata().
◆ xmlFreeAttr()
|
static |
free attribute
Definition at line 1241 of file xmlparse.c.
References a, b, BMSfreeMemory, BMSfreeMemoryArray, and NULL.
Referenced by xmlFreeNode().
◆ xmlFreeNode()
void xmlFreeNode | ( | XML_NODE * | node | ) |
free node
Definition at line 1266 of file xmlparse.c.
References BMSfreeMemory, BMSfreeMemoryArray, NULL, and xmlFreeAttr().
Referenced by readXmlSolFile(), SCIP_DECL_READERREAD(), and xmlProcess().
◆ xmlShowNode()
void xmlShowNode | ( | const XML_NODE * | root | ) |
output node
Definition at line 1300 of file xmlparse.c.
References a, infoMessage, and NULL.
Referenced by SCIP_DECL_READERREAD().
◆ xmlGetAttrval()
const char* xmlGetAttrval | ( | const XML_NODE * | node, |
const char * | name | ||
) |
get attribute value
Definition at line 1328 of file xmlparse.c.
References a, infoMessage, and NULL.
Referenced by readConstraints(), readExpression(), readLinearCoefs(), readMultIncr(), readNonlinearExprs(), readObjective(), readQuadraticCoefs(), readSOScons(), readVariables(), and readXmlSolFile().
◆ xmlFirstNode()
return first node
Definition at line 1353 of file xmlparse.c.
References NULL.
Referenced by xmlNextNode().
◆ xmlNextNode()
◆ xmlFindNode()
find node
Definition at line 1385 of file xmlparse.c.
References parse_stack_struct::node, NULL, and r.
Referenced by xmlFindPcdata().
◆ xmlFindNodeMaxdepth()
const XML_NODE* xmlFindNodeMaxdepth | ( | const XML_NODE * | node, |
const char * | name, | ||
int | depth, | ||
int | maxdepth | ||
) |
find node with bound on the depth
- Parameters
-
node current node - use start node to begin name name of tag to search for depth current depth - start with 0 for root maxdepth maximal depth
Definition at line 1410 of file xmlparse.c.
References parse_stack_struct::node, NULL, and r.
Referenced by readConstraints(), readLinearCoefs(), readNonlinearExprs(), readObjective(), readQuadraticCoefs(), readSOScons(), readVariables(), readXmlSolFile(), and SCIP_DECL_READERREAD().
◆ xmlNextSibl()
return next sibling
Definition at line 1440 of file xmlparse.c.
References NULL.
Referenced by readConstraints(), readExpression(), readLinearCoefs(), readNonlinearExprs(), readObjective(), readQuadraticCoefs(), readSOScons(), readVariables(), and readXmlSolFile().
◆ xmlPrevSibl()
◆ xmlFirstChild()
return first child
Definition at line 1460 of file xmlparse.c.
References NULL.
Referenced by readConstraints(), readExpression(), readLinearCoefs(), readNonlinearExprs(), readObjective(), readQuadraticCoefs(), readSOScons(), readVariables(), readXmlSolFile(), and SCIP_DECL_READERREAD().
◆ xmlLastChild()
◆ xmlGetName()
const char* xmlGetName | ( | const XML_NODE * | node | ) |
return name of node
Definition at line 1480 of file xmlparse.c.
References NULL.
Referenced by readExpression(), readLinearCoefs(), readNonlinearExprs(), readQuadraticCoefs(), and readSOScons().
◆ xmlGetLine()
int xmlGetLine | ( | const XML_NODE * | node | ) |
◆ xmlGetData()
const char* xmlGetData | ( | const XML_NODE * | node | ) |
get data
Definition at line 1500 of file xmlparse.c.
References NULL.
Referenced by readLinearCoefs(), readObjective(), and SCIP_DECL_READERREAD().
◆ xmlFindPcdata()
const char* xmlFindPcdata | ( | const XML_NODE * | node, |
const char * | name | ||
) |