return false;
}
+/* If SS begins with TARGET, except possibly for case differences, removes it
+ and returns true. Otherwise, returns false without changing SS. */
+bool
+ss_match_string_case (struct substring *ss, const struct substring target)
+{
+ size_t length = ss_length (target);
+ if (ss_equals_case (ss_head (*ss, length), target))
+ {
+ ss_advance (ss, length);
+ return true;
+ }
+ else
+ return false;
+}
+
/* Removes the first byte from SS and returns it.
If SS is empty, returns EOF without modifying SS. */
int
&& !memcmp (ss.string, prefix.string, prefix.length));
}
+/* Returns true if SS starts with PREFIX in any case, false otherwise. */
+bool
+ss_starts_with_case (struct substring ss, struct substring prefix)
+{
+ return (ss.length >= prefix.length
+ && !memcasecmp (ss.string, prefix.string, prefix.length));
+}
+
/* Returns true if SS ends with SUFFIX, false otherwise. */
bool
ss_ends_with (struct substring ss, struct substring suffix)
suffix.length));
}
+/* Returns true if SS ends with SUFFIX in any case, false otherwise. */
+bool
+ss_ends_with_case (struct substring ss, struct substring suffix)
+{
+ return (ss.length >= suffix.length
+ && !memcasecmp (&ss.string[ss.length - suffix.length], suffix.string,
+ suffix.length));
+}
+
/* Returns the number of contiguous bytes at the beginning
of SS that are in SKIP_SET. */
size_t
bool ss_match_byte (struct substring *, char);
int ss_match_byte_in (struct substring *, struct substring);
bool ss_match_string (struct substring *, const struct substring);
+bool ss_match_string_case (struct substring *, const struct substring);
int ss_get_byte (struct substring *);
size_t ss_get_bytes (struct substring *, size_t n, struct substring *);
bool ss_get_until (struct substring *, char delimiter, struct substring *);
int ss_first (struct substring);
int ss_last (struct substring);
bool ss_starts_with (struct substring, struct substring prefix);
+bool ss_starts_with_case (struct substring, struct substring prefix);
bool ss_ends_with (struct substring, struct substring suffix);
+bool ss_ends_with_case (struct substring, struct substring suffix);
size_t ss_span (struct substring, struct substring skip_set);
size_t ss_cspan (struct substring, struct substring stop_set);
size_t ss_find_byte (struct substring, char);