blob: ebc54029d1c59ddc7267311d45fdb2a8607722f0 [file] [log] [blame]
package com.airbnb.lottie.parser;
import com.airbnb.lottie.LottieComposition;
import com.airbnb.lottie.model.FontCharacter;
import com.airbnb.lottie.model.content.ShapeGroup;
import com.airbnb.lottie.parser.moshi.JsonReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
class FontCharacterParser {
private static final JsonReader.Options NAMES = JsonReader.Options.of(
"ch",
"size",
"w",
"style",
"fFamily",
"data"
);
private static final JsonReader.Options DATA_NAMES = JsonReader.Options.of("shapes");
private FontCharacterParser() {
}
static FontCharacter parse(
JsonReader reader, LottieComposition composition) throws IOException {
char character = '\0';
float size = 0;
float width = 0;
String style = null;
String fontFamily = null;
List<ShapeGroup> shapes = new ArrayList<>();
reader.beginObject();
while (reader.hasNext()) {
switch (reader.selectName(NAMES)) {
case 0:
character = reader.nextString().charAt(0);
break;
case 1:
size = reader.nextFloat();
break;
case 2:
width = reader.nextFloat();
break;
case 3:
style = reader.nextString();
break;
case 4:
fontFamily = reader.nextString();
break;
case 5:
reader.beginObject();
while (reader.hasNext()) {
switch (reader.selectName(DATA_NAMES)) {
case 0:
reader.beginArray();
while (reader.hasNext()) {
shapes.add((ShapeGroup) ContentModelParser.parse(reader, composition));
}
reader.endArray();
break;
default:
reader.skipName();
reader.skipValue();
}
}
reader.endObject();
break;
default:
reader.skipName();
reader.skipValue();
}
}
reader.endObject();
return new FontCharacter(shapes, character, size, width, style, fontFamily);
}
}