summaryrefslogtreecommitdiff
path: root/src/rufl_character_set_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rufl_character_set_test.c')
-rw-r--r--src/rufl_character_set_test.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/rufl_character_set_test.c b/src/rufl_character_set_test.c
new file mode 100644
index 0000000..45fbcaf
--- /dev/null
+++ b/src/rufl_character_set_test.c
@@ -0,0 +1,37 @@
+/*
+ * This file is part of RUfl
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license
+ * Copyright 2005 James Bursa <james@semichrome.net>
+ */
+
+#include "rufl_internal.h"
+
+
+/**
+ * Test if a character set contains a character.
+ *
+ * \param charset character set
+ * \param c character code
+ * \return true if present, false if absent
+ */
+
+bool rufl_character_set_test(struct rufl_character_set *charset,
+ unsigned int c)
+{
+ unsigned int block = c >> 8;
+ unsigned int byte = (c >> 3) & 31;
+ unsigned int bit = c & 7;
+
+ if (256 <= block)
+ return false;
+
+ if (charset->index[block] == BLOCK_EMPTY)
+ return false;
+ else if (charset->index[block] == BLOCK_FULL)
+ return true;
+ else {
+ unsigned char z = charset->block[charset->index[block]][byte];
+ return z & (1 << bit);
+ }
+}