#include "html.h" #include "css_length.h" void litehtml::css_length::fromString( const string& str, const string& predefs, int defValue ) { // TODO: Make support for calc if(str.substr(0, 4) == "calc") { m_is_predefined = true; m_predef = defValue; return; } int predef = value_index(str, predefs, -1); if(predef >= 0) { m_is_predefined = true; m_predef = predef; } else { m_is_predefined = false; string num; string un; bool is_unit = false; for(char chr : str) { if(!is_unit) { if(t_isdigit(chr) || chr == '.' || chr == '+' || chr == '-') { num += chr; } else { is_unit = true; } } if(is_unit) { un += chr; } } if(!num.empty()) { m_value = t_strtof(num); m_units = (css_units) value_index(un, css_units_strings, css_units_none); } else { // not a number so it is predefined m_is_predefined = true; m_predef = defValue; } } } litehtml::css_length litehtml::css_length::from_string(const string& str, const string& predefs, int defValue) { css_length len; len.fromString(str, predefs, defValue); return len; } litehtml::string litehtml::css_length::to_string() const { if(m_is_predefined) { return "def(" + std::to_string(m_predef) + ")"; } return std::to_string(m_value) + "{" + index_value(m_units, css_units_strings) + "}"; } litehtml::css_length litehtml::css_length::predef_value(int val) { css_length len; len.predef(val); return len; }