#ifndef COUNTERS_H #define COUNTERS_H #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; 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); void counters_reset(struct counters *counters); void counters_destroy(struct counters *counters); #endif /* COUNTERS_H */