buffer->guess_segment_properties ();
}
-template <bool validate, typename T>
+template <typename utf_t>
static inline void
hb_buffer_add_utf (hb_buffer_t *buffer,
- const T *text,
+ const typename utf_t::codepoint_t *text,
int text_length,
unsigned int item_offset,
int item_length)
{
- typedef hb_utf_t<T, validate> utf_t;
+ typedef typename utf_t::codepoint_t T;
const hb_codepoint_t replacement = buffer->replacement;
assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<true> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf8_t> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
}
/**
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf16_t> (buffer, text, text_length, item_offset, item_length);
}
/**
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<true> (buffer, text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf32_t<> > (buffer, text, text_length, item_offset, item_length);
+}
+
+/**
+ * hb_buffer_add_latin1:
+ * @buffer: a buffer.
+ * @text: (array length=text_length) (element-type uint8_t):
+ * @text_length:
+ * @item_offset:
+ * @item_length:
+ *
+ *
+ *
+ * Since: 1.0
+ **/
+void
+hb_buffer_add_latin1 (hb_buffer_t *buffer,
+ const uint8_t *text,
+ int text_length,
+ unsigned int item_offset,
+ int item_length)
+{
+ hb_buffer_add_utf<hb_latin1_t> (buffer, text, text_length, item_offset, item_length);
}
/**
unsigned int item_offset,
int item_length)
{
- hb_buffer_add_utf<false> (buffer, text, text_length, item_offset, item_length);
+ hb_buffer_add_utf<hb_utf32_t<false> > (buffer, text, text_length, item_offset, item_length);
}
#include "hb-private.hh"
-template <typename T, bool validate=true> struct hb_utf_t;
-
-/* UTF-8 */
-
-template <>
-struct hb_utf_t<uint8_t, true>
+struct hb_utf8_t
{
+ typedef uint8_t codepoint_t;
+
static inline const uint8_t *
next (const uint8_t *text,
const uint8_t *end,
};
-/* UTF-16 */
-
-template <>
-struct hb_utf_t<uint16_t, true>
+struct hb_utf16_t
{
+ typedef uint16_t codepoint_t;
+
static inline const uint16_t *
next (const uint16_t *text,
const uint16_t *end,
};
-/* UTF-32 */
-
-template <bool validate>
-struct hb_utf_t<uint32_t, validate>
+template <bool validate=true>
+struct hb_utf32_t
{
+ typedef uint32_t codepoint_t;
+
static inline const uint32_t *
next (const uint32_t *text,
const uint32_t *end HB_UNUSED,
};
+struct hb_latin1_t
+{
+ typedef uint8_t codepoint_t;
+
+ static inline const uint8_t *
+ next (const uint8_t *text,
+ const uint8_t *end HB_UNUSED,
+ hb_codepoint_t *unicode,
+ hb_codepoint_t replacement HB_UNUSED)
+ {
+ *unicode = *text++;
+ return text;
+ }
+
+ static inline const uint8_t *
+ prev (const uint8_t *text,
+ const uint8_t *start HB_UNUSED,
+ hb_codepoint_t *unicode,
+ hb_codepoint_t replacement)
+ {
+ *unicode = *--text;
+ return text;
+ }
+
+ static inline unsigned int
+ strlen (const uint8_t *text)
+ {
+ unsigned int l = 0;
+ while (*text++) l++;
+ return l;
+ }
+};
+
#endif /* HB_UTF_PRIVATE_HH */