summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@google.com>2014-07-29 15:51:12 -0400
committerBehdad Esfahbod <behdad@google.com>2014-07-29 15:51:12 -0400
commitc924dd126db5d029af407ae6dd1a41c3652a6a64 (patch)
tree5cd9a758ab0fac08804c141c602a420c481f10a2
parent09f1901d6befcab49ed46cb77151a5d4af14a3b9 (diff)
downloadandroid_frameworks_minikin-c924dd126db5d029af407ae6dd1a41c3652a6a64.tar.gz
android_frameworks_minikin-c924dd126db5d029af407ae6dd1a41c3652a6a64.tar.bz2
android_frameworks_minikin-c924dd126db5d029af407ae6dd1a41c3652a6a64.zip
Remove CSS string doLayout entrypoint and supporting code
All usage is ported to the new doLayout() API now. Bug: 16651112 Change-Id: I2c959138a69853b5e30098889d771fe5f4cfaa66
-rw-r--r--include/minikin/CssParse.h108
-rw-r--r--include/minikin/Layout.h5
-rw-r--r--libs/minikin/Android.mk1
-rw-r--r--libs/minikin/CssParse.cpp210
-rw-r--r--libs/minikin/Layout.cpp45
5 files changed, 0 insertions, 369 deletions
diff --git a/include/minikin/CssParse.h b/include/minikin/CssParse.h
deleted file mode 100644
index 259b933..0000000
--- 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 <map>
-#include <string>
-
-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<CssTag, CssValue> mMap;
-};
-
-} // namespace android
-
-#endif // MINIKIN_CSS_PARSE_H
diff --git a/include/minikin/Layout.h b/include/minikin/Layout.h
index cd08e00..1a0df99 100644
--- a/include/minikin/Layout.h
+++ b/include/minikin/Layout.h
@@ -21,7 +21,6 @@
#include <vector>
-#include <minikin/CssParse.h>
#include <minikin/FontCollection.h>
#include <minikin/MinikinFontFreeType.h>
@@ -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 fde2cbb..386dc2b 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 057dab7..0000000
--- 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 <string>
-#include <cstdlib>
-#include <cstring>
-#include <cstdio> // for sprintf - for debugging
-
-#include <minikin/CssParse.h>
-#include <minikin/FontFamily.h>
-
-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<CssTag, CssValue>(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<CssTag, CssValue>::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<CssTag, CssValue>::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 2a396dc..f34d1b9 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) {
@@ -496,30 +475,6 @@ static void clearHbFonts(LayoutContext* ctx) {
}
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);