Scippy

    SCIP

    Solving Constraint Integer Programs

    xmlparse.c File Reference
    #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_NODEtopPstack (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_NODESCIPxmlProcess (const char *filename)
     
    XML_NODESCIPxmlNewNode (const char *name, int lineno)
     
    XML_ATTRSCIPxmlNewAttr (const char *name, const char *value)
     
    void SCIPxmlAddAttr (XML_NODE *n, XML_ATTR *a)
     
    void SCIPxmlAppendChild (XML_NODE *parent, XML_NODE *child)
     
    static void xmlFreeAttr (XML_ATTR *attr)
     
    void SCIPxmlFreeNode (XML_NODE *node)
     
    void SCIPxmlShowNode (const XML_NODE *root)
     
    const char * SCIPxmlGetAttrval (const XML_NODE *node, const char *name)
     
    const XML_NODESCIPxmlFirstNode (const XML_NODE *node, const char *name)
     
    const XML_NODESCIPxmlNextNode (const XML_NODE *node, const char *name)
     
    const XML_NODESCIPxmlFindNode (const XML_NODE *node, const char *name)
     
    const XML_NODESCIPxmlFindNodeMaxdepth (const XML_NODE *node, const char *name, int depth, int maxdepth)
     
    const XML_NODESCIPxmlNextSibl (const XML_NODE *node)
     
    const XML_NODESCIPxmlPrevSibl (const XML_NODE *node)
     
    const XML_NODESCIPxmlFirstChild (const XML_NODE *node)
     
    const XML_NODESCIPxmlLastChild (const XML_NODE *node)
     
    const char * SCIPxmlGetName (const XML_NODE *node)
     
    int SCIPxmlGetLine (const XML_NODE *node)
     
    const char * SCIPxmlGetData (const XML_NODE *node)
     
    const char * SCIPxmlFindPcdata (const XML_NODE *node, const char *name)
     

    Macro Definition Documentation

    ◆ NAME_EXT_SIZE

    #define NAME_EXT_SIZE   128

    Definition at line 64 of file xmlparse.c.

    ◆ ATTR_EXT_SIZE

    #define ATTR_EXT_SIZE   4096

    Definition at line 65 of file xmlparse.c.

    ◆ DATA_EXT_SIZE

    #define DATA_EXT_SIZE   4096

    Definition at line 66 of file xmlparse.c.

    ◆ LINE_BUF_SIZE

    #define LINE_BUF_SIZE   8192

    Definition at line 67 of file xmlparse.c.

    ◆ xmlError

    #define xmlError (   a,
      b 
    )    xmlErrmsg(a, b, FALSE, __FILE__, __LINE__)

    Definition at line 69 of file xmlparse.c.

    Typedef Documentation

    ◆ PSTACK

    typedef struct parse_stack_struct PSTACK

    Definition at line 73 of file xmlparse.c.

    ◆ PPOS

    typedef struct parse_pos_struct PPOS

    Definition at line 74 of file xmlparse.c.

    ◆ PSTATE

    typedef enum parse_state_enum PSTATE

    Definition at line 85 of file xmlparse.c.

    Enumeration Type Documentation

    ◆ 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 77 of file xmlparse.c.

    Function Documentation

    ◆ xmlErrmsg()

    static void xmlErrmsg ( PPOS ppos,
    const char *  msg,
    XML_Bool  msg_only,
    const char *  file,
    int  line 
    )
    static

    output error message with corresponding line and position

    Definition at line 111 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 SCIPxmlProcess().

    ◆ pushPstack()

    static XML_Bool pushPstack ( PPOS ppos,
    XML_NODE node 
    )
    static

    Push new element on the parse stack.

    TRUE if it worked, FAILURE otherwise.

    Definition at line 170 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 SCIPxmlProcess().

    ◆ topPstack()

    static XML_NODE * topPstack ( const PPOS ppos)
    static

    returns top element on stack (which has to be present)

    Definition at line 194 of file xmlparse.c.

    References parse_stack_struct::node, NULL, and parse_pos_struct::top.

    Referenced by handleDecl(), handleEndtag(), handleStarttag(), procInTag(), and procPcdata().

    ◆ popPstack()

    static XML_Bool popPstack ( PPOS ppos)
    static

    remove top element from stack and deletes it

    TRUE if ok, FALSE otherwise

    Parameters
    pposinput stream position

    Definition at line 209 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 void clearPstack ( PPOS ppos)
    static

    remove complete stack

    Definition at line 237 of file xmlparse.c.

    References NULL, popPstack(), and parse_pos_struct::top.

    Referenced by SCIPxmlProcess().

    ◆ mygetc()

    static int mygetc ( PPOS ppos)
    static

    Returns the next character from the input buffer and fills the buffer if it is empty (similar to fgetc()).

    Definition at line 249 of file xmlparse.c.

    References parse_pos_struct::buf, FGETS, parse_pos_struct::fp, FREAD, LINE_BUF_SIZE, NULL, and parse_pos_struct::pos.

    Referenced by getsymbol().

    ◆ getsymbol()

    static int getsymbol ( PPOS ppos)
    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 323 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(), procBefore(), procInTag(), procPcdata(), and skipSpace().

    ◆ ungetsymbol()

    static void ungetsymbol ( PPOS ppos,
    int  c 
    )
    static

    Reinserts a character into the input stream

    Definition at line 359 of file xmlparse.c.

    References parse_pos_struct::nextsym, and NULL.

    Referenced by getName(), procBefore(), procInTag(), and procPcdata().

    ◆ skipSpace()

    static int skipSpace ( PPOS ppos)
    static

    Skip all spaces and return the next non-space character or EOF

    Definition at line 372 of file xmlparse.c.

    References getsymbol(), and NULL.

    Referenced by getAttrval(), handleEndtag(), procBefore(), procInTag(), and procPcdata().

    ◆ getName()

    static char * getName ( PPOS ppos)
    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 395 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 char * getAttrval ( PPOS ppos)
    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 460 of file xmlparse.c.

    References ALLOC_ABORT, ATTR_EXT_SIZE, BMSallocMemoryArray, BMSfreeMemoryArray, BMSreallocMemoryArray, getsymbol(), NULL, skipSpace(), and xmlError.

    Referenced by procInTag().

    ◆ doComment()

    static XML_Bool doComment ( PPOS ppos)
    static

    Skip comment

    Return FALSE if an error occurs.

    Definition at line 524 of file xmlparse.c.

    References FALSE, getsymbol(), NULL, TRUE, XML_Bool, and xmlError.

    Referenced by handleDecl().

    ◆ doCdata()

    static char * doCdata ( PPOS ppos)
    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 560 of file xmlparse.c.

    References ALLOC_ABORT, BMSallocMemoryArray, BMSfreeMemoryArray, BMSreallocMemoryArray, DATA_EXT_SIZE, getsymbol(), NULL, and xmlError.

    Referenced by handleDecl().

    ◆ handlePi()

    static void handlePi ( PPOS ppos)
    static

    Handle processing instructions (skipping)

    Definition at line 626 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 void handleDecl ( PPOS ppos)
    static

    Handles declarations that start with a <!.

    This includes comments. Does currenlty not work very well, because of DTDs.

    Definition at line 655 of file xmlparse.c.

    References BMSduplicateMemoryArray, BMSfreeMemoryArray, doCdata(), doComment(), getsymbol(), parse_pos_struct::lineno, NULL, SCIPxmlAppendChild(), SCIPxmlNewNode(), parse_pos_struct::state, topPstack(), XML_STATE_BEFORE, XML_STATE_ERROR, and xmlError.

    Referenced by procBefore().

    ◆ handleEndtag()

    static void handleEndtag ( PPOS ppos)
    static

    ◆ handleStarttag()

    static void handleStarttag ( PPOS ppos)
    static

    ◆ procBefore()

    static void procBefore ( PPOS ppos)
    static

    Checks for next tag

    Parameters
    pposinput stream position

    Definition at line 839 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 void procInTag ( PPOS ppos)
    static

    ◆ procPcdata()

    ◆ xmlParse()

    static XML_Bool xmlParse ( PPOS ppos)
    static

    Parse input stream

    Parameters
    pposinput stream position

    Definition at line 1051 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 SCIPxmlProcess().

    ◆ SCIPxmlProcess()

    ◆ SCIPxmlNewNode()

    XML_NODE * SCIPxmlNewNode ( const char *  name,
    int  lineno 
    )

    create new node

    Definition at line 1172 of file xmlparse.c.

    References BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, and NULL.

    Referenced by handleDecl(), handleStarttag(), procPcdata(), and SCIPxmlProcess().

    ◆ SCIPxmlNewAttr()

    XML_ATTR * SCIPxmlNewAttr ( const char *  name,
    const char *  value 
    )

    create new attribute

    Definition at line 1191 of file xmlparse.c.

    References a, BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, SCIP_Var::name, and NULL.

    Referenced by procInTag(), and SCIPxmlProcess().

    ◆ SCIPxmlAddAttr()

    void SCIPxmlAddAttr ( XML_NODE n,
    XML_ATTR a 
    )

    add attribute

    Definition at line 1211 of file xmlparse.c.

    References a, and NULL.

    Referenced by procInTag(), and SCIPxmlProcess().

    ◆ SCIPxmlAppendChild()

    void SCIPxmlAppendChild ( XML_NODE parent,
    XML_NODE child 
    )

    append child node

    Definition at line 1224 of file xmlparse.c.

    References NULL.

    Referenced by handleDecl(), handleStarttag(), and procPcdata().

    ◆ xmlFreeAttr()

    static void xmlFreeAttr ( XML_ATTR attr)
    static

    free attribute

    Definition at line 1246 of file xmlparse.c.

    References a, b, BMSfreeMemory, BMSfreeMemoryArray, SCIP_Var::name, and NULL.

    Referenced by SCIPxmlFreeNode().

    ◆ SCIPxmlFreeNode()

    void SCIPxmlFreeNode ( XML_NODE node)

    ◆ SCIPxmlShowNode()

    void SCIPxmlShowNode ( const XML_NODE root)

    output node

    Definition at line 1305 of file xmlparse.c.

    References a, infoMessage, SCIP_Var::name, NULL, and SCIPxmlShowNode().

    Referenced by SCIP_DECL_READERREAD(), and SCIPxmlShowNode().

    ◆ SCIPxmlGetAttrval()

    const char * SCIPxmlGetAttrval ( const XML_NODE node,
    const char *  name 
    )

    ◆ SCIPxmlFirstNode()

    const XML_NODE * SCIPxmlFirstNode ( const XML_NODE node,
    const char *  name 
    )

    return first node

    Definition at line 1358 of file xmlparse.c.

    References NULL.

    Referenced by SCIPxmlNextNode().

    ◆ SCIPxmlNextNode()

    const XML_NODE * SCIPxmlNextNode ( const XML_NODE node,
    const char *  name 
    )

    return next node

    Definition at line 1378 of file xmlparse.c.

    References NULL, and SCIPxmlFirstNode().

    ◆ SCIPxmlFindNode()

    const XML_NODE * SCIPxmlFindNode ( const XML_NODE node,
    const char *  name 
    )

    find node

    Definition at line 1390 of file xmlparse.c.

    References NULL, r, and SCIPxmlFindNode().

    Referenced by SCIPxmlFindNode(), and SCIPxmlFindPcdata().

    ◆ SCIPxmlFindNodeMaxdepth()

    const XML_NODE * SCIPxmlFindNodeMaxdepth ( const XML_NODE node,
    const char *  name,
    int  depth,
    int  maxdepth 
    )

    find node with bound on the depth

    Parameters
    nodecurrent node - use start node to begin
    namename of tag to search for
    depthcurrent depth - start with 0 for root
    maxdepthmaximal depth

    Definition at line 1415 of file xmlparse.c.

    References NULL, r, and SCIPxmlFindNodeMaxdepth().

    Referenced by readConstraints(), readLinearCoefs(), readNConstraints(), readNonlinearExprs(), readObjective(), readQuadraticCoefs(), readSOScons(), readVariables(), readXmlSolFile(), SCIP_DECL_READERREAD(), and SCIPxmlFindNodeMaxdepth().

    ◆ SCIPxmlNextSibl()

    const XML_NODE * SCIPxmlNextSibl ( const XML_NODE node)

    ◆ SCIPxmlPrevSibl()

    const XML_NODE * SCIPxmlPrevSibl ( const XML_NODE node)

    return previous sibling

    Definition at line 1455 of file xmlparse.c.

    References NULL.

    ◆ SCIPxmlFirstChild()

    const XML_NODE * SCIPxmlFirstChild ( const XML_NODE node)

    ◆ SCIPxmlLastChild()

    const XML_NODE * SCIPxmlLastChild ( const XML_NODE node)

    return last child

    Definition at line 1475 of file xmlparse.c.

    References NULL.

    ◆ SCIPxmlGetName()

    const char * SCIPxmlGetName ( const XML_NODE node)

    return name of node

    Definition at line 1485 of file xmlparse.c.

    References NULL.

    Referenced by readExpression(), readLinearCoefs(), readNonlinearExprs(), readQuadraticCoefs(), and readSOScons().

    ◆ SCIPxmlGetLine()

    int SCIPxmlGetLine ( const XML_NODE node)

    get line number

    Definition at line 1495 of file xmlparse.c.

    References NULL.

    ◆ SCIPxmlGetData()

    const char * SCIPxmlGetData ( const XML_NODE node)

    get data

    Definition at line 1505 of file xmlparse.c.

    References NULL.

    Referenced by readLinearCoefs(), readObjective(), and SCIP_DECL_READERREAD().

    ◆ SCIPxmlFindPcdata()

    const char * SCIPxmlFindPcdata ( const XML_NODE node,
    const char *  name 
    )

    find PCDATA

    Definition at line 1515 of file xmlparse.c.

    References NULL, and SCIPxmlFindNode().