(root)/
gettext-0.22.4/
libtextstyle/
lib/
libcroco/
cr-doc-handler.h
       1  /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
       2  
       3  /* libcroco - Library for parsing and applying CSS
       4   * Copyright (C) 2006-2019 Free Software Foundation, Inc.
       5   *
       6   * This file is not part of the GNU gettext program, but is used with
       7   * GNU gettext.
       8   *
       9   * The original copyright notice is as follows:
      10   */
      11  
      12  /*
      13   * This file is part of The Croco Library
      14   *
      15   * Copyright (C) 2003-2004 Dodji Seketeli.  All Rights Reserved.
      16   *
      17   * This program is free software; you can redistribute it and/or
      18   * modify it under the terms of version 2.1 of the GNU Lesser General Public
      19   * License as published by the Free Software Foundation.
      20   *
      21   * This program is distributed in the hope that it will be useful,
      22   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      23   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      24   * GNU General Public License for more details.
      25   *
      26   * You should have received a copy of the GNU Lesser General Public License
      27   * along with this program; if not, write to the Free Software
      28   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
      29   * USA
      30   */
      31  
      32  #ifndef __CR_DOC_HANDLER_H__
      33  #define __CR_DOC_HANDLER_H__
      34  
      35  /**
      36   *@file
      37   *The declaration of the #CRDocumentHandler class.
      38   *This class is actually the parsing events handler.
      39   */
      40  
      41  #include <glib.h>
      42  #include "cr-utils.h"
      43  #include "cr-input.h"
      44  #include "cr-stylesheet.h"
      45  
      46  G_BEGIN_DECLS
      47  
      48  
      49  typedef struct _CRDocHandler CRDocHandler ;
      50  
      51  struct _CRDocHandlerPriv ;
      52  typedef struct _CRDocHandlerPriv CRDocHandlerPriv ;
      53  
      54  
      55  /**
      56   *The SAC document handler.
      57   *An instance of this class is to
      58   *be passed to a parser. Then, during the parsing
      59   *the parser calls the convenient function pointer
      60   *whenever a particular event (a css construction) occurs.
      61   */
      62  struct _CRDocHandler
      63  {
      64  	CRDocHandlerPriv *priv ;
      65  
      66  	/**
      67  	 *This pointer is to be used by the application for
      68  	 *it custom needs. It is there to extend the doc handler.
      69  	 */
      70  	gpointer app_data ;
      71  
      72  	/**
      73  	 *Is called at the beginning of the parsing of the document.
      74  	 *@param a_this a pointer to the current instance of
      75  	 *#CRDocHandler.
      76  	 */
      77  	void (*start_document) (CRDocHandler *a_this) ;
      78  
      79  	/**
      80  	 *Is called to notify the end of the parsing of the document.
      81  	 *@param a_this a pointer to the current instance of
      82  	 *#CRDocHandler.
      83  	 */
      84  	void (*end_document) (CRDocHandler *a_this) ;
      85  
      86  	/**
      87  	 *Is called to notify an at charset rule.
      88  	 *@param a_this the document handler.
      89  	 *@param a_charset the declared charset.
      90  	 */
      91  	void (*charset) (CRDocHandler *a_this, 
      92  			 CRString *a_charset,
      93  			 CRParsingLocation *a_charset_sym_location) ;
      94  
      95  	/**
      96  	 *Is called to notify an import statement in 
      97  	 *the stylesheet.
      98  	 *@param a_this the current instance of #CRDocHandler.
      99  	 *@param a_media_list a doubly linked list of GString objects.
     100  	 *Each GString object contains a string which is the
     101  	 *destination media for style information.
     102  	 *@param a_uri the uri of the imported style sheet.
     103  	 *@param a_uri_default_ns the default namespace of URI
     104  	 *@param a_location the parsing location of the '\@import' 
     105  	 *keyword.
     106  	 *of the imported style sheet.
     107  	 */
     108  	void (*import_style) (CRDocHandler *a_this,
     109  			      GList *a_media_list,
     110  			      CRString *a_uri,
     111  			      CRString *a_uri_default_ns,
     112  			      CRParsingLocation *a_location) ;
     113  
     114  	void (*import_style_result) (CRDocHandler *a_this,
     115  				     GList *a_media_list,
     116  				     CRString *a_uri,
     117  				     CRString *a_uri_default_ns,
     118  				     CRStyleSheet *a_sheet) ;
     119  
     120  	/**
     121  	 *Is called to notify a namespace declaration.
     122  	 *Not used yet.
     123  	 *@param a_this the current instance of #CRDocHandler.
     124  	 *@param a_prefix the prefix of the namespace.
     125  	 *@param a_uri the uri of the namespace.
     126  	 *@param a_location the location of the "@namespace" keyword.
     127  	 */
     128  	void (*namespace_declaration) (CRDocHandler *a_this,
     129  				       CRString *a_prefix,
     130  				       CRString *a_uri,
     131  				       CRParsingLocation *a_location) ;
     132  		
     133  	/**
     134  	 *Is called to notify a comment.
     135  	 *@param a_this a pointer to the current instance
     136  	 *of #CRDocHandler.
     137  	 *@param a_comment the comment.
     138  	 */
     139  	void (*comment) (CRDocHandler *a_this,
     140  			 CRString *a_comment) ;
     141  
     142  	/**
     143  	 *Is called to notify the beginning of a rule
     144  	 *statement.
     145  	 *@param a_this the current instance of #CRDocHandler.
     146  	 *@param a_selector_list the list of selectors that precedes
     147  	 *the rule declarations.
     148  	 */
     149  	void (*start_selector) (CRDocHandler * a_this,
     150  				CRSelector *a_selector_list) ;
     151  
     152  	/**
     153  	 *Is called to notify the end of a rule statement.
     154  	 *@param a_this the current instance of #CRDocHandler.
     155  	 *@param a_selector_list the list of selectors that precedes
     156  	 *the rule declarations. This pointer is the same as
     157  	 *the one passed to start_selector() ;
     158  	 */
     159  	void (*end_selector) (CRDocHandler *a_this,
     160  			      CRSelector *a_selector_list) ;
     161  
     162  
     163  	/**
     164  	 *Is called to notify a declaration.
     165  	 *@param a_this a pointer to the current instance
     166  	 *of #CRDocHandler.
     167  	 *@param a_name the name of the parsed property.
     168  	 *@param a_expression a css expression that represents
     169  	 *the value of the property. A css expression is
     170  	 *actually a linked list of 'terms'. Each term can
     171  	 *be linked to other using operators.
     172  	 *
     173  	 */
     174  	void (*property) (CRDocHandler *a_this,
     175  			  CRString *a_name,
     176  			  CRTerm *a_expression,
     177  			  gboolean a_is_important) ;
     178  	/**
     179  	 *Is called to notify the start of a font face statement.
     180  	 *The parser invokes this method at the beginning of every
     181  	 *font face statement in the style sheet. There will
     182  	 *be a corresponding end_font_face () event for every
     183  	 *start_font_face () event.
     184  	 *
     185  	 *@param a_this a pointer to the current instance of
     186  	 *#CRDocHandler.
     187  	 *@param a_location the parsing location of the "\@font-face"
     188  	 *keyword.
     189  	 */
     190  	void (*start_font_face) (CRDocHandler *a_this,
     191  				 CRParsingLocation *a_location) ;
     192  
     193  	/**
     194  	 *Is called to notify the end of a font face statement.
     195  	 *@param a_this a pointer to the current instance of
     196  	 *#CRDocHandler.
     197  	 */
     198  	void (*end_font_face) (CRDocHandler *a_this) ;
     199  
     200  
     201  	/**
     202  	 *Is called to notify the beginning of a media statement.
     203  	 *The parser will invoke this method at the beginning of
     204  	 *every media statement in the style sheet. There will be
     205  	 *a corresponding end_media() event for every start_media()
     206  	 *event.
     207  	 *@param a_this a pointer to the current instance of 
     208  	 *#CRDocHandler.
     209  	 *@param a_media_list a double linked list of 
     210  	 #CRString * objects.
     211  	 *Each CRString objects is actually a destination media for
     212  	 *the style information.
     213  	 */
     214  	void (*start_media) (CRDocHandler *a_this,
     215  			     GList *a_media_list,
     216  			     CRParsingLocation *a_location) ;
     217  
     218  	/**
     219  	 *Is called to notify the end of a media statement.
     220  	 *@param a_this a pointer to the current instance
     221  	 *of #CRDocHandler.
     222  	 *@param a_media_list a double linked list of GString * objects.
     223  	 *Each GString objects is actually a destination media for
     224  	 *the style information.
     225  	 */
     226  	void (*end_media) (CRDocHandler *a_this,
     227  			   GList *a_media_list) ;
     228  
     229  	/**
     230  	 *Is called to notify the beginning of a page statement.
     231  	 *The parser invokes this function at the beginning of
     232  	 *every page statement in the style sheet. There will be
     233  	 *a corresponding end_page() event for every single 
     234  	 *start_page() event.
     235  	 *@param a_this a pointer to the current instance of
     236  	 *#CRDocHandler.
     237  	 *@param a_name the name of the page (if any, null otherwise).
     238  	 *@param a_pseudo_page the pseudo page (if any, null otherwise).
     239  	 *@param a_location the parsing location of the "\@page" keyword.
     240  	 */
     241  	void (*start_page) (CRDocHandler *a_this,
     242  			    CRString *a_name, 
     243  			    CRString *a_pseudo_page,
     244  			    CRParsingLocation *a_location) ;
     245  
     246  	/**
     247  	 *Is called to notify the end of a page statement.
     248  	 *@param a_this a pointer to the current instance of
     249  	 *#CRDocHandler.
     250  	 *@param a_name the name of the page (if any, null otherwise).
     251  	 *@param a_pseudo_page the pseudo page (if any, null otherwise).
     252  	 */
     253  	void (*end_page) (CRDocHandler *a_this,
     254  			  CRString *a_name,
     255  			  CRString *pseudo_page) ;
     256  		
     257  	/**
     258  	 *Is Called to notify an unknown at-rule not supported
     259  	 *by this parser.
     260  	 */
     261  	void (*ignorable_at_rule) (CRDocHandler *a_this,
     262  				   CRString *a_name) ;
     263  
     264  	/**
     265  	 *Is called to notify a parsing error. After this error
     266  	 *the application must ignore the rule being parsed, if
     267  	 *any. After completion of this callback, 
     268  	 *the parser will then try to resume the parsing,
     269  	 *ignoring the current error.
     270  	 */
     271  	void (*error) (CRDocHandler *a_this) ;
     272  
     273  	/**
     274  	 *Is called to notify an unrecoverable parsing error.
     275  	 *This is the place to put emergency routines that free allocated
     276  	 *resources.
     277  	 */
     278  	void (*unrecoverable_error) (CRDocHandler *a_this) ;
     279  
     280  	gboolean resolve_import ;
     281  	gulong ref_count ;
     282  } ;
     283  
     284  CRDocHandler * cr_doc_handler_new (void) ;
     285  
     286  enum CRStatus cr_doc_handler_set_result (CRDocHandler *a_this, gpointer a_result) ;
     287  
     288  enum CRStatus cr_doc_handler_get_result (CRDocHandler const *a_this, gpointer * a_result) ;
     289  
     290  enum CRStatus cr_doc_handler_set_ctxt (CRDocHandler *a_this, gpointer a_ctxt) ;
     291  
     292  enum CRStatus cr_doc_handler_get_ctxt (CRDocHandler const *a_this, gpointer * a_ctxt) ;
     293  
     294  enum CRStatus cr_doc_handler_set_default_sac_handler (CRDocHandler *a_this) ;
     295  
     296  void cr_doc_handler_associate_a_parser (CRDocHandler *a_this,
     297  					gpointer a_parser) ;
     298  
     299  void cr_doc_handler_ref (CRDocHandler *a_this) ;
     300  
     301  gboolean cr_doc_handler_unref (CRDocHandler *a_this) ;
     302  
     303  void cr_doc_handler_destroy (CRDocHandler *a_this) ;
     304  
     305  G_END_DECLS
     306  
     307  #endif /*__CR_DOC_HANDLER_H__*/