## cr-parser

cr-parser

## Functions

CRParser * | cr_parser_new ()
CRParser * | cr_parser_new_from_buf ()
CRParser * | cr_parser_new_from_file ()
CRParser * | cr_parser_new_from_input ()
enum CRStatus | cr_parser_set_tknzr ()
enum CRStatus | cr_parser_get_tknzr ()
enum CRStatus | cr_parser_get_parsing_location ()
enum CRStatus | cr_parser_try_to_skip_spaces_and_comments ()
enum CRStatus | cr_parser_set_sac_handler ()
enum CRStatus | cr_parser_get_sac_handler ()
enum CRStatus | cr_parser_set_use_core_grammar ()
enum CRStatus | cr_parser_get_use_core_grammar ()
enum CRStatus | cr_parser_parse ()
enum CRStatus | cr_parser_parse_file ()
enum CRStatus | cr_parser_parse_buf ()
enum CRStatus | cr_parser_set_default_sac_handler ()
enum CRStatus | cr_parser_parse_term ()
enum CRStatus | cr_parser_parse_expr ()
enum CRStatus | cr_parser_parse_prio ()
enum CRStatus | cr_parser_parse_declaration ()
enum CRStatus | cr_parser_parse_statement_core ()
enum CRStatus | cr_parser_parse_ruleset ()
enum CRStatus | cr_parser_parse_import ()
enum CRStatus | cr_parser_parse_media ()
enum CRStatus | cr_parser_parse_page ()
enum CRStatus | cr_parser_parse_charset ()
enum CRStatus | cr_parser_parse_font_face ()
void | cr_parser_destroy ()

## Types and Values

struct | CRParser
| CRParserPriv

## Description

## Functions

### cr_parser_new ()

    CRParser *
    cr_parser_new (CRTknzr *a_tknzr);

Creates a new parser to parse data coming the input stream given in parameter.

Returns the newly created instance of CRParser, or NULL if an error occured.

#### Parameters

a_tknzr | the tokenizer to use for the parsing. |

### cr_parser_new_from_buf ()

    CRParser *
    cr_parser_new_from_buf (guchar *a_buf,
                            gulong a_len,
                            enum CREncoding a_enc,
                            gboolean a_free_buf);

Instanciates a new parser from a memory buffer.

Returns the newly built parser, or NULL if an error arises.

#### Parameters

a_buf | the buffer to parse. |
a_len | the length of the data in the buffer. |
a_enc | the encoding of the input buffer a_buf. |
a_free_buf | if set to TRUE, a_buf will be freed during the destruction of the newly built instance of CRParser. If set to FALSE, it is up to the caller to eventually free it. |

### cr_parser_new_from_file ()

    CRParser *
    cr_parser_new_from_file (const guchar *a_file_uri,
                             enum CREncoding a_enc);

Returns the newly built parser.

#### Parameters

a_file_uri | the uri of the file to parse. |
a_enc | the file encoding to use. |

### cr_parser_new_from_input ()

    CRParser *
    cr_parser_new_from_input (CRInput *a_input);

Returns a newly built parser input.

#### Parameters

a_input | the parser input stream to use. |

### cr_parser_set_tknzr ()

    enum CRStatus
    cr_parser_set_tknzr (CRParser *a_this,
                         CRTknzr *a_tknzr);

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser; |
a_tknzr | the new tokenizer. |

### cr_parser_get_tknzr ()

    enum CRStatus
    cr_parser_get_tknzr (CRParser *a_this,
                         CRTknzr **a_tknzr);

Getter of the parser's underlying tokenizer

Returns CR_OK upon succesful completion, an error code otherwise

#### Parameters

a_this | the current instance of CRParser |
a_tknzr | out parameter. The returned tokenizer |

### cr_parser_get_parsing_location ()

    enum CRStatus
    cr_parser_get_parsing_location (CRParser const *a_this,
                                    CRParsingLocation *a_loc);

Gets the current parsing location.

Returns CR_OK upon succesful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser |
a_loc | the parsing location to get. |

