This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
utf8.h: Add macro TWO_BYTE_UTF8_TO_UNI()
[perl5.git] / utf8.h
diff --git a/utf8.h b/utf8.h
index 84ee9db..ef5fecc 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -163,6 +163,15 @@ Perl's extended UTF-8 means we can have start bytes up to FF.
 
 #define UTF8_ACCUMULATE(old, new)      (((old) << UTF_ACCUMULATION_SHIFT) | (((U8)new) & UTF_CONTINUATION_MASK))
 
+/* Convert a two (not one) byte utf8 character to a unicode code point value.
+ * Needs just one iteration of accumulate.  Should not be used unless it is
+ * known that the two bytes are legal: 1) two-byte start, and 2) continuation.
+ * Note that the result can be larger than 255 if the input character is not
+ * downgradable */
+#define TWO_BYTE_UTF8_TO_UNI(HI, LO) \
+                   UTF8_ACCUMULATE((NATIVE_TO_UTF(HI) & UTF_START_MASK(2)), \
+                                    NATIVE_TO_UTF(LO))
+
 #define UTF8SKIP(s) PL_utf8skip[*(const U8*)(s)]
 
 #define UTF8_IS_INVARIANT(c)           UNI_IS_INVARIANT(NATIVE_TO_UTF(c))