bookloupe/counters.h
author ali <ali@juiblex.co.uk>
Tue Oct 15 09:16:04 2013 +0100 (2013-10-15)
changeset 174 ad92d11d59b8
parent 103 adc06e9e8470
permissions -rw-r--r--
Fix bug #27: Don't treat [1] as a standalone 1
ali@94
     1
#ifndef COUNTERS_H
ali@94
     2
#define COUNTERS_H
ali@94
     3
ali@94
     4
#include <glib.h>
ali@94
     5
ali@123
     6
#define COUNTERS_ERROR counters_error_quark()
ali@123
     7
ali@123
     8
typedef enum
ali@123
     9
{
ali@123
    10
    COUNTERS_ERROR_FAILED,                 /* Generic failure */
ali@123
    11
} CountersError;
ali@123
    12
ali@103
    13
/* Special counters live in the private use area */
ali@103
    14
enum {
ali@103
    15
    COUNTER_ILLUSTRATION=0xE000,
ali@103
    16
    NO_SPECIAL_COUNTERS
ali@103
    17
};
ali@103
    18
ali@123
    19
typedef enum {
ali@123
    20
    OPENING_QUOTE,
ali@123
    21
    CLOSING_QUOTE,
ali@123
    22
    NEUTRAL_QUOTE,
ali@123
    23
    INVALID_QUOTE
ali@123
    24
} QuoteClass;
ali@123
    25
ali@123
    26
#define QUOTE_CLASS(c) \
ali@123
    27
    (((c)==CHAR_RD_QUOTE || (c)==CHAR_RS_QUOTE)?CLOSING_QUOTE: \
ali@123
    28
     ((c)==CHAR_LD_QUOTE || (c)==CHAR_LS_QUOTE || (c)==CHAR_OPEN_SQUOTE)?\
ali@123
    29
     OPENING_QUOTE:((c)==CHAR_DQUOTE || (c)==CHAR_SQUOTE)?NEUTRAL_QUOTE:\
ali@123
    30
     INVALID_QUOTE)
ali@123
    31
ali@94
    32
struct counters {
ali@94
    33
    GTree *matching;
ali@94
    34
    int c_unders;
ali@123
    35
    GSList *open_quotes;
ali@94
    36
};
ali@94
    37
ali@123
    38
GQuark counters_error_quark(void);
ali@123
    39
gboolean innermost_quote_matches(struct counters *counters,gunichar ch);
ali@123
    40
gboolean count_quote(struct counters *counters,gunichar ch,QuoteClass klass,
ali@123
    41
  GError **err);
ali@94
    42
void increment_matching(struct counters *counters,gunichar ch,gboolean open);
ali@94
    43
int matching_count(const struct counters *counters,gunichar ch,gboolean open);
ali@94
    44
int matching_difference(const struct counters *counters,gunichar ch);
ali@103
    45
void counters_reset(struct counters *counters);
ali@94
    46
void counters_destroy(struct counters *counters);
ali@94
    47
ali@94
    48
#endif /* COUNTERS_H */