### cr_parser_try_to_skip_spaces_and_comments ()

    enum CRStatus
    cr_parser_try_to_skip_spaces_and_comments
                                   (CRParser *a_this);

Same as `cr_parser_try_to_skip_spaces()` but this one skips spaces and comments.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |

### cr_parser_set_sac_handler ()

    enum CRStatus
    cr_parser_set_sac_handler (CRParser *a_this,
                               CRDocHandler *a_handler);

Sets a SAC document handler to the parser.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |
a_handler | the handler to set. |

### cr_parser_get_sac_handler ()

    enum CRStatus
    cr_parser_get_sac_handler (CRParser *a_this,
                               CRDocHandler **a_handler);

Gets the SAC document handler.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |
a_handler | out parameter. The returned handler. |

### cr_parser_set_use_core_grammar ()

    enum CRStatus
    cr_parser_set_use_core_grammar (CRParser *a_this,
                                    gboolean a_use_core_grammar);

Returns CR_OK upon succesful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |
a_use_core_grammar | where to parse against the css core grammar. |

### cr_parser_get_use_core_grammar ()

    enum CRStatus
    cr_parser_get_use_core_grammar (CRParser const *a_this,
                                    gboolean *a_use_core_grammar);

Returns CR_OK upon succesful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |
a_use_core_grammar | wether to use the core grammar or not. |

### cr_parser_parse ()

    enum CRStatus
    cr_parser_parse (CRParser *a_this);

Parses the data that comes from the input previously associated to the current instance of CRParser.

Returns CR_OK upon succesful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |

### cr_parser_parse_file ()

    enum CRStatus
    cr_parser_parse_file (CRParser *a_this,
                          const guchar *a_file_uri,
                          enum CREncoding a_enc);

Parses a the given in parameter.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | a pointer to the current instance of CRParser. |
a_file_uri | the uri to the file to load. For the time being, |
a_enc | the encoding of the file to parse. only local files are supported. |

### cr_parser_parse_buf ()

    enum CRStatus
    cr_parser_parse_buf (CRParser *a_this,
                         const guchar *a_buf,
                         gulong a_len,
                         enum CREncoding a_enc);

Parses a stylesheet from a buffer

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRparser |
a_buf | the input buffer |
a_len | the length of the input buffer |
a_enc | the encoding of the buffer |

### cr_parser_set_default_sac_handler ()

    enum CRStatus
    cr_parser_set_default_sac_handler (CRParser *a_this);

Sets the SAC handler associated to the current instance of CRParser to the default SAC handler.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | a pointer to the current instance of CRParser. |

### cr_parser_parse_term ()

    enum CRStatus
    cr_parser_parse_term (CRParser *a_this,
                          CRTerm **a_term);

Parses a "term" as defined in the css2 spec, appendix D.1: term ::= unary_operator? [NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* | ANGLE S* | TIME S* | FREQ S* | function ] | STRING S* | IDENT S* | URI S* | RGB S* | UNICODERANGE S* | hexcolor

TODO: handle parsing of 'RGB'

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_term | out parameter. The successfully parsed term. |

### cr_parser_parse_expr ()

    enum CRStatus
    cr_parser_parse_expr (CRParser *a_this,
                          CRTerm **a_expr);

Parses an expression as defined by the css2 spec in appendix D.1: expr: term [ operator term ]*

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |
a_expr | out parameter. the parsed expression. |

### cr_parser_parse_prio ()

    enum CRStatus
    cr_parser_parse_prio (CRParser *a_this,
                          CRString **a_prio);

Parses a declaration priority as defined by the css2 grammar in appendix C: prio: IMPORTANT_SYM S*

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |
a_prio | a string representing the priority. Today, only "!important" is returned as only this priority is defined by css2. |

### cr_parser_parse_declaration ()

    enum CRStatus
    cr_parser_parse_declaration (CRParser *a_this,
                                 CRString **a_property,
                                 CRTerm **a_expr,
                                 gboolean *a_important);

