diff options
author | senorblanco@chromium.org <senorblanco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-26 20:03:03 +0000 |
---|---|---|
committer | senorblanco@chromium.org <senorblanco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-26 20:03:03 +0000 |
commit | a4fc8d30896e63e7074ac06dbd7b13b00732f3c0 (patch) | |
tree | dafaca3fb8892930dce03ee8a6a7d266b46be18f /skia/xml | |
parent | 6131db47e71532f62aae3badcd34a82a64cb9f2a (diff) | |
download | chromium_src-a4fc8d30896e63e7074ac06dbd7b13b00732f3c0.zip chromium_src-a4fc8d30896e63e7074ac06dbd7b13b00732f3c0.tar.gz chromium_src-a4fc8d30896e63e7074ac06dbd7b13b00732f3c0.tar.bz2 |
Remove the remainder of the skia source code from the Chromium repo. It now lives over in third_party/skia (I only removed the headers in the first CL, since it was too unwieldy with all these deletes).
BUG=none
TEST=If it builds, you're happy.
R=dglazkov
Review URL: http://codereview.chromium.org/113827
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16893 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/xml')
-rw-r--r-- | skia/xml/SkBML_Verbs.h | 33 | ||||
-rw-r--r-- | skia/xml/SkBML_XMLParser.cpp | 192 | ||||
-rw-r--r-- | skia/xml/SkDOM.cpp | 512 | ||||
-rw-r--r-- | skia/xml/SkJS.cpp | 237 | ||||
-rw-r--r-- | skia/xml/SkJSDisplayable.cpp | 472 | ||||
-rw-r--r-- | skia/xml/SkParse.cpp | 336 | ||||
-rw-r--r-- | skia/xml/SkParseColor.cpp | 546 | ||||
-rw-r--r-- | skia/xml/SkXMLParser.cpp | 95 | ||||
-rw-r--r-- | skia/xml/SkXMLPullParser.cpp | 132 | ||||
-rw-r--r-- | skia/xml/SkXMLWriter.cpp | 342 |
10 files changed, 0 insertions, 2897 deletions
diff --git a/skia/xml/SkBML_Verbs.h b/skia/xml/SkBML_Verbs.h deleted file mode 100644 index 86bfede..0000000 --- a/skia/xml/SkBML_Verbs.h +++ /dev/null @@ -1,33 +0,0 @@ -/* libs/graphics/xml/SkBML_Verbs.h -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#ifndef SkBML_Verbs_DEFINED -#define SkBML_Verbs_DEFINED - -enum Verbs { - kStartElem_Value_Verb, - kStartElem_Index_Verb, - kEndElem_Verb, - kAttr_Value_Value_Verb, - kAttr_Value_Index_Verb, - kAttr_Index_Value_Verb, - kAttr_Index_Index_Verb, - - kVerbCount -}; - -#endif // SkBML_Verbs_DEFINED diff --git a/skia/xml/SkBML_XMLParser.cpp b/skia/xml/SkBML_XMLParser.cpp deleted file mode 100644 index 53b7f61..0000000 --- a/skia/xml/SkBML_XMLParser.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* libs/graphics/xml/SkBML_XMLParser.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include "SkBML_XMLParser.h" -#include "SkBML_Verbs.h" -#include "SkStream.h" -#include "SkXMLWriter.h" - -static uint8_t rbyte(SkStream& s) -{ - uint8_t b; - size_t size = s.read(&b, 1); - SkASSERT(size == 1); - return b; -} - -static int rdata(SkStream& s, int data) -{ - SkASSERT((data & ~31) == 0); - if (data == 31) - { - data = rbyte(s); - if (data == 0xFF) - { - data = rbyte(s); - data = (data << 8) | rbyte(s); - } - } - return data; -} - -static void set(char* array[256], int index, SkStream& s, int data) -{ - SkASSERT((unsigned)index <= 255); - - size_t size = rdata(s, data); - - if (array[index] == NULL) - array[index] = (char*)sk_malloc_throw(size + 1); - else - { - if (strlen(array[index]) < size) - array[index] = (char*)sk_realloc_throw(array[index], size + 1); - } - - s.read(array[index], size); - array[index][size] = 0; -} - -static void freeAll(char* array[256]) -{ - for (int i = 0; i < 256; i++) - sk_free(array[i]); -} - -struct BMLW { - char* fElems[256]; - char* fNames[256]; - char* fValues[256]; - - // important that these are uint8_t, so we get automatic wrap-around - uint8_t fNextElem, fNextName, fNextValue; - - BMLW() - { - memset(fElems, 0, sizeof(fElems)); - memset(fNames, 0, sizeof(fNames)); - memset(fValues, 0, sizeof(fValues)); - - fNextElem = fNextName = fNextValue = 0; - } - ~BMLW() - { - freeAll(fElems); - freeAll(fNames); - freeAll(fValues); - } -}; - -static void rattr(unsigned verb, SkStream& s, BMLW& rec, SkXMLWriter& writer) -{ - int data = verb & 31; - verb >>= 5; - - int nameIndex, valueIndex; - - switch (verb) { - case kAttr_Value_Value_Verb: - nameIndex = rec.fNextName; // record before the ++ - set(rec.fNames, rec.fNextName++, s, data); - valueIndex = rec.fNextValue; // record before the ++ - set(rec.fValues, rec.fNextValue++, s, 31); - break; - case kAttr_Value_Index_Verb: - nameIndex = rec.fNextName; // record before the ++ - set(rec.fNames, rec.fNextName++, s, data); - valueIndex = rbyte(s); - break; - case kAttr_Index_Value_Verb: - nameIndex = rdata(s, data); - valueIndex = rec.fNextValue; // record before the ++ - set(rec.fValues, rec.fNextValue++, s, 31); - break; - case kAttr_Index_Index_Verb: - nameIndex = rdata(s, data); - valueIndex = rbyte(s); - break; - default: - SkASSERT(!"bad verb"); - return; - } - writer.addAttribute(rec.fNames[nameIndex], rec.fValues[valueIndex]); -} - -static void relem(unsigned verb, SkStream& s, BMLW& rec, SkXMLWriter& writer) -{ - int data = verb & 31; - verb >>= 5; - - int elemIndex; - - if (verb == kStartElem_Value_Verb) - { - elemIndex = rec.fNextElem; // record before the ++ - set(rec.fElems, rec.fNextElem++, s, data); - } - else - { - SkASSERT(verb == kStartElem_Index_Verb); - elemIndex = rdata(s, data); - } - - writer.startElement(rec.fElems[elemIndex]); - - for (;;) - { - verb = rbyte(s); - switch (verb >> 5) { - case kAttr_Value_Value_Verb: - case kAttr_Value_Index_Verb: - case kAttr_Index_Value_Verb: - case kAttr_Index_Index_Verb: - rattr(verb, s, rec, writer); - break; - case kStartElem_Value_Verb: - case kStartElem_Index_Verb: - relem(verb, s, rec, writer); - break; - case kEndElem_Verb: - writer.endElement(); - return; - default: - SkASSERT(!"bad verb"); - } - } -} - -void BML_XMLParser::Read(SkStream& s, SkXMLWriter& writer) -{ - BMLW rec; - writer.writeHeader(); - relem(rbyte(s), s, rec, writer); -} - -void BML_XMLParser::Read(SkStream& s, SkWStream& output) -{ - SkXMLStreamWriter writer(&output); - Read(s, writer); -} - -void BML_XMLParser::Read(SkStream& s, SkXMLParser& output) -{ - SkXMLParserWriter writer(&output); - Read(s, writer); -} - - - diff --git a/skia/xml/SkDOM.cpp b/skia/xml/SkDOM.cpp deleted file mode 100644 index a9fc31e..0000000 --- a/skia/xml/SkDOM.cpp +++ /dev/null @@ -1,512 +0,0 @@ -/* libs/graphics/xml/SkDOM.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include "SkDOM.h" - -///////////////////////////////////////////////////////////////////////// - -#include "SkXMLParser.h" - -bool SkXMLParser::parse(const SkDOM& dom, const SkDOMNode* node) -{ - const char* elemName = dom.getName(node); - - if (this->startElement(elemName)) - return false; - - SkDOM::AttrIter iter(dom, node); - const char* name, *value; - - while ((name = iter.next(&value)) != NULL) - if (this->addAttribute(name, value)) - return false; - - if ((node = dom.getFirstChild(node)) != NULL) - do { - if (!this->parse(dom, node)) - return false; - } while ((node = dom.getNextSibling(node)) != NULL); - - return !this->endElement(elemName); -} - -///////////////////////////////////////////////////////////////////////// - -struct SkDOMAttr { - const char* fName; - const char* fValue; -}; - -struct SkDOMNode { - const char* fName; - SkDOMNode* fFirstChild; - SkDOMNode* fNextSibling; - uint16_t fAttrCount; - uint8_t fType; - uint8_t fPad; - - const SkDOMAttr* attrs() const - { - return (const SkDOMAttr*)(this + 1); - } - SkDOMAttr* attrs() - { - return (SkDOMAttr*)(this + 1); - } -}; - -///////////////////////////////////////////////////////////////////////// - -#define kMinChunkSize 512 - -SkDOM::SkDOM() : fAlloc(kMinChunkSize), fRoot(NULL) -{ -} - -SkDOM::~SkDOM() -{ -} - -const SkDOM::Node* SkDOM::getRootNode() const -{ - return fRoot; -} - -const SkDOM::Node* SkDOM::getFirstChild(const Node* node, const char name[]) const -{ - SkASSERT(node); - const Node* child = node->fFirstChild; - - if (name) - { - for (; child != NULL; child = child->fNextSibling) - if (!strcmp(name, child->fName)) - break; - } - return child; -} - -const SkDOM::Node* SkDOM::getNextSibling(const Node* node, const char name[]) const -{ - SkASSERT(node); - const Node* sibling = node->fNextSibling; - if (name) - { - for (; sibling != NULL; sibling = sibling->fNextSibling) - if (!strcmp(name, sibling->fName)) - break; - } - return sibling; -} - -SkDOM::Type SkDOM::getType(const Node* node) const -{ - SkASSERT(node); - return (Type)node->fType; -} - -const char* SkDOM::getName(const Node* node) const -{ - SkASSERT(node); - return node->fName; -} - -const char* SkDOM::findAttr(const Node* node, const char name[]) const -{ - SkASSERT(node); - const Attr* attr = node->attrs(); - const Attr* stop = attr + node->fAttrCount; - - while (attr < stop) - { - if (!strcmp(attr->fName, name)) - return attr->fValue; - attr += 1; - } - return NULL; -} - -///////////////////////////////////////////////////////////////////////////////////// - -const SkDOM::Attr* SkDOM::getFirstAttr(const Node* node) const -{ - return node->fAttrCount ? node->attrs() : NULL; -} - -const SkDOM::Attr* SkDOM::getNextAttr(const Node* node, const Attr* attr) const -{ - SkASSERT(node); - if (attr == NULL) - return NULL; - return (attr - node->attrs() + 1) < node->fAttrCount ? attr + 1 : NULL; -} - -const char* SkDOM::getAttrName(const Node* node, const Attr* attr) const -{ - SkASSERT(node); - SkASSERT(attr); - return attr->fName; -} - -const char* SkDOM::getAttrValue(const Node* node, const Attr* attr) const -{ - SkASSERT(node); - SkASSERT(attr); - return attr->fValue; -} - -///////////////////////////////////////////////////////////////////////////////////// - -SkDOM::AttrIter::AttrIter(const SkDOM&, const SkDOM::Node* node) -{ - SkASSERT(node); - fAttr = node->attrs(); - fStop = fAttr + node->fAttrCount; -} - -const char* SkDOM::AttrIter::next(const char** value) -{ - const char* name = NULL; - - if (fAttr < fStop) - { - name = fAttr->fName; - if (value) - *value = fAttr->fValue; - fAttr += 1; - } - return name; -} - -////////////////////////////////////////////////////////////////////////////// - -#include "SkXMLParser.h" -#include "SkTDArray.h" - -static char* dupstr(SkChunkAlloc* chunk, const char src[]) -{ - SkASSERT(chunk && src); - size_t len = strlen(src); - char* dst = (char*)chunk->alloc(len + 1, SkChunkAlloc::kThrow_AllocFailType); - memcpy(dst, src, len + 1); - return dst; -} - -class SkDOMParser : public SkXMLParser { - bool fNeedToFlush; -public: - SkDOMParser(SkChunkAlloc* chunk) : SkXMLParser(&fParserError), fAlloc(chunk) - { - fRoot = NULL; - fLevel = 0; - fNeedToFlush = true; - } - SkDOM::Node* getRoot() const { return fRoot; } - SkXMLParserError fParserError; -protected: - void flushAttributes() - { - int attrCount = fAttrs.count(); - - SkDOM::Node* node = (SkDOM::Node*)fAlloc->alloc(sizeof(SkDOM::Node) + attrCount * sizeof(SkDOM::Attr), - SkChunkAlloc::kThrow_AllocFailType); - - node->fName = fElemName; - node->fFirstChild = NULL; - node->fAttrCount = SkToU16(attrCount); - node->fType = SkDOM::kElement_Type; - - if (fRoot == NULL) - { - node->fNextSibling = NULL; - fRoot = node; - } - else // this adds siblings in reverse order. gets corrected in onEndElement() - { - SkDOM::Node* parent = fParentStack.top(); - SkASSERT(fRoot && parent); - node->fNextSibling = parent->fFirstChild; - parent->fFirstChild = node; - } - *fParentStack.push() = node; - - memcpy(node->attrs(), fAttrs.begin(), attrCount * sizeof(SkDOM::Attr)); - fAttrs.reset(); - - } - virtual bool onStartElement(const char elem[]) - { - if (fLevel > 0 && fNeedToFlush) - this->flushAttributes(); - fNeedToFlush = true; - fElemName = dupstr(fAlloc, elem); - ++fLevel; - return false; - } - virtual bool onAddAttribute(const char name[], const char value[]) - { - SkDOM::Attr* attr = fAttrs.append(); - attr->fName = dupstr(fAlloc, name); - attr->fValue = dupstr(fAlloc, value); - return false; - } - virtual bool onEndElement(const char elem[]) - { - --fLevel; - if (fNeedToFlush) - this->flushAttributes(); - fNeedToFlush = false; - - SkDOM::Node* parent; - - fParentStack.pop(&parent); - - SkDOM::Node* child = parent->fFirstChild; - SkDOM::Node* prev = NULL; - while (child) - { - SkDOM::Node* next = child->fNextSibling; - child->fNextSibling = prev; - prev = child; - child = next; - } - parent->fFirstChild = prev; - return false; - } -private: - SkTDArray<SkDOM::Node*> fParentStack; - SkChunkAlloc* fAlloc; - SkDOM::Node* fRoot; - - // state needed for flushAttributes() - SkTDArray<SkDOM::Attr> fAttrs; - char* fElemName; - int fLevel; -}; - -const SkDOM::Node* SkDOM::build(const char doc[], size_t len) -{ - fAlloc.reset(); - SkDOMParser parser(&fAlloc); - if (!parser.parse(doc, len)) - { - SkDEBUGCODE(SkDebugf("xml parse error, line %d\n", parser.fParserError.getLineNumber());) - fRoot = NULL; - fAlloc.reset(); - return NULL; - } - fRoot = parser.getRoot(); - return fRoot; -} - -/////////////////////////////////////////////////////////////////////////// - -static void walk_dom(const SkDOM& dom, const SkDOM::Node* node, SkXMLParser* parser) -{ - const char* elem = dom.getName(node); - - parser->startElement(elem); - - SkDOM::AttrIter iter(dom, node); - const char* name; - const char* value; - while ((name = iter.next(&value)) != NULL) - parser->addAttribute(name, value); - - node = dom.getFirstChild(node, NULL); - while (node) - { - walk_dom(dom, node, parser); - node = dom.getNextSibling(node, NULL); - } - - parser->endElement(elem); -} - -const SkDOM::Node* SkDOM::copy(const SkDOM& dom, const SkDOM::Node* node) -{ - fAlloc.reset(); - SkDOMParser parser(&fAlloc); - - walk_dom(dom, node, &parser); - - fRoot = parser.getRoot(); - return fRoot; -} - -////////////////////////////////////////////////////////////////////////// - -int SkDOM::countChildren(const Node* node, const char elem[]) const -{ - int count = 0; - - node = this->getFirstChild(node, elem); - while (node) - { - count += 1; - node = this->getNextSibling(node, elem); - } - return count; -} - -////////////////////////////////////////////////////////////////////////// - -#include "SkParse.h" - -bool SkDOM::findS32(const Node* node, const char name[], int32_t* value) const -{ - const char* vstr = this->findAttr(node, name); - return vstr && SkParse::FindS32(vstr, value); -} - -bool SkDOM::findScalars(const Node* node, const char name[], SkScalar value[], int count) const -{ - const char* vstr = this->findAttr(node, name); - return vstr && SkParse::FindScalars(vstr, value, count); -} - -bool SkDOM::findHex(const Node* node, const char name[], uint32_t* value) const -{ - const char* vstr = this->findAttr(node, name); - return vstr && SkParse::FindHex(vstr, value); -} - -bool SkDOM::findBool(const Node* node, const char name[], bool* value) const -{ - const char* vstr = this->findAttr(node, name); - return vstr && SkParse::FindBool(vstr, value); -} - -int SkDOM::findList(const Node* node, const char name[], const char list[]) const -{ - const char* vstr = this->findAttr(node, name); - return vstr ? SkParse::FindList(vstr, list) : -1; -} - -bool SkDOM::hasAttr(const Node* node, const char name[], const char value[]) const -{ - const char* vstr = this->findAttr(node, name); - return vstr && !strcmp(vstr, value); -} - -bool SkDOM::hasS32(const Node* node, const char name[], int32_t target) const -{ - const char* vstr = this->findAttr(node, name); - int32_t value; - return vstr && SkParse::FindS32(vstr, &value) && value == target; -} - -bool SkDOM::hasScalar(const Node* node, const char name[], SkScalar target) const -{ - const char* vstr = this->findAttr(node, name); - SkScalar value; - return vstr && SkParse::FindScalar(vstr, &value) && value == target; -} - -bool SkDOM::hasHex(const Node* node, const char name[], uint32_t target) const -{ - const char* vstr = this->findAttr(node, name); - uint32_t value; - return vstr && SkParse::FindHex(vstr, &value) && value == target; -} - -bool SkDOM::hasBool(const Node* node, const char name[], bool target) const -{ - const char* vstr = this->findAttr(node, name); - bool value; - return vstr && SkParse::FindBool(vstr, &value) && value == target; -} - -////////////////////////////////////////////////////////////////////////// - -#ifdef SK_DEBUG - -static void tab(int level) -{ - while (--level >= 0) - SkDebugf("\t"); -} - -void SkDOM::dump(const Node* node, int level) const -{ - if (node == NULL) - node = this->getRootNode(); - if (node) - { - tab(level); - SkDebugf("<%s", this->getName(node)); - - const Attr* attr = node->attrs(); - const Attr* stop = attr + node->fAttrCount; - for (; attr < stop; attr++) - SkDebugf(" %s=\"%s\"", attr->fName, attr->fValue); - - const Node* child = this->getFirstChild(node); - if (child) - { - SkDebugf(">\n"); - while (child) - { - this->dump(child, level+1); - child = this->getNextSibling(child); - } - tab(level); - SkDebugf("</%s>\n", node->fName); - } - else - SkDebugf("/>\n"); - } -} - -void SkDOM::UnitTest() -{ -#ifdef SK_SUPPORT_UNITTEST - static const char gDoc[] = - "<root a='1' b='2'>" - "<elem1 c='3' />" - "<elem2 d='4' />" - "<elem3 e='5'>" - "<subelem1/>" - "<subelem2 f='6' g='7'/>" - "</elem3>" - "<elem4 h='8'/>" - "</root>" - ; - - SkDOM dom; - - SkASSERT(dom.getRootNode() == NULL); - - const Node* root = dom.build(gDoc, sizeof(gDoc) - 1); - SkASSERT(root && dom.getRootNode() == root); - - const char* v = dom.findAttr(root, "a"); - SkASSERT(v && !strcmp(v, "1")); - v = dom.findAttr(root, "b"); - SkASSERT(v && !strcmp(v, "2")); - v = dom.findAttr(root, "c"); - SkASSERT(v == NULL); - - SkASSERT(dom.getFirstChild(root, "elem1")); - SkASSERT(!dom.getFirstChild(root, "subelem1")); - - dom.dump(); -#endif -} - -#endif - diff --git a/skia/xml/SkJS.cpp b/skia/xml/SkJS.cpp deleted file mode 100644 index 03ccba6..0000000 --- a/skia/xml/SkJS.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* libs/graphics/xml/SkJS.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include <jsapi.h> - -#include "SkJS.h" -#include "SkString.h" - -#ifdef _WIN32_WCE -extern "C" { - void abort() { - SkASSERT(0); - } - - unsigned int _control87(unsigned int _new, unsigned int mask ) { - SkASSERT(0); - return 0; - } - - time_t mktime(struct tm *timeptr ) { - SkASSERT(0); - return 0; - } - -// int errno; - - char *strdup(const char *) { - SkASSERT(0); - return 0; - } - - char *strerror(int errnum) { - SkASSERT(0); - return 0; - } - - int isatty(void* fd) { - SkASSERT(0); - return 0; - } - - int putenv(const char *envstring) { - SkASSERT(0); - return 0; - } - - char *getenv(const char *varname) { - SkASSERT(0); - return 0; - } - - void GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) { - SkASSERT(0); - } - - struct tm * localtime(const time_t *timer) { - SkASSERT(0); - return 0; - } - - size_t strftime(char *strDest, size_t maxsize, const char *format, - const struct tm *timeptr ) { - SkASSERT(0); - return 0; - } - -} -#endif - -static JSBool -global_enumerate(JSContext *cx, JSObject *obj) -{ -#ifdef LAZY_STANDARD_CLASSES - return JS_EnumerateStandardClasses(cx, obj); -#else - return JS_TRUE; -#endif -} - -static JSBool -global_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp) -{ -#ifdef LAZY_STANDARD_CLASSES - if ((flags & JSRESOLVE_ASSIGNING) == 0) { - JSBool resolved; - - if (!JS_ResolveStandardClass(cx, obj, id, &resolved)) - return JS_FALSE; - if (resolved) { - *objp = obj; - return JS_TRUE; - } - } -#endif - -#if defined(SHELL_HACK) && defined(DEBUG) && defined(XP_UNIX) - if ((flags & (JSRESOLVE_QUALIFIED | JSRESOLVE_ASSIGNING)) == 0) { - /* - * Do this expensive hack only for unoptimized Unix builds, which are - * not used for benchmarking. - */ - char *path, *comp, *full; - const char *name; - JSBool ok, found; - JSFunction *fun; - - if (!JSVAL_IS_STRING(id)) - return JS_TRUE; - path = getenv("PATH"); - if (!path) - return JS_TRUE; - path = JS_strdup(cx, path); - if (!path) - return JS_FALSE; - name = JS_GetStringBytes(JSVAL_TO_STRING(id)); - ok = JS_TRUE; - for (comp = strtok(path, ":"); comp; comp = strtok(NULL, ":")) { - if (*comp != '\0') { - full = JS_smprintf("%s/%s", comp, name); - if (!full) { - JS_ReportOutOfMemory(cx); - ok = JS_FALSE; - break; - } - } else { - full = (char *)name; - } - found = (access(full, X_OK) == 0); - if (*comp != '\0') - free(full); - if (found) { - fun = JS_DefineFunction(cx, obj, name, Exec, 0, JSPROP_ENUMERATE); - ok = (fun != NULL); - if (ok) - *objp = obj; - break; - } - } - JS_free(cx, path); - return ok; - } -#else - return JS_TRUE; -#endif -} - -JSClass global_class = { - "global", JSCLASS_NEW_RESOLVE, - JS_PropertyStub, JS_PropertyStub, - JS_PropertyStub, JS_PropertyStub, - global_enumerate, (JSResolveOp) global_resolve, - JS_ConvertStub, JS_FinalizeStub -}; - -SkJS::SkJS(void* hwnd) : SkOSWindow(hwnd) { - if ((fRuntime = JS_NewRuntime(0x100000)) == NULL) { - SkASSERT(0); - return; - } - if ((fContext = JS_NewContext(fRuntime, 0x1000)) == NULL) { - SkASSERT(0); - return; - } - ; - if ((fGlobal = JS_NewObject(fContext, &global_class, NULL, NULL)) == NULL) { - SkASSERT(0); - return; - } - if (JS_InitStandardClasses(fContext, fGlobal) == NULL) { - SkASSERT(0); - return; - } - setConfig(SkBitmap::kARGB32_Config); - updateSize(); - setVisibleP(true); - InitializeDisplayables(getBitmap(), fContext, fGlobal, NULL); -} - -SkJS::~SkJS() { - DisposeDisplayables(); - JS_DestroyContext(fContext); - JS_DestroyRuntime(fRuntime); - JS_ShutDown(); -} - -SkBool SkJS::EvaluateScript(const char* script, jsval* rVal) { - return JS_EvaluateScript(fContext, fGlobal, script, strlen(script), - "memory" /* no file name */, 0 /* no line number */, rVal); -} - -SkBool SkJS::ValueToString(jsval value, SkString* string) { - JSString* str = JS_ValueToString(fContext, value); - if (str == NULL) - return false; - string->set(JS_GetStringBytes(str)); - return true; -} - -#ifdef SK_DEBUG -void SkJS::Test(void* hwnd) { - SkJS js(hwnd); - jsval val; - SkBool success = js.EvaluateScript("22/7", &val); - SkASSERT(success); - SkString string; - success = js.ValueToString(val, &string); - SkASSERT(success); - SkASSERT(strcmp(string.c_str(), "3.142857142857143") == 0); - success = js.EvaluateScript( - "var rect = new rectangle();" - "rect.left = 4;" - "rect.top = 10;" - "rect.right = 20;" - "rect.bottom = 30;" - "rect.width = rect.height + 20;" - "rect.draw();" - , &val); - SkASSERT(success); - success = js.ValueToString(val, &string); - SkASSERT(success); -} -#endifASSERT(success); - diff --git a/skia/xml/SkJSDisplayable.cpp b/skia/xml/SkJSDisplayable.cpp deleted file mode 100644 index d52a7c9..0000000 --- a/skia/xml/SkJSDisplayable.cpp +++ /dev/null @@ -1,472 +0,0 @@ -/* libs/graphics/xml/SkJSDisplayable.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include <jsapi.h> -#include "SkJS.h" -#include "SkDisplayType.h" -//#include "SkAnimateColor.h" -#include "SkAnimateMaker.h" -#include "SkAnimateSet.h" -//#include "SkAnimateTransform.h" -#include "SkCanvas.h" -//#include "SkDimensions.h" -#include "SkDisplayAdd.h" -#include "SkDisplayApply.h" -//#include "SkDisplayBefore.h" -#include "SkDisplayEvent.h" -//#include "SkDisplayFocus.h" -#include "SkDisplayInclude.h" -#include "SkDisplayPost.h" -#include "SkDisplayRandom.h" -#include "SkDraw3D.h" -#include "SkDrawBitmap.h" -#include "SkDrawClip.h" -#include "SkDrawDash.h" -#include "SkDrawDiscrete.h" -#include "SkDrawEmboss.h" -//#include "SkDrawFont.h" -#include "SkDrawFull.h" -#include "SkDrawGradient.h" -#include "SkDrawLine.h" -//#include "SkDrawMaskFilter.h" -#include "SkDrawMatrix.h" -#include "SkDrawOval.h" -#include "SkDrawPaint.h" -#include "SkDrawPath.h" -#include "SkDrawPoint.h" -// #include "SkDrawStroke.h" -#include "SkDrawText.h" -#include "SkDrawTo.h" -//#include "SkDrawTransferMode.h" -#include "SkDrawTransparentShader.h" -//#include "SkDrawUse.h" -#include "SkMatrixParts.h" -#include "SkPathParts.h" -#include "SkPostParts.h" -#include "SkScript.h" -#include "SkSnapshot.h" -#include "SkTextOnPath.h" -#include "SkTextToPath.h" - - -class SkJSDisplayable { -public: - SkJSDisplayable() : fDisplayable(NULL) {} - ~SkJSDisplayable() { delete fDisplayable; } - static void Destructor(JSContext *cx, JSObject *obj); - static JSBool GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); - static JSBool SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); - static SkCanvas* gCanvas; - static SkPaint* gPaint; - static JSBool Draw(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); - SkDisplayable* fDisplayable; -}; - -SkCanvas* SkJSDisplayable::gCanvas; -SkPaint* SkJSDisplayable::gPaint; - -JSBool SkJSDisplayable::Draw(JSContext *cx, JSObject *obj, uintN argc, - jsval *argv, jsval *rval) -{ - SkJSDisplayable *p = (SkJSDisplayable*) JS_GetPrivate(cx, obj); - SkASSERT(p->fDisplayable->isDrawable()); - SkDrawable* drawable = (SkDrawable*) p->fDisplayable; - SkAnimateMaker maker(NULL, gCanvas, gPaint); - drawable->draw(maker); - return JS_TRUE; -} - - -JSFunctionSpec SkJSDisplayable_methods[] = -{ - { "draw", SkJSDisplayable::Draw, 1, 0, 0 }, - { 0 } -}; - -static JSPropertySpec* gDisplayableProperties[kNumberOfTypes]; -static JSClass gDisplayableClasses[kNumberOfTypes]; - -#define JS_INIT(_prefix, _class) \ -static JSBool _class##Constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { \ - SkJSDisplayable* jsDisplayable = new SkJSDisplayable(); \ - jsDisplayable->fDisplayable = new _prefix##_class(); \ - JS_SetPrivate(cx, obj, (void*) jsDisplayable); \ - return JS_TRUE; \ -} \ - \ -static JSObject* _class##Init(JSContext *cx, JSObject *obj, JSObject *proto) { \ - JSObject *newProtoObj = JS_InitClass(cx, obj, proto, &gDisplayableClasses[SkType_##_class], \ - _class##Constructor, 0, \ - NULL, SkJSDisplayable_methods , \ - NULL, NULL); \ - JS_DefineProperties(cx, newProtoObj, gDisplayableProperties[SkType_##_class]); \ - return newProtoObj; \ -} - -JS_INIT(Sk, Add) -JS_INIT(Sk, AddCircle) -JS_INIT(Sk, AddOval) -JS_INIT(Sk, AddPath) -JS_INIT(Sk, AddRectangle) -JS_INIT(Sk, AddRoundRect) -//JS_INIT(Sk, After) -JS_INIT(Sk, Apply) -// JS_INIT(Sk, Animate) -//JS_INIT(Sk, AnimateColor) -JS_INIT(Sk, AnimateField) -//JS_INIT(Sk, AnimateRotate) -//JS_INIT(Sk, AnimateScale) -//JS_INIT(Sk, AnimateTranslate) -JS_INIT(SkDraw, Bitmap) -JS_INIT(Sk, BaseBitmap) -//JS_INIT(Sk, Before) -JS_INIT(SkDraw, BitmapShader) -JS_INIT(SkDraw, Blur) -JS_INIT(SkDraw, Clip) -JS_INIT(SkDraw, Color) -JS_INIT(Sk, CubicTo) -JS_INIT(Sk, Dash) -JS_INIT(Sk, Data) -//JS_INIT(Sk, Dimensions) -JS_INIT(Sk, Discrete) -JS_INIT(Sk, DrawTo) -JS_INIT(SkDraw, Emboss) -JS_INIT(SkDisplay, Event) -// JS_INIT(SkDraw, Font) -// JS_INIT(Sk, Focus) -JS_INIT(Sk, Image) -JS_INIT(Sk, Include) -// JS_INIT(Sk, Input) -JS_INIT(Sk, Line) -JS_INIT(Sk, LinearGradient) -JS_INIT(Sk, LineTo) -JS_INIT(SkDraw, Matrix) -JS_INIT(Sk, Move) -JS_INIT(Sk, MoveTo) -JS_INIT(Sk, Oval) -JS_INIT(SkDraw, Path) -JS_INIT(SkDraw, Paint) -JS_INIT(Sk, DrawPoint) -JS_INIT(Sk, PolyToPoly) -JS_INIT(Sk, Polygon) -JS_INIT(Sk, Polyline) -JS_INIT(Sk, Post) -JS_INIT(Sk, QuadTo) -JS_INIT(Sk, RadialGradient) -JS_INIT(SkDisplay, Random) -JS_INIT(Sk, RectToRect) -JS_INIT(Sk, Rectangle) -JS_INIT(Sk, Remove) -JS_INIT(Sk, Replace) -JS_INIT(Sk, Rotate) -JS_INIT(Sk, RoundRect) -JS_INIT(Sk, Scale) -JS_INIT(Sk, Set) -JS_INIT(Sk, Skew) -// JS_INIT(Sk, 3D_Camera) -// JS_INIT(Sk, 3D_Patch) -#ifdef SK_SUPPORT_IMAGE_ENCODE -JS_INIT(Sk, Snapshot) -#endif -// JS_INIT(SkDraw, Stroke) -JS_INIT(Sk, Text) -JS_INIT(Sk, TextOnPath) -JS_INIT(Sk, TextToPath) -JS_INIT(Sk, Translate) -//JS_INIT(Sk, Use) - -#if SK_USE_CONDENSED_INFO == 0 -static void GenerateTables() { - for (int index = 0; index < kTypeNamesSize; index++) { - int infoCount; - SkDisplayTypes type = gTypeNames[index].fType; - const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, type, &infoCount); - if (info == NULL) - continue; - gDisplayableProperties[type] = new JSPropertySpec[infoCount + 1]; - JSPropertySpec* propertySpec = gDisplayableProperties[type]; - memset(propertySpec, 0, sizeof (JSPropertySpec) * (infoCount + 1)); - for (int inner = 0; inner < infoCount; inner++) { - if (info[inner].fType == SkType_BaseClassInfo) - continue; - propertySpec[inner].name = info[inner].fName; - propertySpec[inner].tinyid = inner; - propertySpec[inner].flags = JSPROP_ENUMERATE; - } - gDisplayableClasses[type].name = gTypeNames[index].fName; - gDisplayableClasses[type].flags = JSCLASS_HAS_PRIVATE; - gDisplayableClasses[type].addProperty = JS_PropertyStub; - gDisplayableClasses[type].delProperty = JS_PropertyStub; - gDisplayableClasses[type].getProperty = SkJSDisplayable::GetProperty; - gDisplayableClasses[type].setProperty = SkJSDisplayable::SetProperty; - gDisplayableClasses[type].enumerate = JS_EnumerateStub; - gDisplayableClasses[type].resolve = JS_ResolveStub; - gDisplayableClasses[type].convert = JS_ConvertStub; - gDisplayableClasses[type].finalize = SkJSDisplayable::Destructor; - } -} -#endif - -void SkJSDisplayable::Destructor(JSContext *cx, JSObject *obj) { - delete (SkJSDisplayable*) JS_GetPrivate(cx, obj); -} - -JSBool SkJSDisplayable::GetProperty(JSContext *cx, JSObject *obj, jsval id, - jsval *vp) -{ - if (JSVAL_IS_INT(id) == 0) - return JS_TRUE; - SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj); - SkDisplayable* displayable = p->fDisplayable; - SkDisplayTypes displayableType = displayable->getType(); - int members; - const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members); - int idIndex = JSVAL_TO_INT(id); - SkASSERT(idIndex >= 0 && idIndex < members); - info = &info[idIndex]; - SkDisplayTypes infoType = (SkDisplayTypes) info->fType; - SkScalar scalar = 0; - S32 s32 = 0; - SkString* string= NULL; - JSString *str; - if (infoType == SkType_MemberProperty) { - infoType = info->propertyType(); - switch (infoType) { - case SkType_Scalar: { - SkScriptValue scriptValue; - bool success = displayable->getProperty(info->propertyIndex(), &scriptValue); - SkASSERT(scriptValue.fType == SkType_Scalar); - scalar = scriptValue.fOperand.fScalar; - } break; - default: - SkASSERT(0); // !!! unimplemented - } - } else { - SkASSERT(info->fCount == 1); - switch (infoType) { - case SkType_Boolean: - case SkType_Color: - case SkType_S32: - s32 = *(S32*) info->memberData(displayable); - break; - case SkType_String: - info->getString(displayable, &string); - break; - case SkType_Scalar: - SkOperand operand; - info->getValue(displayable, &operand, 1); - scalar = operand.fScalar; - break; - default: - SkASSERT(0); // !!! unimplemented - } - } - switch (infoType) { - case SkType_Boolean: - *vp = BOOLEAN_TO_JSVAL(s32); - break; - case SkType_Color: - case SkType_S32: - *vp = INT_TO_JSVAL(s32); - break; - case SkType_Scalar: - if (SkScalarFraction(scalar) == 0) - *vp = INT_TO_JSVAL(SkScalarFloor(scalar)); - else -#ifdef SK_SCALAR_IS_FLOAT - *vp = DOUBLE_TO_JSVAL(scalar); -#else - *vp = DOUBLE_TO_JSVAL(scalar / 65536.0f ); -#endif - break; - case SkType_String: - str = JS_NewStringCopyN(cx, string->c_str(), string->size()); - *vp = STRING_TO_JSVAL(str); - break; - default: - SkASSERT(0); // !!! unimplemented - } - return JS_TRUE; -} - -JSBool SkJSDisplayable::SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { - if (JSVAL_IS_INT(id) == 0) - return JS_TRUE; - SkJSDisplayable *p = (SkJSDisplayable *) JS_GetPrivate(cx, obj); - SkDisplayable* displayable = p->fDisplayable; - SkDisplayTypes displayableType = displayable->getType(); - int members; - const SkMemberInfo* info = SkDisplayType::GetMembers(NULL /* fMaker */, displayableType, &members); - int idIndex = JSVAL_TO_INT(id); - SkASSERT(idIndex >= 0 && idIndex < members); - info = &info[idIndex]; - SkDisplayTypes infoType = info->getType(); - SkScalar scalar = 0; - S32 s32 = 0; - SkString string; - JSString* str; - jsval value = *vp; - switch (infoType) { - case SkType_Boolean: - s32 = JSVAL_TO_BOOLEAN(value); - break; - case SkType_Color: - case SkType_S32: - s32 = JSVAL_TO_INT(value); - break; - case SkType_Scalar: - if (JSVAL_IS_INT(value)) - scalar = SkIntToScalar(JSVAL_TO_INT(value)); - else { - SkASSERT(JSVAL_IS_DOUBLE(value)); -#ifdef SK_SCALAR_IS_FLOAT - scalar = (float) *(double*) JSVAL_TO_DOUBLE(value); -#else - scalar = (SkFixed) (*(double*)JSVAL_TO_DOUBLE(value) * 65536.0); -#endif - } - break; - case SkType_String: - str = JS_ValueToString(cx, value); - string.set(JS_GetStringBytes(str)); - break; - default: - SkASSERT(0); // !!! unimplemented - } - if (info->fType == SkType_MemberProperty) { - switch (infoType) { - case SkType_Scalar: { - SkScriptValue scriptValue; - scriptValue.fType = SkType_Scalar; - scriptValue.fOperand.fScalar = scalar; - displayable->setProperty(-1 - (int) info->fOffset, scriptValue); - } break; - default: - SkASSERT(0); // !!! unimplemented - } - } else { - SkASSERT(info->fCount == 1); - switch (infoType) { - case SkType_Boolean: - case SkType_Color: - case SkType_S32: - s32 = *(S32*) ((const char*) displayable + info->fOffset); - break; - case SkType_String: - info->setString(displayable, &string); - break; - case SkType_Scalar: - SkOperand operand; - operand.fScalar = scalar; - info->setValue(displayable, &operand, 1); - break; - default: - SkASSERT(0); // !!! unimplemented - } - } - return JS_TRUE; -} - -void SkJS::InitializeDisplayables(const SkBitmap& bitmap, JSContext *cx, JSObject *obj, JSObject *proto) { - SkJSDisplayable::gCanvas = new SkCanvas(bitmap); - SkJSDisplayable::gPaint = new SkPaint(); -#if SK_USE_CONDENSED_INFO == 0 - GenerateTables(); -#else - SkASSERT(0); // !!! compressed version hasn't been implemented -#endif - AddInit(cx, obj, proto); - AddCircleInit(cx, obj, proto); - AddOvalInit(cx, obj, proto); - AddPathInit(cx, obj, proto); - AddRectangleInit(cx, obj, proto); - AddRoundRectInit(cx, obj, proto); -// AfterInit(cx, obj, proto); - ApplyInit(cx, obj, proto); - // AnimateInit(cx, obj, proto); -// AnimateColorInit(cx, obj, proto); - AnimateFieldInit(cx, obj, proto); -// AnimateRotateInit(cx, obj, proto); -// AnimateScaleInit(cx, obj, proto); -// AnimateTranslateInit(cx, obj, proto); - BitmapInit(cx, obj, proto); -// BaseBitmapInit(cx, obj, proto); -// BeforeInit(cx, obj, proto); - BitmapShaderInit(cx, obj, proto); - BlurInit(cx, obj, proto); - ClipInit(cx, obj, proto); - ColorInit(cx, obj, proto); - CubicToInit(cx, obj, proto); - DashInit(cx, obj, proto); - DataInit(cx, obj, proto); -// DimensionsInit(cx, obj, proto); - DiscreteInit(cx, obj, proto); - DrawToInit(cx, obj, proto); - EmbossInit(cx, obj, proto); - EventInit(cx, obj, proto); -// FontInit(cx, obj, proto); -// FocusInit(cx, obj, proto); - ImageInit(cx, obj, proto); - IncludeInit(cx, obj, proto); -// InputInit(cx, obj, proto); - LineInit(cx, obj, proto); - LinearGradientInit(cx, obj, proto); - LineToInit(cx, obj, proto); - MatrixInit(cx, obj, proto); - MoveInit(cx, obj, proto); - MoveToInit(cx, obj, proto); - OvalInit(cx, obj, proto); - PathInit(cx, obj, proto); - PaintInit(cx, obj, proto); - DrawPointInit(cx, obj, proto); - PolyToPolyInit(cx, obj, proto); - PolygonInit(cx, obj, proto); - PolylineInit(cx, obj, proto); - PostInit(cx, obj, proto); - QuadToInit(cx, obj, proto); - RadialGradientInit(cx, obj, proto); - RandomInit(cx, obj, proto); - RectToRectInit(cx, obj, proto); - RectangleInit(cx, obj, proto); - RemoveInit(cx, obj, proto); - ReplaceInit(cx, obj, proto); - RotateInit(cx, obj, proto); - RoundRectInit(cx, obj, proto); - ScaleInit(cx, obj, proto); - SetInit(cx, obj, proto); - SkewInit(cx, obj, proto); - // 3D_CameraInit(cx, obj, proto); - // 3D_PatchInit(cx, obj, proto); - #ifdef SK_SUPPORT_IMAGE_ENCODE - SnapshotInit(cx, obj, proto); - #endif -// StrokeInit(cx, obj, proto); - TextInit(cx, obj, proto); - TextOnPathInit(cx, obj, proto); - TextToPathInit(cx, obj, proto); - TranslateInit(cx, obj, proto); -// UseInit(cx, obj, proto); -} - -void SkJS::DisposeDisplayables() { - delete SkJSDisplayable::gPaint; - delete SkJSDisplayable::gCanvas; - for (int index = 0; index < kTypeNamesSize; index++) { - SkDisplayTypes type = gTypeNames[index].fType; - delete[] gDisplayableProperties[type]; - } -} diff --git a/skia/xml/SkParse.cpp b/skia/xml/SkParse.cpp deleted file mode 100644 index e740280..0000000 --- a/skia/xml/SkParse.cpp +++ /dev/null @@ -1,336 +0,0 @@ -/* libs/graphics/xml/SkParse.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include "SkParse.h" - -static inline bool is_between(int c, int min, int max) -{ - return (unsigned)(c - min) <= (unsigned)(max - min); -} - -static inline bool is_ws(int c) -{ - return is_between(c, 1, 32); -} - -static inline bool is_digit(int c) -{ - return is_between(c, '0', '9'); -} - -static inline bool is_sep(int c) -{ - return is_ws(c) || c == ',' || c == ';'; -} - -static int to_hex(int c) -{ - if (is_digit(c)) - return c - '0'; - - c |= 0x20; // make us lower-case - if (is_between(c, 'a', 'f')) - return c + 10 - 'a'; - else - return -1; -} - -static inline bool is_hex(int c) -{ - return to_hex(c) >= 0; -} - -static const char* skip_ws(const char str[]) -{ - SkASSERT(str); - while (is_ws(*str)) - str++; - return str; -} - -static const char* skip_sep(const char str[]) -{ - SkASSERT(str); - while (is_sep(*str)) - str++; - return str; -} - -int SkParse::Count(const char str[]) -{ - char c; - int count = 0; - goto skipLeading; - do { - count++; - do { - if ((c = *str++) == '\0') - goto goHome; - } while (is_sep(c) == false); -skipLeading: - do { - if ((c = *str++) == '\0') - goto goHome; - } while (is_sep(c)); - } while (true); -goHome: - return count; -} - -int SkParse::Count(const char str[], char separator) -{ - char c; - int count = 0; - goto skipLeading; - do { - count++; - do { - if ((c = *str++) == '\0') - goto goHome; - } while (c != separator); -skipLeading: - do { - if ((c = *str++) == '\0') - goto goHome; - } while (c == separator); - } while (true); -goHome: - return count; -} - -const char* SkParse::FindHex(const char str[], uint32_t* value) -{ - SkASSERT(str); - str = skip_ws(str); - - if (!is_hex(*str)) - return NULL; - - uint32_t n = 0; - int max_digits = 8; - int digit; - - while ((digit = to_hex(*str)) >= 0) - { - if (--max_digits < 0) - return NULL; - n = (n << 4) | digit; - str += 1; - } - - if (*str == 0 || is_ws(*str)) - { - if (value) - *value = n; - return str; - } - return false; -} - -const char* SkParse::FindS32(const char str[], int32_t* value) -{ - SkASSERT(str); - str = skip_ws(str); - - int sign = 0; - if (*str == '-') - { - sign = -1; - str += 1; - } - - if (!is_digit(*str)) - return NULL; - - int n = 0; - while (is_digit(*str)) - { - n = 10*n + *str - '0'; - str += 1; - } - if (value) - *value = (n ^ sign) - sign; - return str; -} - -const char* SkParse::FindMSec(const char str[], SkMSec* value) -{ - SkASSERT(str); - str = skip_ws(str); - - int sign = 0; - if (*str == '-') - { - sign = -1; - str += 1; - } - - if (!is_digit(*str)) - return NULL; - - int n = 0; - while (is_digit(*str)) - { - n = 10*n + *str - '0'; - str += 1; - } - int remaining10s = 3; - if (*str == '.') { - str++; - while (is_digit(*str)) - { - n = 10*n + *str - '0'; - str += 1; - if (--remaining10s == 0) - break; - } - } - while (--remaining10s >= 0) - n *= 10; - if (value) - *value = (n ^ sign) - sign; - return str; -} - -const char* SkParse::FindScalar(const char str[], SkScalar* value) -{ - SkASSERT(str); - str = skip_ws(str); - - int sign = 0; - if (*str == '-') - { - sign = -1; - str += 1; - } - - if (!is_digit(*str) && *str != '.') - return NULL; - - int n = 0; - while (is_digit(*str)) - { - n = 10*n + *str - '0'; - if (n > 0x7FFF) - return NULL; - str += 1; - } - n <<= 16; - - if (*str == '.') - { - static const int gFractions[] = { (1 << 24) / 10, (1 << 24) / 100, (1 << 24) / 1000, - (1 << 24) / 10000, (1 << 24) / 100000 }; - str += 1; - int d = 0; - const int* fraction = gFractions; - const int* end = &fraction[SK_ARRAY_COUNT(gFractions)]; - while (is_digit(*str) && fraction < end) - d += (*str++ - '0') * *fraction++; - d += 0x80; // round - n += d >> 8; - } - while (is_digit(*str)) - str += 1; - if (value) - { - n = (n ^ sign) - sign; // apply the sign - *value = SkFixedToScalar(n); - } - return str; -} - -const char* SkParse::FindScalars(const char str[], SkScalar value[], int count) -{ - SkASSERT(count >= 0); - - if (count > 0) - { - for (;;) - { - str = SkParse::FindScalar(str, value); - if (--count == 0 || str == NULL) - break; - - // keep going - str = skip_sep(str); - if (value) - value += 1; - } - } - return str; -} - -static bool lookup_str(const char str[], const char** table, int count) -{ - while (--count >= 0) - if (!strcmp(str, table[count])) - return true; - return false; -} - -bool SkParse::FindBool(const char str[], bool* value) -{ - static const char* gYes[] = { "yes", "1", "true" }; - static const char* gNo[] = { "no", "0", "false" }; - - if (lookup_str(str, gYes, SK_ARRAY_COUNT(gYes))) - { - if (value) *value = true; - return true; - } - else if (lookup_str(str, gNo, SK_ARRAY_COUNT(gNo))) - { - if (value) *value = false; - return true; - } - return false; -} - -int SkParse::FindList(const char target[], const char list[]) -{ - size_t len = strlen(target); - int index = 0; - - for (;;) - { - const char* end = strchr(list, ','); - size_t entryLen; - - if (end == NULL) // last entry - entryLen = strlen(list); - else - entryLen = end - list; - - if (entryLen == len && memcmp(target, list, len) == 0) - return index; - if (end == NULL) - break; - - list = end + 1; // skip the ',' - index += 1; - } - return -1; -} - -#ifdef SK_SUPPORT_UNITTEST -void SkParse::UnitTest() -{ - // !!! additional parse tests go here - SkParse::TestColor(); -} -#endif diff --git a/skia/xml/SkParseColor.cpp b/skia/xml/SkParseColor.cpp deleted file mode 100644 index eca2e38..0000000 --- a/skia/xml/SkParseColor.cpp +++ /dev/null @@ -1,546 +0,0 @@ -/* libs/graphics/xml/SkParseColor.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include "SkParse.h" - -#ifdef SK_DEBUG -#include "SkString.h" - - // compress names 6 chars per long (packed 5 bits/char ) - // note: little advantage to splitting chars across longs, since 3 longs at 2 unused bits each - // allow for one additional split char (vs. the 18 unsplit chars in the three longs) - // use extra two bits to represent: - // 00 : final 6 (or fewer) chars (if 'a' is 0x01, zero could have special meaning) - // 01 : not final 6 chars - // 10 : color - // 11 : unused, except as debugging sentinal? (could be -1 for easier test) - // !!! the bit to end the word (last) is at the low bit for binary search - // lookup first character in offset for quick start - // offset is 27-entry table of bytes(?) that trims linear search to at most 21 entries ('d') - // shift match into long; set bit 30 if it all doesn't fit - // while longs don't match, march forward - // if they do match, and bit 30 is set, advance match, clearing bit 30 if - // final chars, and advance to next test - // if they do match, and bit 30 is clear, get next long (color) and return it - // stop at lookup of first char + 1 -static const struct SkNameRGB { - const char* name; - int rgb; -} colorNames[] = { - { "aliceblue", 0xF0F8FF }, - { "antiquewhite", 0xFAEBD7 }, - { "aqua", 0x00FFFF }, - { "aquamarine", 0x7FFFD4 }, - { "azure", 0xF0FFFF }, - { "beige", 0xF5F5DC }, - { "bisque", 0xFFE4C4 }, - { "black", 0x000000 }, - { "blanchedalmond", 0xFFEBCD }, - { "blue", 0x0000FF }, - { "blueviolet", 0x8A2BE2 }, - { "brown", 0xA52A2A }, - { "burlywood", 0xDEB887 }, - { "cadetblue", 0x5F9EA0 }, - { "chartreuse", 0x7FFF00 }, - { "chocolate", 0xD2691E }, - { "coral", 0xFF7F50 }, - { "cornflowerblue", 0x6495ED }, - { "cornsilk", 0xFFF8DC }, - { "crimson", 0xDC143C }, - { "cyan", 0x00FFFF }, - { "darkblue", 0x00008B }, - { "darkcyan", 0x008B8B }, - { "darkgoldenrod", 0xB8860B }, - { "darkgray", 0xA9A9A9 }, - { "darkgreen", 0x006400 }, - { "darkkhaki", 0xBDB76B }, - { "darkmagenta", 0x8B008B }, - { "darkolivegreen", 0x556B2F }, - { "darkorange", 0xFF8C00 }, - { "darkorchid", 0x9932CC }, - { "darkred", 0x8B0000 }, - { "darksalmon", 0xE9967A }, - { "darkseagreen", 0x8FBC8F }, - { "darkslateblue", 0x483D8B }, - { "darkslategray", 0x2F4F4F }, - { "darkturquoise", 0x00CED1 }, - { "darkviolet", 0x9400D3 }, - { "deeppink", 0xFF1493 }, - { "deepskyblue", 0x00BFFF }, - { "dimgray", 0x696969 }, - { "dodgerblue", 0x1E90FF }, - { "firebrick", 0xB22222 }, - { "floralwhite", 0xFFFAF0 }, - { "forestgreen", 0x228B22 }, - { "fuchsia", 0xFF00FF }, - { "gainsboro", 0xDCDCDC }, - { "ghostwhite", 0xF8F8FF }, - { "gold", 0xFFD700 }, - { "goldenrod", 0xDAA520 }, - { "gray", 0x808080 }, - { "green", 0x008000 }, - { "greenyellow", 0xADFF2F }, - { "honeydew", 0xF0FFF0 }, - { "hotpink", 0xFF69B4 }, - { "indianred", 0xCD5C5C }, - { "indigo", 0x4B0082 }, - { "ivory", 0xFFFFF0 }, - { "khaki", 0xF0E68C }, - { "lavender", 0xE6E6FA }, - { "lavenderblush", 0xFFF0F5 }, - { "lawngreen", 0x7CFC00 }, - { "lemonchiffon", 0xFFFACD }, - { "lightblue", 0xADD8E6 }, - { "lightcoral", 0xF08080 }, - { "lightcyan", 0xE0FFFF }, - { "lightgoldenrodyellow", 0xFAFAD2 }, - { "lightgreen", 0x90EE90 }, - { "lightgrey", 0xD3D3D3 }, - { "lightpink", 0xFFB6C1 }, - { "lightsalmon", 0xFFA07A }, - { "lightseagreen", 0x20B2AA }, - { "lightskyblue", 0x87CEFA }, - { "lightslategray", 0x778899 }, - { "lightsteelblue", 0xB0C4DE }, - { "lightyellow", 0xFFFFE0 }, - { "lime", 0x00FF00 }, - { "limegreen", 0x32CD32 }, - { "linen", 0xFAF0E6 }, - { "magenta", 0xFF00FF }, - { "maroon", 0x800000 }, - { "mediumaquamarine", 0x66CDAA }, - { "mediumblue", 0x0000CD }, - { "mediumorchid", 0xBA55D3 }, - { "mediumpurple", 0x9370DB }, - { "mediumseagreen", 0x3CB371 }, - { "mediumslateblue", 0x7B68EE }, - { "mediumspringgreen", 0x00FA9A }, - { "mediumturquoise", 0x48D1CC }, - { "mediumvioletred", 0xC71585 }, - { "midnightblue", 0x191970 }, - { "mintcream", 0xF5FFFA }, - { "mistyrose", 0xFFE4E1 }, - { "moccasin", 0xFFE4B5 }, - { "navajowhite", 0xFFDEAD }, - { "navy", 0x000080 }, - { "oldlace", 0xFDF5E6 }, - { "olive", 0x808000 }, - { "olivedrab", 0x6B8E23 }, - { "orange", 0xFFA500 }, - { "orangered", 0xFF4500 }, - { "orchid", 0xDA70D6 }, - { "palegoldenrod", 0xEEE8AA }, - { "palegreen", 0x98FB98 }, - { "paleturquoise", 0xAFEEEE }, - { "palevioletred", 0xDB7093 }, - { "papayawhip", 0xFFEFD5 }, - { "peachpuff", 0xFFDAB9 }, - { "peru", 0xCD853F }, - { "pink", 0xFFC0CB }, - { "plum", 0xDDA0DD }, - { "powderblue", 0xB0E0E6 }, - { "purple", 0x800080 }, - { "red", 0xFF0000 }, - { "rosybrown", 0xBC8F8F }, - { "royalblue", 0x4169E1 }, - { "saddlebrown", 0x8B4513 }, - { "salmon", 0xFA8072 }, - { "sandybrown", 0xF4A460 }, - { "seagreen", 0x2E8B57 }, - { "seashell", 0xFFF5EE }, - { "sienna", 0xA0522D }, - { "silver", 0xC0C0C0 }, - { "skyblue", 0x87CEEB }, - { "slateblue", 0x6A5ACD }, - { "slategray", 0x708090 }, - { "snow", 0xFFFAFA }, - { "springgreen", 0x00FF7F }, - { "steelblue", 0x4682B4 }, - { "tan", 0xD2B48C }, - { "teal", 0x008080 }, - { "thistle", 0xD8BFD8 }, - { "tomato", 0xFF6347 }, - { "turquoise", 0x40E0D0 }, - { "violet", 0xEE82EE }, - { "wheat", 0xF5DEB3 }, - { "white", 0xFFFFFF }, - { "whitesmoke", 0xF5F5F5 }, - { "yellow", 0xFFFF00 }, - { "yellowgreen", 0x9ACD32 } -}; - -int colorNamesSize = sizeof(colorNames) / sizeof(colorNames[0]); - -static void CreateTable() { - SkString comment; - size_t originalSize = 0; - int replacement = 0; - for (int index = 0; index < colorNamesSize; index++) { - SkNameRGB nameRGB = colorNames[index]; - const char* name = nameRGB.name; - size_t len = strlen(name); - originalSize += len + 9; - bool first = true; - bool last = false; - do { - int compressed = 0; - const char* start = name; - for (int chIndex = 0; chIndex < 6; chIndex++) { - compressed <<= 5; - compressed |= *name ? *name++ - 'a' + 1 : 0 ; - } - replacement += sizeof(int); - compressed <<= 1; - compressed |= 1; - if (first) { - compressed |= 0x80000000; - first = false; - } - if (len <= 6) { // last - compressed &= ~1; - last = true; - } - len -= 6; - SkDebugf("0x%08x, ", compressed); - comment.append(start, name - start); - } while (last == false); - replacement += sizeof(int); - SkDebugf("0x%08x, ", nameRGB.rgb); - SkDebugf("// %s\n", comment.c_str()); - comment.reset(); - } - SkDebugf("// original = %d : replacement = %d\n", originalSize, replacement); - SkASSERT(0); // always stop after creating table -} - -#endif - -static const unsigned int gColorNames[] = { -0x85891945, 0x32a50000, 0x00f0f8ff, // aliceblue -0x85d44c6b, 0x16e84d0a, 0x00faebd7, // antiquewhite -0x86350800, 0x0000ffff, // aqua -0x86350b43, 0x492e2800, 0x007fffd4, // aquamarine -0x87559140, 0x00f0ffff, // azure -0x88a93940, 0x00f5f5dc, // beige -0x89338d4a, 0x00ffe4c4, // bisque -0x89811ac0, 0x00000000, // black -0x898170d1, 0x1481635f, 0x38800000, 0x00ffebcd, // blanchedalmond -0x89952800, 0x000000ff, // blue -0x89952d93, 0x3d85a000, 0x008a2be2, // blueviolet -0x8a4fbb80, 0x00a52a2a, // brown -0x8ab2666f, 0x3de40000, 0x00deb887, // burlywood -0x8c242d05, 0x32a50000, 0x005f9ea0, // cadetblue -0x8d019525, 0x16b32800, 0x007fff00, // chartreuse -0x8d0f1bd9, 0x06850000, 0x00d2691e, // chocolate -0x8df20b00, 0x00ff7f50, // coral -0x8df27199, 0x3ee59099, 0x54a00000, 0x006495ed, // cornflowerblue -0x8df274d3, 0x31600000, 0x00fff8dc, // cornsilk -0x8e496cdf, 0x38000000, 0x00dc143c, // crimson -0x8f217000, 0x0000ffff, // cyan -0x90325899, 0x54a00000, 0x0000008b, // darkblue -0x903258f3, 0x05c00000, 0x00008b8b, // darkcyan -0x903259df, 0x3085749f, 0x10000000, 0x00b8860b, // darkgoldenrod -0x903259e5, 0x07200000, 0x00a9a9a9, // darkgray -0x903259e5, 0x14ae0000, 0x00006400, // darkgreen -0x90325ad1, 0x05690000, 0x00bdb76b, // darkkhaki -0x90325b43, 0x1caea040, 0x008b008b, // darkmagenta -0x90325bd9, 0x26c53c8b, 0x15c00000, 0x00556b2f, // darkolivegreen -0x90325be5, 0x05c72800, 0x00ff8c00, // darkorange -0x90325be5, 0x0d092000, 0x009932cc, // darkorchid -0x90325c8b, 0x10000000, 0x008b0000, // darkred -0x90325cc3, 0x31af7000, 0x00e9967a, // darksalmon -0x90325ccb, 0x04f2295c, 0x008fbc8f, // darkseagreen -0x90325cd9, 0x0685132b, 0x14000000, 0x00483d8b, // darkslateblue -0x90325cd9, 0x06853c83, 0x64000000, 0x002f4f4f, // darkslategray -0x90325d2b, 0x4a357a67, 0x14000000, 0x0000ced1, // darkturquoise -0x90325d93, 0x3d85a000, 0x009400d3, // darkviolet -0x90a58413, 0x39600000, 0x00ff1493, // deeppink -0x90a584d7, 0x644ca940, 0x0000bfff, // deepskyblue -0x912d3c83, 0x64000000, 0x00696969, // dimgray -0x91e43965, 0x09952800, 0x001e90ff, // dodgerblue -0x993228a5, 0x246b0000, 0x00b22222, // firebrick -0x998f9059, 0x5d09a140, 0x00fffaf0, // floralwhite -0x99f22ce9, 0x1e452b80, 0x00228b22, // forestgreen -0x9aa344d3, 0x04000000, 0x00ff00ff, // fuchsia -0x9c2974c5, 0x3e4f0000, 0x00dcdcdc, // gainsboro -0x9d0f9d2f, 0x21342800, 0x00f8f8ff, // ghostwhite -0x9dec2000, 0x00ffd700, // gold -0x9dec215d, 0x49e40000, 0x00daa520, // goldenrod -0x9e41c800, 0x00808080, // gray -0x9e452b80, 0x00008000, // green -0x9e452bb3, 0x158c7dc0, 0x00adff2f, // greenyellow -0xa1ee2e49, 0x16e00000, 0x00f0fff0, // honeydew -0xa1f4825d, 0x2c000000, 0x00ff69b4, // hotpink -0xa5c4485d, 0x48a40000, 0x00cd5c5c, // indianred -0xa5c449de, 0x004b0082, // indigo -0xa6cf9640, 0x00fffff0, // ivory -0xad015a40, 0x00f0e68c, // khaki -0xb0362b89, 0x16400000, 0x00e6e6fa, // lavender -0xb0362b89, 0x16426567, 0x20000000, 0x00fff0f5, // lavenderblush -0xb03771e5, 0x14ae0000, 0x007cfc00, // lawngreen -0xb0ad7b87, 0x212633dc, 0x00fffacd, // lemonchiffon -0xb1274505, 0x32a50000, 0x00add8e6, // lightblue -0xb1274507, 0x3e416000, 0x00f08080, // lightcoral -0xb1274507, 0x642e0000, 0x00e0ffff, // lightcyan -0xb127450f, 0x3d842ba5, 0x3c992b19, 0x3ee00000, 0x00fafad2, // lightgoldenrodyellow -0xb127450f, 0x48a57000, 0x0090ee90, // lightgreen -0xb127450f, 0x48b90000, 0x00d3d3d3, // lightgrey -0xb1274521, 0x25cb0000, 0x00ffb6c1, // lightpink -0xb1274527, 0x058d7b80, 0x00ffa07a, // lightsalmon -0xb1274527, 0x1427914b, 0x38000000, 0x0020b2aa, // lightseagreen -0xb1274527, 0x2f22654a, 0x0087cefa, // lightskyblue -0xb1274527, 0x303429e5, 0x07200000, 0x00778899, // lightslategray -0xb1274527, 0x50a56099, 0x54a00000, 0x00b0c4de, // lightsteelblue -0xb1274533, 0x158c7dc0, 0x00ffffe0, // lightyellow -0xb12d2800, 0x0000ff00, // lime -0xb12d29e5, 0x14ae0000, 0x0032cd32, // limegreen -0xb12e2b80, 0x00faf0e6, // linen -0xb4272ba9, 0x04000000, 0x00ff00ff, // magenta -0xb4327bdc, 0x00800000, // maroon -0xb4a44d5b, 0x06350b43, 0x492e2800, 0x0066cdaa, // mediumaquamarine -0xb4a44d5b, 0x09952800, 0x000000cd, // mediumblue -0xb4a44d5b, 0x3e434248, 0x00ba55d3, // mediumorchid -0xb4a44d5b, 0x42b2830a, 0x009370db, // mediumpurple -0xb4a44d5b, 0x4ca13c8b, 0x15c00000, 0x003cb371, // mediumseagreen -0xb4a44d5b, 0x4d81a145, 0x32a50000, 0x007b68ee, // mediumslateblue -0xb4a44d5b, 0x4e124b8f, 0x1e452b80, 0x0000fa9a, // mediumspringgreen -0xb4a44d5b, 0x52b28d5f, 0x26650000, 0x0048d1cc, // mediumturquoise -0xb4a44d5b, 0x592f6169, 0x48a40000, 0x00c71585, // mediumvioletred -0xb524724f, 0x2282654a, 0x00191970, // midnightblue -0xb52ea0e5, 0x142d0000, 0x00f5fffa, // mintcream -0xb533a665, 0x3e650000, 0x00ffe4e1, // mistyrose -0xb5e31867, 0x25c00000, 0x00ffe4b5, // moccasin -0xb8360a9f, 0x5d09a140, 0x00ffdead, // navajowhite -0xb836c800, 0x00000080, // navy -0xbd846047, 0x14000000, 0x00fdf5e6, // oldlace -0xbd89b140, 0x00808000, // olive -0xbd89b149, 0x48220000, 0x006b8e23, // olivedrab -0xbe4171ca, 0x00ffa500, // orange -0xbe4171cb, 0x48a40000, 0x00ff4500, // orangered -0xbe434248, 0x00da70d6, // orchid -0xc02c29df, 0x3085749f, 0x10000000, 0x00eee8aa, // palegoldenrod -0xc02c29e5, 0x14ae0000, 0x0098fb98, // palegreen -0xc02c2d2b, 0x4a357a67, 0x14000000, 0x00afeeee, // paleturquoise -0xc02c2d93, 0x3d85a48b, 0x10000000, 0x00db7093, // palevioletred -0xc0300e43, 0x5d098000, 0x00ffefd5, // papayawhip -0xc0a11a21, 0x54c60000, 0x00ffdab9, // peachpuff -0xc0b2a800, 0x00cd853f, // peru -0xc12e5800, 0x00ffc0cb, // pink -0xc1956800, 0x00dda0dd, // plum -0xc1f72165, 0x09952800, 0x00b0e0e6, // powderblue -0xc2b2830a, 0x00800080, // purple -0xc8a40000, 0x00ff0000, // red -0xc9f3c8a5, 0x3eee0000, 0x00bc8f8f, // rosybrown -0xc9f90b05, 0x32a50000, 0x004169e1, // royalblue -0xcc24230b, 0x0a4fbb80, 0x008b4513, // saddlebrown -0xcc2c6bdc, 0x00fa8072, // salmon -0xcc2e2645, 0x49f77000, 0x00f4a460, // sandybrown -0xcca13c8b, 0x15c00000, 0x002e8b57, // seagreen -0xcca19a0b, 0x31800000, 0x00fff5ee, // seashell -0xcd257382, 0x00a0522d, // sienna -0xcd2cb164, 0x00c0c0c0, // silver -0xcd79132b, 0x14000000, 0x0087ceeb, // skyblue -0xcd81a145, 0x32a50000, 0x006a5acd, // slateblue -0xcd81a14f, 0x48390000, 0x00708090, // slategray -0xcdcfb800, 0x00fffafa, // snow -0xce124b8f, 0x1e452b80, 0x0000ff7f, // springgreen -0xce852b05, 0x32a50000, 0x004682b4, // steelblue -0xd02e0000, 0x00d2b48c, // tan -0xd0a16000, 0x00008080, // teal -0xd1099d19, 0x14000000, 0x00d8bfd8, // thistle -0xd1ed0d1e, 0x00ff6347, // tomato -0xd2b28d5f, 0x26650000, 0x0040e0d0, // turquoise -0xd92f6168, 0x00ee82ee, // violet -0xdd050d00, 0x00f5deb3, // wheat -0xdd09a140, 0x00ffffff, // white -0xdd09a167, 0x35eb2800, 0x00f5f5f5, // whitesmoke -0xe4ac63ee, 0x00ffff00, // yellow -0xe4ac63ef, 0x1e452b80, 0x009acd32 // yellowgreen -}; // original = 2505 : replacement = 1616 - - -const char* SkParse::FindNamedColor(const char* name, size_t len, SkColor* color) { - const char* namePtr = name; - unsigned int sixMatches[4]; - unsigned int* sixMatchPtr = sixMatches; - bool first = true; - bool last = false; - char ch; - do { - unsigned int sixMatch = 0; - for (int chIndex = 0; chIndex < 6; chIndex++) { - sixMatch <<= 5; - ch = *namePtr | 0x20; - if (ch < 'a' || ch > 'z') - ch = 0; - else { - ch = ch - 'a' + 1; - namePtr++; - } - sixMatch |= ch ; // turn 'A' (0x41) into 'a' (0x61); - } - sixMatch <<= 1; - sixMatch |= 1; - if (first) { - sixMatch |= 0x80000000; - first = false; - } - ch = *namePtr | 0x20; - last = ch < 'a' || ch > 'z'; - if (last) - sixMatch &= ~1; - len -= 6; - *sixMatchPtr++ = sixMatch; - } while (last == false && len > 0); - const int colorNameSize = sizeof(gColorNames) / sizeof(unsigned int); - int lo = 0; - int hi = colorNameSize - 3; // back off to beginning of yellowgreen - while (lo <= hi) { - int mid = (hi + lo) >> 1; - while ((int) gColorNames[mid] >= 0) - --mid; - sixMatchPtr = sixMatches; - while (gColorNames[mid] == *sixMatchPtr) { - ++mid; - if ((*sixMatchPtr & 1) == 0) { // last - *color = gColorNames[mid] | 0xFF000000; - return namePtr; - } - ++sixMatchPtr; - } - int sixMask = *sixMatchPtr & ~0x80000000; - int midMask = gColorNames[mid] & ~0x80000000; - if (sixMask > midMask) { - lo = mid + 2; // skip color - while ((int) gColorNames[lo] >= 0) - ++lo; - } else if (hi == mid) - return NULL; - else - hi = mid; - } - return NULL; -} - -// !!! move to char utilities -//static int count_separators(const char* str, const char* sep) { -// char c; -// int separators = 0; -// while ((c = *str++) != '\0') { -// if (strchr(sep, c) == NULL) -// continue; -// do { -// if ((c = *str++) == '\0') -// goto goHome; -// } while (strchr(sep, c) != NULL); -// separators++; -// } -//goHome: -// return separators; -//} - -static inline unsigned nib2byte(unsigned n) -{ - SkASSERT((n & ~0xF) == 0); - return (n << 4) | n; -} - -const char* SkParse::FindColor(const char* value, SkColor* colorPtr) { - unsigned int oldAlpha = SkColorGetA(*colorPtr); - if (value[0] == '#') { - uint32_t hex; - const char* end = SkParse::FindHex(value + 1, &hex); -// SkASSERT(end); - if (end == NULL) - return end; - size_t len = end - value - 1; - if (len == 3 || len == 4) { - unsigned a = len == 4 ? nib2byte(hex >> 12) : oldAlpha; - unsigned r = nib2byte((hex >> 8) & 0xF); - unsigned g = nib2byte((hex >> 4) & 0xF); - unsigned b = nib2byte(hex & 0xF); - *colorPtr = SkColorSetARGB(a, r, g, b); - return end; - } else if (len == 6 || len == 8) { - if (len == 6) - hex |= oldAlpha << 24; - *colorPtr = hex; - return end; - } else { -// SkASSERT(0); - return NULL; - } -// } else if (strchr(value, ',')) { -// SkScalar array[4]; -// int count = count_separators(value, ",") + 1; // !!! count commas, add 1 -// SkASSERT(count == 3 || count == 4); -// array[0] = SK_Scalar1 * 255; -// const char* end = SkParse::FindScalars(value, &array[4 - count], count); -// if (end == NULL) -// return NULL; - // !!! range check for errors? -// *colorPtr = SkColorSetARGB(SkScalarRound(array[0]), SkScalarRound(array[1]), -// SkScalarRound(array[2]), SkScalarRound(array[3])); -// return end; - } else - return FindNamedColor(value, strlen(value), colorPtr); -} - -#ifdef SK_DEBUG -void SkParse::TestColor() { - if (false) - CreateTable(); // regenerates data table in the output window - SkColor result; - int index; - for (index = 0; index < colorNamesSize; index++) { - result = SK_ColorBLACK; - SkNameRGB nameRGB = colorNames[index]; - SkASSERT(FindColor(nameRGB.name, &result) != NULL); - SkASSERT(result == (SkColor) (nameRGB.rgb | 0xFF000000)); - } - for (index = 0; index < colorNamesSize; index++) { - result = SK_ColorBLACK; - SkNameRGB nameRGB = colorNames[index]; - char bad[24]; - size_t len = strlen(nameRGB.name); - memcpy(bad, nameRGB.name, len); - bad[len - 1] -= 1; - SkASSERT(FindColor(bad, &result) == false); - bad[len - 1] += 2; - SkASSERT(FindColor(bad, &result) == false); - } - result = SK_ColorBLACK; - SkASSERT(FindColor("lightGrey", &result)); - SkASSERT(result == 0xffd3d3d3); -// SkASSERT(FindColor("12,34,56,78", &result)); -// SkASSERT(result == ((12 << 24) | (34 << 16) | (56 << 8) | (78 << 0))); - result = SK_ColorBLACK; - SkASSERT(FindColor("#ABCdef", &result)); - SkASSERT(result == 0XFFABCdef); - SkASSERT(FindColor("#12ABCdef", &result)); - SkASSERT(result == 0X12ABCdef); - result = SK_ColorBLACK; - SkASSERT(FindColor("#123", &result)); - SkASSERT(result == 0Xff112233); - SkASSERT(FindColor("#abcd", &result)); - SkASSERT(result == 0Xaabbccdd); - result = SK_ColorBLACK; -// SkASSERT(FindColor("71,162,253", &result)); -// SkASSERT(result == ((0xFF << 24) | (71 << 16) | (162 << 8) | (253 << 0))); -} -#endif - diff --git a/skia/xml/SkXMLParser.cpp b/skia/xml/SkXMLParser.cpp deleted file mode 100644 index da33307..0000000 --- a/skia/xml/SkXMLParser.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* libs/graphics/xml/SkXMLParser.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include "SkXMLParser.h" - -static char const* const gErrorStrings[] = { - "empty or missing file ", - "unknown element ", - "unknown attribute name ", - "error in attribute value ", - "duplicate ID ", - "unknown error " -}; - -SkXMLParserError::SkXMLParserError() : fCode(kNoError), fLineNumber(-1), - fNativeCode(-1) -{ - reset(); -} - -SkXMLParserError::~SkXMLParserError() -{ - // need a virtual destructor for our subclasses -} - -void SkXMLParserError::getErrorString(SkString* str) const -{ - SkASSERT(str); - SkString temp; - if (fCode != kNoError) { - if ((unsigned)fCode < SK_ARRAY_COUNT(gErrorStrings)) - temp.set(gErrorStrings[fCode - 1]); - temp.append(fNoun); - } else - SkXMLParser::GetNativeErrorString(fNativeCode, &temp); - str->append(temp); -} - -void SkXMLParserError::reset() { - fCode = kNoError; - fLineNumber = -1; - fNativeCode = -1; -} - - -//////////////// - -SkXMLParser::SkXMLParser(SkXMLParserError* parserError) : fParser(NULL), fError(parserError) -{ -} - -SkXMLParser::~SkXMLParser() -{ -} - -bool SkXMLParser::startElement(const char elem[]) -{ - return this->onStartElement(elem); -} - -bool SkXMLParser::addAttribute(const char name[], const char value[]) -{ - return this->onAddAttribute(name, value); -} - -bool SkXMLParser::endElement(const char elem[]) -{ - return this->onEndElement(elem); -} - -bool SkXMLParser::text(const char text[], int len) -{ - return this->onText(text, len); -} - -//////////////////////////////////////////////////////////////////////////////// - -bool SkXMLParser::onStartElement(const char elem[]) {return false; } -bool SkXMLParser::onAddAttribute(const char name[], const char value[]) {return false; } -bool SkXMLParser::onEndElement(const char elem[]) { return false; } -bool SkXMLParser::onText(const char text[], int len) {return false; } diff --git a/skia/xml/SkXMLPullParser.cpp b/skia/xml/SkXMLPullParser.cpp deleted file mode 100644 index 5df75b7..0000000 --- a/skia/xml/SkXMLPullParser.cpp +++ /dev/null @@ -1,132 +0,0 @@ -#include "SkXMLParser.h" -#include "SkStream.h" - -static void reset(SkXMLPullParser::Curr* curr) -{ - curr->fEventType = SkXMLPullParser::ERROR; - curr->fName = ""; - curr->fAttrInfoCount = 0; - curr->fIsWhitespace = false; -} - -SkXMLPullParser::SkXMLPullParser() : fStream(NULL) -{ - fCurr.fEventType = ERROR; - fDepth = -1; -} - -SkXMLPullParser::SkXMLPullParser(SkStream* stream) : fStream(NULL) -{ - fCurr.fEventType = ERROR; - fDepth = 0; - - this->setStream(stream); -} - -SkXMLPullParser::~SkXMLPullParser() -{ - this->setStream(NULL); -} - -SkStream* SkXMLPullParser::setStream(SkStream* stream) -{ - if (fStream && !stream) - this->onExit(); - - SkRefCnt_SafeAssign(fStream, stream); - - if (fStream) - { - fCurr.fEventType = START_DOCUMENT; - this->onInit(); - } - else - { - fCurr.fEventType = ERROR; - } - fDepth = 0; - - return fStream; -} - -SkXMLPullParser::EventType SkXMLPullParser::nextToken() -{ - switch (fCurr.fEventType) { - case ERROR: - case END_DOCUMENT: - break; - case END_TAG: - fDepth -= 1; - // fall through - default: - reset(&fCurr); - fCurr.fEventType = this->onNextToken(); - break; - } - - switch (fCurr.fEventType) { - case START_TAG: - fDepth += 1; - break; - default: - break; - } - - return fCurr.fEventType; -} - -const char* SkXMLPullParser::getName() -{ - switch (fCurr.fEventType) { - case START_TAG: - case END_TAG: - return fCurr.fName; - default: - return NULL; - } -} - -const char* SkXMLPullParser::getText() -{ - switch (fCurr.fEventType) { - case TEXT: - case IGNORABLE_WHITESPACE: - return fCurr.fName; - default: - return NULL; - } -} - -bool SkXMLPullParser::isWhitespace() -{ - switch (fCurr.fEventType) { - case IGNORABLE_WHITESPACE: - return true; - case TEXT: - case CDSECT: - return fCurr.fIsWhitespace; - default: - return false; // unknown/illegal - } -} - -int SkXMLPullParser::getAttributeCount() -{ - return fCurr.fAttrInfoCount; -} - -void SkXMLPullParser::getAttributeInfo(int index, AttrInfo* info) -{ - SkASSERT((unsigned)index < (unsigned)fCurr.fAttrInfoCount); - - if (info) - *info = fCurr.fAttrInfos[index]; -} - -bool SkXMLPullParser::onEntityReplacement(const char name[], - SkString* replacement) -{ - // TODO: std 5 entities here - return false; -} - diff --git a/skia/xml/SkXMLWriter.cpp b/skia/xml/SkXMLWriter.cpp deleted file mode 100644 index 4685d81..0000000 --- a/skia/xml/SkXMLWriter.cpp +++ /dev/null @@ -1,342 +0,0 @@ -/* libs/graphics/xml/SkXMLWriter.cpp -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -#include "SkXMLWriter.h" -#include "SkStream.h" - -SkXMLWriter::SkXMLWriter(bool doEscapeMarkup) : fDoEscapeMarkup(doEscapeMarkup) -{ -} - -SkXMLWriter::~SkXMLWriter() -{ - SkASSERT(fElems.count() == 0); -} - -void SkXMLWriter::flush() -{ - while (fElems.count()) - this->endElement(); -} - -void SkXMLWriter::addAttribute(const char name[], const char value[]) -{ - this->addAttributeLen(name, value, strlen(value)); -} - -void SkXMLWriter::addS32Attribute(const char name[], int32_t value) -{ - SkString tmp; - tmp.appendS32(value); - this->addAttribute(name, tmp.c_str()); -} - -void SkXMLWriter::addHexAttribute(const char name[], uint32_t value, int minDigits) -{ - SkString tmp("0x"); - tmp.appendHex(value, minDigits); - this->addAttribute(name, tmp.c_str()); -} - -void SkXMLWriter::addScalarAttribute(const char name[], SkScalar value) -{ - SkString tmp; - tmp.appendScalar(value); - this->addAttribute(name, tmp.c_str()); -} - -void SkXMLWriter::doEnd(Elem* elem) -{ - delete elem; -} - -bool SkXMLWriter::doStart(const char name[], size_t length) -{ - int level = fElems.count(); - bool firstChild = level > 0 && !fElems[level-1]->fHasChildren; - if (firstChild) - fElems[level-1]->fHasChildren = true; - Elem** elem = fElems.push(); - *elem = new Elem; - (*elem)->fName.set(name, length); - (*elem)->fHasChildren = 0; - return firstChild; -} - -SkXMLWriter::Elem* SkXMLWriter::getEnd() -{ - Elem* elem; - fElems.pop(&elem); - return elem; -} - -const char* SkXMLWriter::getHeader() -{ - static const char gHeader[] = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"; - return gHeader; -} - -void SkXMLWriter::startElement(const char name[]) -{ - this->startElementLen(name, strlen(name)); -} - -static const char* escape_char(char c, char storage[2]) -{ - static const char* gEscapeChars[] = { - "<<", - ">>", - //"\""", - //"''", - "&&" - }; - - const char** array = gEscapeChars; - for (unsigned i = 0; i < SK_ARRAY_COUNT(gEscapeChars); i++) - { - if (array[i][0] == c) - return &array[i][1]; - } - storage[0] = c; - storage[1] = 0; - return storage; -} - -static size_t escape_markup(char dst[], const char src[], size_t length) -{ - size_t extra = 0; - const char* stop = src + length; - - while (src < stop) - { - char orig[2]; - const char* seq = escape_char(*src, orig); - size_t seqSize = strlen(seq); - - if (dst) - { - memcpy(dst, seq, seqSize); - dst += seqSize; - } - - // now record the extra size needed - extra += seqSize - 1; // minus one to subtract the original char - - // bump to the next src char - src += 1; - } - return extra; -} - -void SkXMLWriter::addAttributeLen(const char name[], const char value[], size_t length) -{ - SkString valueStr; - - if (fDoEscapeMarkup) - { - size_t extra = escape_markup(NULL, value, length); - if (extra) - { - valueStr.resize(length + extra); - (void)escape_markup(valueStr.writable_str(), value, length); - value = valueStr.c_str(); - length += extra; - } - } - this->onAddAttributeLen(name, value, length); -} - -void SkXMLWriter::startElementLen(const char elem[], size_t length) -{ - this->onStartElementLen(elem, length); -} - -//////////////////////////////////////////////////////////////////////////////////////// - -static void write_dom(const SkDOM& dom, const SkDOM::Node* node, SkXMLWriter* w, bool skipRoot) -{ - if (!skipRoot) - { - w->startElement(dom.getName(node)); - - SkDOM::AttrIter iter(dom, node); - const char* name; - const char* value; - while ((name = iter.next(&value)) != NULL) - w->addAttribute(name, value); - } - - node = dom.getFirstChild(node, NULL); - while (node) - { - write_dom(dom, node, w, false); - node = dom.getNextSibling(node, NULL); - } - - if (!skipRoot) - w->endElement(); -} - -void SkXMLWriter::writeDOM(const SkDOM& dom, const SkDOM::Node* node, bool skipRoot) -{ - if (node) - write_dom(dom, node, this, skipRoot); -} - -void SkXMLWriter::writeHeader() -{ -} - -// SkXMLStreamWriter - -static void tab(SkWStream& stream, int level) -{ - for (int i = 0; i < level; i++) - stream.writeText("\t"); -} - -SkXMLStreamWriter::SkXMLStreamWriter(SkWStream* stream) : fStream(*stream) -{ -} - -SkXMLStreamWriter::~SkXMLStreamWriter() -{ - this->flush(); -} - -void SkXMLStreamWriter::onAddAttributeLen(const char name[], const char value[], size_t length) -{ - SkASSERT(!fElems.top()->fHasChildren); - fStream.writeText(" "); - fStream.writeText(name); - fStream.writeText("=\""); - fStream.write(value, length); - fStream.writeText("\""); -} - -void SkXMLStreamWriter::onEndElement() -{ - Elem* elem = getEnd(); - if (elem->fHasChildren) - { - tab(fStream, fElems.count()); - fStream.writeText("</"); - fStream.writeText(elem->fName.c_str()); - fStream.writeText(">"); - } - else - fStream.writeText("/>"); - fStream.newline(); - doEnd(elem); -} - -void SkXMLStreamWriter::onStartElementLen(const char name[], size_t length) -{ - int level = fElems.count(); - if (this->doStart(name, length)) - { - // the first child, need to close with > - fStream.writeText(">"); - fStream.newline(); - } - - tab(fStream, level); - fStream.writeText("<"); - fStream.write(name, length); -} - -void SkXMLStreamWriter::writeHeader() -{ - const char* header = getHeader(); - fStream.write(header, strlen(header)); - fStream.newline(); -} - -//////////////////////////////////////////////////////////////////////////////////////////////// - -#include "SkXMLParser.h" - -SkXMLParserWriter::SkXMLParserWriter(SkXMLParser* parser) - : SkXMLWriter(false), fParser(*parser) -{ -} - -SkXMLParserWriter::~SkXMLParserWriter() -{ - this->flush(); -} - -void SkXMLParserWriter::onAddAttributeLen(const char name[], const char value[], size_t length) -{ - SkASSERT(fElems.count() == 0 || !fElems.top()->fHasChildren); - SkString str(value, length); - fParser.addAttribute(name, str.c_str()); -} - -void SkXMLParserWriter::onEndElement() -{ - Elem* elem = this->getEnd(); - fParser.endElement(elem->fName.c_str()); - this->doEnd(elem); -} - -void SkXMLParserWriter::onStartElementLen(const char name[], size_t length) -{ - (void)this->doStart(name, length); - SkString str(name, length); - fParser.startElement(str.c_str()); -} - - -//////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - -#ifdef SK_DEBUG - -void SkXMLStreamWriter::UnitTest() -{ -#ifdef SK_SUPPORT_UNITTEST - SkDebugWStream s; - SkXMLStreamWriter w(&s); - - w.startElement("elem0"); - w.addAttribute("hello", "world"); - w.addS32Attribute("dec", 42); - w.addHexAttribute("hex", 0x42, 3); -#ifdef SK_SCALAR_IS_FLOAT - w.addScalarAttribute("scalar", -4.2f); -#endif - w.startElement("elem1"); - w.endElement(); - w.startElement("elem1"); - w.addAttribute("name", "value"); - w.endElement(); - w.startElement("elem1"); - w.startElement("elem2"); - w.startElement("elem3"); - w.addAttribute("name", "value"); - w.endElement(); - w.endElement(); - w.startElement("elem2"); - w.endElement(); - w.endElement(); - w.endElement(); -#endif -} - -#endif - |