#include "html.h" #include "string_id.h" #include #ifndef LITEHTML_NO_THREADS #include #include static mir_cs mutex; #define lock_guard mir_cslock lock(mutex) #else #define lock_guard #endif namespace litehtml { static std::map map; static std::vector array; static int init() { string_vector names; split_string(initial_string_ids, names, ","); for (auto& name : names) { trim(name); assert(name[0] == '_' && name.back() == '_'); name = name.substr(1, name.size() - 2); // _border_color_ -> border_color std::replace(name.begin(), name.end(), '_', '-'); // border_color -> border-color _id(name); // this will create association _border_color_ <-> "border-color" } return 0; } static int dummy = init(); const string_id empty_id = _id(""); const string_id star_id = _id("*"); string_id _id(const string& str) { lock_guard; auto it = map.find(str); if (it != map.end()) return it->second; // else: str not found, add it to the array and the map array.push_back(str); return map[str] = (string_id)(array.size() - 1); } const string& _s(string_id id) { lock_guard; return array[id]; } } // namespace litehtml