diff -r adc06e9e8470 -r 7f0bbee5c8b0 bookloupe/counters.h --- a/bookloupe/counters.h Mon Sep 23 21:18:27 2013 +0100 +++ b/bookloupe/counters.h Wed Oct 30 17:11:11 2013 +0000 @@ -3,18 +3,42 @@ #include +#define COUNTERS_ERROR counters_error_quark() + +typedef enum +{ + COUNTERS_ERROR_FAILED, /* Generic failure */ +} CountersError; + /* Special counters live in the private use area */ enum { COUNTER_ILLUSTRATION=0xE000, NO_SPECIAL_COUNTERS }; +typedef enum { + OPENING_QUOTE, + CLOSING_QUOTE, + NEUTRAL_QUOTE, + INVALID_QUOTE +} QuoteClass; + +#define QUOTE_CLASS(c) \ + (((c)==CHAR_RD_QUOTE || (c)==CHAR_RS_QUOTE)?CLOSING_QUOTE: \ + ((c)==CHAR_LD_QUOTE || (c)==CHAR_LS_QUOTE || (c)==CHAR_OPEN_SQUOTE)?\ + OPENING_QUOTE:((c)==CHAR_DQUOTE || (c)==CHAR_SQUOTE)?NEUTRAL_QUOTE:\ + INVALID_QUOTE) + struct counters { GTree *matching; - long quot; int c_unders; + GSList *open_quotes; }; +GQuark counters_error_quark(void); +gboolean innermost_quote_matches(struct counters *counters,gunichar ch); +gboolean count_quote(struct counters *counters,gunichar ch,QuoteClass klass, + GError **err); void increment_matching(struct counters *counters,gunichar ch,gboolean open); int matching_count(const struct counters *counters,gunichar ch,gboolean open); int matching_difference(const struct counters *counters,gunichar ch);