TODO: return the parsed priority, so that upper layers can take benefit from it. Parses a "declaration" as defined by the css2 spec in appendix D.1: declaration ::= [property ':' S* expr prio?]?

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |
a_property | the successfully parsed property. The caller *must* free the returned pointer. |
a_expr | the expression that represents the attribute value. The caller *must* free the returned pointer. |

### cr_parser_parse_statement_core ()

    enum CRStatus
    cr_parser_parse_statement_core (CRParser *a_this);

Parses a statement as defined by the css core grammar in chapter 4.1 of the css2 spec. statement : ruleset | at-rule;

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |

### cr_parser_parse_ruleset ()

    enum CRStatus
    cr_parser_parse_ruleset (CRParser *a_this);

Parses a "ruleset" as defined in the css2 spec at appendix D.1. ruleset ::= selector [ ',' S* selector ]* '{' S* declaration? [ ';' S* declaration? ]* '}' S*;

This methods calls the the SAC handler on the relevant SAC handler callbacks whenever it encounters some specific constructions. See the documentation of CRDocHandler (the SAC handler) to know when which SAC handler is called.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |

### cr_parser_parse_import ()

    enum CRStatus
    cr_parser_parse_import (CRParser *a_this,
                            GList **a_media_list,
                            CRString **a_import_string,
                            CRParsingLocation *a_location);

Parses an 'import' declaration as defined in the css2 spec in appendix D.1:

import ::= @import [STRING|URI] S* [ medium [ ',' S* medium]* ]? ';' S*

Returns CR_OK upon sucessfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |
a_media_list | out parameter. A linked list of CRString Each CRString is a string that contains a 'medium' declaration part of the successfully parsed 'import' declaration. |
a_import_string | out parameter. A string that contains the 'import string". The import string can be either an uri (if it starts with the substring "uri(") or a any other css2 string. Note that *a_import_string must be initially set to NULL or else, this function will return CR_BAD_PARAM_ERROR. |
a_location | the location (line, column) where the import has been parsed |

### cr_parser_parse_media ()

    enum CRStatus
    cr_parser_parse_media (CRParser *a_this);

Parses a 'media' declaration as specified in the css2 spec at appendix D.1:

media ::= @media S* medium [ ',' S* medium ]* '{' S* ruleset* '}' S*

Note that this function calls the required sac handlers during the parsing to notify media productions. See CRDocHandler to know the callback called during @media parsing.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |

### cr_parser_parse_page ()

    enum CRStatus
    cr_parser_parse_page (CRParser *a_this);

Parses '@page' rule as specified in the css2 spec in appendix D.1: page ::= PAGE_SYM S* IDENT? pseudo_page? S* '{' S* declaration [ ';' S* declaration ]* '}' S*

This function also calls the relevant SAC handlers whenever it encounters a construction that must be reported to the calling application.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |

### cr_parser_parse_charset ()

    enum CRStatus
    cr_parser_parse_charset (CRParser *a_this,
                             CRString **a_value,
                             CRParsingLocation *a_charset_sym_location);

Parses a charset declaration as defined implictly by the css2 spec in appendix D.1: charset ::= CHARSET_SYM S* STRING S* ';'

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRParser. |
a_value | out parameter. The actual parsed value of the charset declararation. Note that for safety check reasons, *a_value must be set to NULL. |
a_charset_sym_location | the parsing location of the charset rule |

### cr_parser_parse_font_face ()

    enum CRStatus
    cr_parser_parse_font_face (CRParser *a_this);

Parses the "@font-face" rule specified in the css1 spec in appendix D.1:

font_face ::= FONT_FACE_SYM S* '{' S* declaration [ ';' S* declaration ]* '}' S*

This function will call SAC handlers whenever it is necessary.

Returns CR_OK upon successfull completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRParser. |

### cr_parser_destroy ()

    void
    cr_parser_destroy (CRParser *a_this);

Destroys the current instance of CRParser.

#### Parameters

a_this | the current instance of CRParser to destroy. |

## Types and Values

### struct CRParser

    struct CRParser {
            CRParserPriv *priv ;
    };

### CRParserPriv

    typedef struct _CRParserPriv CRParserPriv;