summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLucas Neves <lcneves@gmail.com>2017-11-13 21:19:03 +0000
committerLucas Neves <lcneves@gmail.com>2017-11-13 21:19:03 +0000
commitdfbf50683125344885c26d5d7407356d97f54651 (patch)
tree031e2d8b8f13cc7ff06a5f3ba94d8c1f21f6d38f /src
parent3f00f3b7c6f2492600feb7bce70e1ae6ca8f4475 (diff)
downloadlibcss-dfbf50683125344885c26d5d7407356d97f54651.tar.gz
libcss-dfbf50683125344885c26d5d7407356d97f54651.tar.bz2
Add support for new length units.
Diffstat (limited to 'src')
-rw-r--r--src/bytecode/bytecode.h13
-rw-r--r--src/parse/properties/utils.c26
-rw-r--r--src/select/properties/helpers.c13
3 files changed, 52 insertions, 0 deletions
diff --git a/src/bytecode/bytecode.h b/src/bytecode/bytecode.h
index 656d7a5..422f141 100644
--- a/src/bytecode/bytecode.h
+++ b/src/bytecode/bytecode.h
@@ -32,6 +32,19 @@ typedef enum unit {
UNIT_MM = 5,
UNIT_PT = 6,
UNIT_PC = 7,
+ UNIT_CAP = 8,
+ UNIT_CH = 9,
+ UNIT_IC = 10,
+ UNIT_REM = 11,
+ UNIT_LH = 12,
+ UNIT_RLH = 13,
+ UNIT_VH = 14,
+ UNIT_VW = 15,
+ UNIT_VI = 16,
+ UNIT_VB = 17,
+ UNIT_VMIN = 18,
+ UNIT_VMAX = 19,
+ UNIT_Q = 20,
UNIT_PCT = (1 << 8),
diff --git a/src/parse/properties/utils.c b/src/parse/properties/utils.c
index 47b06e3..76b406b 100644
--- a/src/parse/properties/utils.c
+++ b/src/parse/properties/utils.c
@@ -1007,6 +1007,10 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit)
if (len == 4) {
if (strncasecmp(ptr, "grad", 4) == 0)
*unit = UNIT_GRAD;
+ else if (strncasecmp(ptr, "vmin", 4) == 0)
+ *unit = UNIT_VMIN;
+ else if (strncasecmp(ptr, "vmax", 4) == 0)
+ *unit = UNIT_VMAX;
else
return CSS_INVALID;
} else if (len == 3) {
@@ -1016,6 +1020,12 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit)
*unit = UNIT_DEG;
else if (strncasecmp(ptr, "rad", 3) == 0)
*unit = UNIT_RAD;
+ else if (strncasecmp(ptr, "cap", 3) == 0)
+ *unit = UNIT_CAP;
+ else if (strncasecmp(ptr, "rem", 3) == 0)
+ *unit = UNIT_REM;
+ else if (strncasecmp(ptr, "rlh", 3) == 0)
+ *unit = UNIT_RLH;
else
return CSS_INVALID;
} else if (len == 2) {
@@ -1039,11 +1049,27 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit)
*unit = UNIT_PT;
else if (strncasecmp(ptr, "pc", 2) == 0)
*unit = UNIT_PC;
+ else if (strncasecmp(ptr, "ch", 2) == 0)
+ *unit = UNIT_CH;
+ else if (strncasecmp(ptr, "ic", 2) == 0)
+ *unit = UNIT_IC;
+ else if (strncasecmp(ptr, "lh", 2) == 0)
+ *unit = UNIT_LH;
+ else if (strncasecmp(ptr, "vh", 2) == 0)
+ *unit = UNIT_VH;
+ else if (strncasecmp(ptr, "vw", 2) == 0)
+ *unit = UNIT_VW;
+ else if (strncasecmp(ptr, "vi", 2) == 0)
+ *unit = UNIT_VI;
+ else if (strncasecmp(ptr, "vb", 2) == 0)
+ *unit = UNIT_VB;
else
return CSS_INVALID;
} else if (len == 1) {
if (strncasecmp(ptr, "s", 1) == 0)
*unit = UNIT_S;
+ else if (strncasecmp(ptr, "q", 1) == 0)
+ *unit = UNIT_Q;
else
return CSS_INVALID;
} else
diff --git a/src/select/properties/helpers.c b/src/select/properties/helpers.c
index 36c3cba..5893919 100644
--- a/src/select/properties/helpers.c
+++ b/src/select/properties/helpers.c
@@ -29,6 +29,19 @@ css_unit css__to_css_unit(uint32_t u)
case UNIT_MM: return CSS_UNIT_MM;
case UNIT_PT: return CSS_UNIT_PT;
case UNIT_PC: return CSS_UNIT_PC;
+ case UNIT_CAP: return CSS_UNIT_CAP;
+ case UNIT_CH: return CSS_UNIT_CH;
+ case UNIT_IC: return CSS_UNIT_IC;
+ case UNIT_REM: return CSS_UNIT_REM;
+ case UNIT_LH: return CSS_UNIT_LH;
+ case UNIT_RLH: return CSS_UNIT_RLH;
+ case UNIT_VH: return CSS_UNIT_VH;
+ case UNIT_VW: return CSS_UNIT_VW;
+ case UNIT_VI: return CSS_UNIT_VI;
+ case UNIT_VB: return CSS_UNIT_VB;
+ case UNIT_VMIN: return CSS_UNIT_VMIN;
+ case UNIT_VMAX: return CSS_UNIT_VMAX;
+ case UNIT_Q: return CSS_UNIT_Q;
case UNIT_PCT: return CSS_UNIT_PCT;
case UNIT_DEG: return CSS_UNIT_DEG;
case UNIT_GRAD: return CSS_UNIT_GRAD;