79 #define PRIVATE(object) (object)->priv 84 #define CR_INPUT_MEM_CHUNK_SIZE 1024 * 4 86 static CRInput *cr_input_new_real (
void);
89 cr_input_new_real (
void)
93 result = g_try_malloc (
sizeof (
CRInput));
98 memset (result, 0,
sizeof (
CRInput));
107 PRIVATE (result)->free_in_buf = TRUE;
139 g_return_val_if_fail (a_buf, NULL);
141 result = cr_input_new_real ();
142 g_return_val_if_fail (result, NULL);
152 (enc_handler, a_buf, &len,
154 &
PRIVATE (result)->in_buf_size);
157 PRIVATE (result)->free_in_buf = TRUE;
158 if (a_free_buf == TRUE && a_buf) {
164 PRIVATE (result)->in_buf = (guchar *) a_buf;
165 PRIVATE (result)->in_buf_size = a_len;
166 PRIVATE (result)->nb_bytes = a_len;
167 PRIVATE (result)->free_in_buf = a_free_buf;
200 FILE *file_ptr = NULL;
205 gboolean loop = TRUE;
208 g_return_val_if_fail (a_file_uri, NULL);
210 file_ptr = fopen (a_file_uri,
"r");
212 if (file_ptr == NULL) {
217 g_warning (
"Could not open file %s\n", a_file_uri);
224 nb_read = fread (tmp_buf, 1 ,
230 if (feof (file_ptr)) {
241 if (status ==
CR_OK) {
244 memcpy (buf + len, tmp_buf, nb_read);
250 if (status ==
CR_OK) {
290 g_free (
PRIVATE (a_this)->in_buf);
291 PRIVATE (a_this)->in_buf = NULL;
311 g_return_if_fail (a_this &&
PRIVATE (a_this));
329 g_return_val_if_fail (a_this &&
PRIVATE (a_this), FALSE);
331 if (
PRIVATE (a_this)->ref_count) {
335 if (
PRIVATE (a_this)->ref_count == 0) {
359 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
362 *a_end_of_input = (
PRIVATE (a_this)->next_byte_index
363 >=
PRIVATE (a_this)->in_buf_size) ? TRUE : FALSE;
378 g_return_val_if_fail (a_this &&
PRIVATE (a_this), -1);
379 g_return_val_if_fail (
PRIVATE (a_this)->nb_bytes
380 <=
PRIVATE (a_this)->in_buf_size, -1);
381 g_return_val_if_fail (
PRIVATE (a_this)->next_byte_index
382 <=
PRIVATE (a_this)->nb_bytes, -1);
384 if (
PRIVATE (a_this)->end_of_input)
387 return PRIVATE (a_this)->nb_bytes -
PRIVATE (a_this)->next_byte_index;
407 gulong nb_bytes_left = 0;
409 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
412 g_return_val_if_fail (
PRIVATE (a_this)->next_byte_index <=
415 if (
PRIVATE (a_this)->end_of_input == TRUE)
420 if (nb_bytes_left < 1) {
424 *a_byte =
PRIVATE (a_this)->in_buf[
PRIVATE (a_this)->next_byte_index];
426 if (
PRIVATE (a_this)->nb_bytes -
427 PRIVATE (a_this)->next_byte_index < 2) {
428 PRIVATE (a_this)->end_of_input = TRUE;
430 PRIVATE (a_this)->next_byte_index++;
454 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_char,
457 if (
PRIVATE (a_this)->end_of_input == TRUE)
462 if (nb_bytes_left < 1) {
469 PRIVATE (a_this)->next_byte_index,
470 nb_bytes_left, a_char, &consumed);
472 if (status ==
CR_OK) {
474 PRIVATE (a_this)->next_byte_index += consumed;
477 if (
PRIVATE (a_this)->end_of_line == TRUE) {
480 PRIVATE (a_this)->end_of_line = FALSE;
481 }
else if (*a_char !=
'\n') {
485 if (*a_char ==
'\n') {
486 PRIVATE (a_this)->end_of_line = TRUE;
507 PRIVATE (a_this)->line = a_line_num;
524 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
527 *a_line_num =
PRIVATE (a_this)->line;
563 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_col,
566 *a_col =
PRIVATE (a_this)->col;
585 PRIVATE (a_this)->line += a_increment;
604 PRIVATE (a_this)->col += a_increment;
633 if (c == a_char || a_char == 0) {
666 gulong nb_consumed = 0;
668 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_nb_char,
671 g_return_val_if_fail (a_char != 0 || a_nb_char != NULL,
674 for (nb_consumed = 0; ((status ==
CR_OK)
676 && nb_consumed < *a_nb_char));
681 *a_nb_char = nb_consumed;
683 if ((nb_consumed > 0)
707 guint32 cur_char = 0,
710 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_nb_chars,
713 for (nb_consumed = 0;
714 ((*a_nb_chars > 0) && (nb_consumed < *a_nb_chars));
732 *a_nb_chars = (gulong) nb_consumed;
761 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
764 if (
PRIVATE (a_this)->next_byte_index >=
765 PRIVATE (a_this)->in_buf_size) {
771 if (nb_bytes_left < 1) {
777 PRIVATE (a_this)->next_byte_index,
778 nb_bytes_left, a_char, &consumed);
805 gulong a_offset, guchar * a_byte)
807 gulong abs_offset = 0;
809 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
815 abs_offset =
PRIVATE (a_this)->next_byte_index - 1 + a_offset;
819 abs_offset = a_offset;
823 abs_offset =
PRIVATE (a_this)->in_buf_size - 1 - a_offset;
830 if (abs_offset <
PRIVATE (a_this)->in_buf_size) {
832 *a_byte =
PRIVATE (a_this)->in_buf[abs_offset];
861 g_return_val_if_fail (a_this &&
PRIVATE (a_this), 0);
889 g_return_val_if_fail (a_this &&
PRIVATE (a_this), NULL);
891 if (a_offset >=
PRIVATE (a_this)->nb_bytes) {
895 return &
PRIVATE (a_this)->in_buf[a_offset];
910 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_offset,
913 if (!
PRIVATE (a_this)->next_byte_index) {
918 (a_this,
PRIVATE (a_this)->next_byte_index - 1);
943 glong abs_offset = 0;
950 abs_offset =
PRIVATE (a_this)->next_byte_index - 1 + a_pos;
958 abs_offset =
PRIVATE (a_this)->in_buf_size - 1 - a_pos;
966 && (gulong) abs_offset <
PRIVATE (a_this)->nb_bytes) {
969 PRIVATE (a_this)->next_byte_index = abs_offset + 1;
997 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_pos,
1026 g_return_val_if_fail (a_this
1033 if (
PRIVATE (a_this)->next_byte_index) {
1057 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
1060 *a_index =
PRIVATE (a_this)->next_byte_index;
1081 PRIVATE (a_this)->next_byte_index = a_index;
1100 PRIVATE (a_this)->end_of_input = a_eof;
1118 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
1121 *a_eof =
PRIVATE (a_this)->end_of_input;
1141 PRIVATE (a_this)->end_of_line = a_eol;
1160 g_return_val_if_fail (a_this &&
PRIVATE (a_this)
1163 *a_eol =
PRIVATE (a_this)->end_of_line;
1181 g_return_val_if_fail (a_this &&
PRIVATE (a_this) && a_pos,
typedefG_BEGIN_DECLS struct _CREncHandler CREncHandler
CREncHandler * cr_enc_handler_get_instance(enum CREncoding a_enc)
cr_enc_handler_get_instance: @a_enc: the encoding of the Handler.
CREncoding
Encoding values.
CRStatus
The status type returned by the methods of the croco library.
CRSeekPos
Values used by cr_input_seek_position() ;.
enum CRStatus cr_utils_read_char_from_utf8_buf(const guchar *a_in, gulong a_in_len, guint32 *a_out, gulong *a_consumed)
Reads a character from an utf8 buffer.
The declaration of the CREncHandler class.
enum CRStatus cr_enc_handler_convert_input(CREncHandler *a_this, const guchar *a_in, gulong *a_in_len, guchar **a_out, gulong *a_out_len)
cr_enc_handler_convert_input: @a_this: the current instance of CREncHandler.
#define cr_utils_trace_debug(a_msg)
Trace a debug message.
gboolean cr_utils_is_white_space(guint32 a_char)
Returns TRUE if a_char is a white space as defined in the css spec in chap 4.1.1.
#define cr_utils_trace_info(a_msg)
Traces an info message.