diff --git a/include/minikin/CssParse.h b/include/minikin/CssParse.h deleted file mode 100644 index 259b933a54adf3d128008e824928b91ccc962f39..0000000000000000000000000000000000000000 --- a/include/minikin/CssParse.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2013 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 MINIKIN_CSS_PARSE_H -#define MINIKIN_CSS_PARSE_H - -#include -#include - -namespace android { - -enum CssTag { - unknown, - fontScaleX, - fontSize, - fontSkewX, - fontStyle, - fontWeight, - cssLang, - letterSpacing, - minikinBidi, - minikinHinting, - minikinVariant, - paintFlags, -}; - -const std::string cssTagNames[] = { - "unknown", - "font-scale-x", - "font-size", - "font-skew-x", - "font-style", - "font-weight", - "lang", - "letter-spacing", - "-minikin-bidi", - "-minikin-hinting", - "-minikin-variant", - "-paint-flags", -}; - -class CssValue { -public: - enum Type { - UNKNOWN, - DOUBLE, - STRING - }; - enum Units { - SCALAR, - PERCENT, - PX, - EM - }; - CssValue() : mType(UNKNOWN) { } - explicit CssValue(double v) : - mType(DOUBLE), doubleValue(v), mUnits(SCALAR) { } - Type getType() const { return mType; } - double getDoubleValue() const { return doubleValue; } - int32_t getIntValue() const { return doubleValue; } - uint32_t getUintValue() const { return doubleValue; } - std::string getStringValue() const { return stringValue; } - std::string toString(CssTag tag) const; - void setDoubleValue(double v) { - mType = DOUBLE; - doubleValue = v; - } - void setStringValue(const std::string& v) { - mType = STRING; - stringValue = v; - } -private: - Type mType; - double doubleValue; - std::string stringValue; - Units mUnits; -}; - -class CssProperties { -public: - bool parse(const std::string& str); - bool hasTag(CssTag tag) const; - CssValue value(CssTag tag) const; - - // primarily for debugging - std::string toString() const; -private: - // We'll use STL map for now but can replace it with something - // more efficient if needed - std::map mMap; -}; - -} // namespace android - -#endif // MINIKIN_CSS_PARSE_H diff --git a/include/minikin/Layout.h b/include/minikin/Layout.h index cd08e00283cc16a659299fd71c128daaa478592e..1a0df99e671b5ca74487593b0870533b8ff23a18 100644 --- a/include/minikin/Layout.h +++ b/include/minikin/Layout.h @@ -21,7 +21,6 @@ #include -#include #include #include @@ -68,10 +67,6 @@ public: void dump() const; void setFontCollection(const FontCollection* collection); - // Deprecated. Will be removed. - void doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize, - const std::string& css); - void doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize, int bidiFlags, const FontStyle &style, const MinikinPaint &paint); diff --git a/libs/minikin/Android.mk b/libs/minikin/Android.mk index fde2cbbbf4dd2038564f86330500353c3d64ff84..386dc2bee1c74143155e3913e19b3012dc9510cd 100644 --- a/libs/minikin/Android.mk +++ b/libs/minikin/Android.mk @@ -20,7 +20,6 @@ include external/stlport/libstlport.mk LOCAL_SRC_FILES := \ AnalyzeStyle.cpp \ CmapCoverage.cpp \ - CssParse.cpp \ FontCollection.cpp \ FontFamily.cpp \ GraphemeBreak.cpp \ diff --git a/libs/minikin/CssParse.cpp b/libs/minikin/CssParse.cpp deleted file mode 100644 index 057dab7e82f3946ca614e7e963ab459bbe7a15c8..0000000000000000000000000000000000000000 --- a/libs/minikin/CssParse.cpp +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (C) 2013 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 -#include -#include -#include // for sprintf - for debugging - -#include -#include - -using std::map; -using std::pair; -using std::string; - -namespace android { - -static bool strEqC(const string str, size_t off, size_t len, const char* str2) { - if (len != strlen(str2)) return false; - return !memcmp(str.data() + off, str2, len); -} - -static CssTag parseTag(const string str, size_t off, size_t len) { - if (len == 0) return unknown; - char c = str[off]; - if (c == 'f') { - if (strEqC(str, off, len, "font-scale-x")) return fontScaleX; - if (strEqC(str, off, len, "font-size")) return fontSize; - if (strEqC(str, off, len, "font-skew-x")) return fontSkewX; - if (strEqC(str, off, len, "font-weight")) return fontWeight; - if (strEqC(str, off, len, "font-style")) return fontStyle; - } else if (c == 'l') { - if (strEqC(str, off, len, "lang")) return cssLang; - if (strEqC(str, off, len, "letter-spacing")) return letterSpacing; - } else if (c == '-') { - if (strEqC(str, off, len, "-minikin-bidi")) return minikinBidi; - if (strEqC(str, off, len, "-minikin-hinting")) return minikinHinting; - if (strEqC(str, off, len, "-minikin-variant")) return minikinVariant; - if (strEqC(str, off, len, "-paint-flags")) return paintFlags; - } - return unknown; -} - -static bool parseStringValue(const string& str, size_t* off, size_t len, CssTag tag, CssValue* v) { - const char* data = str.data(); - size_t beg = *off; - if (beg == len) return false; - char first = data[beg]; - bool quoted = false; - if (first == '\'' || first == '\"') { - quoted = true; - beg++; - } - size_t end; - for (end = beg; end < len; end++) { - char c = data[end]; - if (quoted && c == first) { - v->setStringValue(std::string(str, beg, end - beg)); - *off = end + 1; - return true; - } else if (!quoted && (c == ';' || c == ' ')) { - break; - } // TODO: deal with backslash escape, but only important for real strings - } - v->setStringValue(std::string(str, beg, end - beg)); - *off = end; - return true; -} - -static bool parseValue(const string& str, size_t* off, size_t len, CssTag tag, CssValue* v) { - if (tag == cssLang) { - return parseStringValue(str, off, len, tag, v); - } - const char* data = str.data(); - char* endptr; - double fv = strtod(data + *off, &endptr); - if (endptr == data + *off) { - // No numeric value, try tag-specific idents - size_t end; - for (end = *off; end < len; end++) { - char c = data[end]; - if (c != '-' && !(c >= 'a' && c <= 'z') && - !(c >= '0' && c <= '9')) break; - } - size_t taglen = end - *off; - endptr += taglen; - if (tag == fontStyle) { - if (strEqC(str, *off, taglen, "normal")) { - fv = 0; - } else if (strEqC(str, *off, taglen, "italic")) { - fv = 1; - // TODO: oblique, but who really cares? - } else { - return false; - } - } else if (tag == fontWeight) { - if (strEqC(str, *off, taglen, "normal")) { - fv = 400; - } else if (strEqC(str, *off, taglen, "bold")) { - fv = 700; - } else { - return false; - } - } else if (tag == minikinVariant) { - if (strEqC(str, *off, taglen, "compact")) { - fv = VARIANT_COMPACT; - } else if (strEqC(str, *off, taglen, "elegant")) { - fv = VARIANT_ELEGANT; - } - } else { - return false; - } - } - v->setDoubleValue(fv); - *off = endptr - data; - return true; -} - -string CssValue::toString(CssTag tag) const { - if (mType == DOUBLE) { - if (tag == fontStyle) { - return doubleValue ? "italic" : "normal"; - } else if (tag == minikinVariant) { - if (doubleValue == VARIANT_COMPACT) return "compact"; - if (doubleValue == VARIANT_ELEGANT) return "elegant"; - } - char buf[64]; - sprintf(buf, "%g", doubleValue); - return string(buf); - } else if (mType == STRING) { - return stringValue; // should probably quote - } - return ""; -} - -bool CssProperties::parse(const string& str) { - size_t len = str.size(); - size_t i = 0; - while (true) { - size_t j = i; - while (j < len && str[j] == ' ') j++; - if (j == len) break; - size_t k = str.find_first_of(':', j); - if (k == string::npos) { - return false; // error: junk after end - } - CssTag tag = parseTag(str, j, k - j); -#ifdef VERBOSE - printf("parseTag result %d, ijk %lu %lu %lu\n", tag, i, j, k); -#endif - if (tag == unknown) return false; // error: unknown tag - k++; // skip over colon - while (k < len && str[k] == ' ') k++; - if (k == len) return false; // error: missing value - CssValue v; - if (!parseValue(str, &k, len, tag, &v)) break; -#ifdef VERBOSE - printf("parseValue ok\n"); -#endif - mMap.insert(pair(tag, v)); - while (k < len && str[k] == ' ') k++; - if (k < len) { - if (str[k] != ';') return false; - k++; - } - i = k; - } - return true; -} - -bool CssProperties::hasTag(CssTag tag) const { - return (mMap.find(tag) != mMap.end()); -} - -CssValue CssProperties::value(CssTag tag) const { - map::const_iterator it = mMap.find(tag); - if (it == mMap.end()) { - CssValue unknown; - return unknown; - } else { - return it->second; - } -} - -string CssProperties::toString() const { - string result; - for (map::const_iterator it = mMap.begin(); - it != mMap.end(); it++) { - result += cssTagNames[it->first]; - result += ": "; - result += it->second.toString(it->first); - result += ";\n"; - } - return result; -} - -} // namespace android diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp index 2a396dcc774d892b7b93f7575d701be5b0d27bf2..f34d1b9f19b0f6df5c35d629b958fe59bdbd91e0 100644 --- a/libs/minikin/Layout.cpp +++ b/libs/minikin/Layout.cpp @@ -354,27 +354,6 @@ int Layout::findFace(FakedFont face, LayoutContext* ctx) { return ix; } -static FontStyle styleFromCss(const CssProperties &props) { - int weight = 4; - if (props.hasTag(fontWeight)) { - weight = props.value(fontWeight).getIntValue() / 100; - } - bool italic = false; - if (props.hasTag(fontStyle)) { - italic = props.value(fontStyle).getIntValue() != 0; - } - FontLanguage lang; - if (props.hasTag(cssLang)) { - string langStr = props.value(cssLang).getStringValue(); - lang = FontLanguage(langStr.c_str(), langStr.size()); - } - int variant = 0; - if (props.hasTag(minikinVariant)) { - variant = props.value(minikinVariant).getIntValue(); - } - return FontStyle(lang, variant, weight, italic); -} - static hb_script_t codePointToScript(hb_codepoint_t codepoint) { static hb_unicode_funcs_t* u = 0; if (!u) { @@ -495,30 +474,6 @@ static void clearHbFonts(LayoutContext* ctx) { ctx->hbFonts.clear(); } -void Layout::doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize, - const string& css) { - - CssProperties props; - props.parse(css); - - FontStyle style = styleFromCss(props); - MinikinPaint paint; - - paint.size = props.value(fontSize).getDoubleValue(); - paint.scaleX = props.hasTag(fontScaleX) - ? props.value(fontScaleX).getDoubleValue() : 1; - paint.skewX = props.hasTag(fontSkewX) - ? props.value(fontSkewX).getDoubleValue() : 0; - paint.letterSpacing = props.hasTag(letterSpacing) - ? props.value(letterSpacing).getDoubleValue() : 0; - paint.paintFlags = props.hasTag(paintFlags) - ? props.value(paintFlags).getUintValue() : 0; - - int bidiFlags = props.hasTag(minikinBidi) ? props.value(minikinBidi).getIntValue() : 0; - - doLayout(buf, start, count, bufSize, bidiFlags, style, paint); -} - void Layout::doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize, int bidiFlags, const FontStyle &style, const MinikinPaint &paint) { AutoMutex _l(gMinikinLock);