nsCSSKeyword nsCSSKeywords::LookupKeyword(const nsAString& aKeyword) { NS_ASSERTION(gKeywordTable, "no lookup table, needs addref"); if (gKeywordTable) { return nsCSSKeyword(gKeywordTable->Lookup(aKeyword)); } return eCSSKeyword_UNKNOWN; }
bool TestKeywords() { nsCSSKeywords::AddRefTable(); bool success = true; nsCSSKeyword id; nsCSSKeyword index; extern const char* const kCSSRawKeywords[]; // First make sure we can find all of the tags that are supposed to // be in the table. Futz with the case to make sure any case will // work const char*const* et = &kCSSRawKeywords[0]; const char*const* end = &kCSSRawKeywords[eCSSKeyword_COUNT - 1]; index = eCSSKeyword_UNKNOWN; while (et < end) { char tagName[512]; char* underscore = &(tagName[0]); PL_strcpy(tagName, *et); while (*underscore) { if (*underscore == '_') { *underscore = '-'; } underscore++; } index = nsCSSKeyword(PRInt32(index) + 1); id = nsCSSKeywords::LookupKeyword(nsCString(tagName)); if (id <= eCSSKeyword_UNKNOWN) { printf("bug: can't find '%s'\n", tagName); success = false; } if (id != index) { printf("bug: name='%s' id=%d index=%d\n", tagName, id, index); success = false; } // fiddle with the case to make sure we can still find it if (('a' <= tagName[0]) && (tagName[0] <= 'z')) { tagName[0] = tagName[0] - 32; } id = nsCSSKeywords::LookupKeyword(nsCString(tagName)); if (id <= eCSSKeyword_UNKNOWN) { printf("bug: can't find '%s'\n", tagName); success = false; } if (id != index) { printf("bug: name='%s' id=%d index=%d\n", tagName, id, index); success = false; } et++; } // Now make sure we don't find some garbage for (int i = 0; i < (int) (sizeof(kJunkNames) / sizeof(const char*)); i++) { const char* const tag = kJunkNames[i]; id = nsCSSKeywords::LookupKeyword(nsCAutoString(tag)); if (eCSSKeyword_UNKNOWN < id) { printf("bug: found '%s'\n", tag ? tag : "(null)"); success = false; } } nsCSSKeywords::ReleaseTable(); return success; }