static void output_thesisdetails( fields *info, FILE *outptr, int type ) { char *tag; int i, n; if ( type==TYPE_PHDTHESIS ) output_fixed( outptr, "b:ThesisType", "Ph.D. Thesis", 0 ); else if ( type==TYPE_MASTERSTHESIS ) output_fixed( outptr, "b:ThesisType", "Masters Thesis", 0 ); n = fields_num( info ); for ( i=0; i<n; ++i ) { tag = fields_tag( info, i, FIELDS_CHRP ); if ( strcasecmp( tag, "DEGREEGRANTOR" ) && strcasecmp( tag, "DEGREEGRANTOR:ASIS") & strcasecmp( tag, "DEGREEGRANTOR:CORP")) continue; output_item( info, outptr, "b:Institution", "", i, 0 ); } }
static void output_font(SkTypeface* face, const char* name, SkTypeface::Style style, const char* used, FILE* out) { int emSize = face->getUnitsPerEm() * 2; SkPaint paint; paint.setAntiAlias(true); paint.setTextAlign(SkPaint::kLeft_Align); paint.setTextEncoding(SkPaint::kUTF16_TextEncoding); paint.setTextSize(emSize); SkSafeUnref(paint.setTypeface(face)); SkTDArray<SkPath::Verb> verbs; SkTDArray<unsigned> charCodes; SkTDArray<SkScalar> widths; SkString ptsOut; output_path_data(paint, used, emSize, &ptsOut, &verbs, &charCodes, &widths); SkString fontnameStr(name); SkString strippedStr = strip_spaces(fontnameStr); strippedStr.appendf("%s", gStyleName[style]); const char* fontname = strippedStr.c_str(); fprintf(out, "const SkScalar %sPoints[] = {\n", fontname); ptsOut = strip_final(ptsOut); fprintf(out, "%s", ptsOut.c_str()); fprintf(out, "\n};\n\n"); fprintf(out, "const unsigned char %sVerbs[] = {\n", fontname); int verbCount = verbs.count(); int outChCount = 0; for (int index = 0; index < verbCount;) { SkPath::Verb verb = verbs[index]; SkASSERT(verb >= SkPath::kMove_Verb && verb <= SkPath::kDone_Verb); SkASSERT((unsigned) verb == (unsigned char) verb); fprintf(out, "%u", verb); if (++index < verbCount) { outChCount += 3; fprintf(out, "%c", ','); if (outChCount >= kMaxLineLength) { outChCount = 0; fprintf(out, "%c", '\n'); } else { fprintf(out, "%c", ' '); } } } fprintf(out, "\n};\n\n"); fprintf(out, "const unsigned %sCharCodes[] = {\n", fontname); int offsetCount = charCodes.count(); for (int index = 0; index < offsetCount;) { unsigned offset = charCodes[index]; fprintf(out, "%u", offset); if (++index < offsetCount) { outChCount += offset_str_len(offset) + 2; fprintf(out, "%c", ','); if (outChCount >= kMaxLineLength) { outChCount = 0; fprintf(out, "%c", '\n'); } else { fprintf(out, "%c", ' '); } } } fprintf(out, "\n};\n\n"); SkString widthsStr; fprintf(out, "const SkFixed %sWidths[] = {\n", fontname); for (int index = 0; index < offsetCount; ++index) { output_fixed(widths[index], emSize, &widthsStr); } widthsStr = strip_final(widthsStr); fprintf(out, "%s\n};\n\n", widthsStr.c_str()); fprintf(out, "const int %sCharCodesCount = (int) SK_ARRAY_COUNT(%sCharCodes);\n\n", fontname, fontname); SkPaint::FontMetrics metrics; paint.getFontMetrics(&metrics); fprintf(out, "const SkPaint::FontMetrics %sMetrics = {\n", fontname); SkString metricsStr; metricsStr.printf("0x%08x, ", metrics.fFlags); output_scalar(metrics.fTop, emSize, &metricsStr); output_scalar(metrics.fAscent, emSize, &metricsStr); output_scalar(metrics.fDescent, emSize, &metricsStr); output_scalar(metrics.fBottom, emSize, &metricsStr); output_scalar(metrics.fLeading, emSize, &metricsStr); output_scalar(metrics.fAvgCharWidth, emSize, &metricsStr); output_scalar(metrics.fMaxCharWidth, emSize, &metricsStr); output_scalar(metrics.fXMin, emSize, &metricsStr); output_scalar(metrics.fXMax, emSize, &metricsStr); output_scalar(metrics.fXHeight, emSize, &metricsStr); output_scalar(metrics.fCapHeight, emSize, &metricsStr); output_scalar(metrics.fUnderlineThickness, emSize, &metricsStr); output_scalar(metrics.fUnderlinePosition, emSize, &metricsStr); metricsStr = strip_final(metricsStr); fprintf(out, "%s\n};\n\n", metricsStr.c_str()); }