/*
 * Copyright 2015 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

// Auto-generated by create_test_font.cpp

static SkTestFontData gTestFonts[] = {
    {    LiberationMonoNormalPoints, LiberationMonoNormalVerbs,
         LiberationMonoNormalCharCodes, LiberationMonoNormalCharCodesCount, LiberationMonoNormalWidths,
         LiberationMonoNormalMetrics, "Toy Liberation Mono", SkFontStyle(400,5,SkFontStyle::kUpright_Slant)
    },
    {    LiberationMonoBoldPoints, LiberationMonoBoldVerbs,
         LiberationMonoBoldCharCodes, LiberationMonoBoldCharCodesCount, LiberationMonoBoldWidths,
         LiberationMonoBoldMetrics, "Toy Liberation Mono", SkFontStyle(700,5,SkFontStyle::kUpright_Slant)
    },
    {    LiberationMonoItalicPoints, LiberationMonoItalicVerbs,
         LiberationMonoItalicCharCodes, LiberationMonoItalicCharCodesCount, LiberationMonoItalicWidths,
         LiberationMonoItalicMetrics, "Toy Liberation Mono", SkFontStyle(400,5,SkFontStyle::kItalic_Slant)
    },
    {    LiberationMonoBoldItalicPoints, LiberationMonoBoldItalicVerbs,
         LiberationMonoBoldItalicCharCodes, LiberationMonoBoldItalicCharCodesCount, LiberationMonoBoldItalicWidths,
         LiberationMonoBoldItalicMetrics, "Toy Liberation Mono", SkFontStyle(700,5,SkFontStyle::kItalic_Slant)
    },
    {    LiberationSansNormalPoints, LiberationSansNormalVerbs,
         LiberationSansNormalCharCodes, LiberationSansNormalCharCodesCount, LiberationSansNormalWidths,
         LiberationSansNormalMetrics, "Toy Liberation Sans", SkFontStyle(400,5,SkFontStyle::kUpright_Slant)
    },
    {    LiberationSansBoldPoints, LiberationSansBoldVerbs,
         LiberationSansBoldCharCodes, LiberationSansBoldCharCodesCount, LiberationSansBoldWidths,
         LiberationSansBoldMetrics, "Toy Liberation Sans", SkFontStyle(700,5,SkFontStyle::kUpright_Slant)
    },
    {    LiberationSansItalicPoints, LiberationSansItalicVerbs,
         LiberationSansItalicCharCodes, LiberationSansItalicCharCodesCount, LiberationSansItalicWidths,
         LiberationSansItalicMetrics, "Toy Liberation Sans", SkFontStyle(400,5,SkFontStyle::kItalic_Slant)
    },
    {    LiberationSansBoldItalicPoints, LiberationSansBoldItalicVerbs,
         LiberationSansBoldItalicCharCodes, LiberationSansBoldItalicCharCodesCount, LiberationSansBoldItalicWidths,
         LiberationSansBoldItalicMetrics, "Toy Liberation Sans", SkFontStyle(700,5,SkFontStyle::kItalic_Slant)
    },
    {    LiberationSerifNormalPoints, LiberationSerifNormalVerbs,
         LiberationSerifNormalCharCodes, LiberationSerifNormalCharCodesCount, LiberationSerifNormalWidths,
         LiberationSerifNormalMetrics, "Toy Liberation Serif", SkFontStyle(400,5,SkFontStyle::kUpright_Slant)
    },
    {    LiberationSerifBoldPoints, LiberationSerifBoldVerbs,
         LiberationSerifBoldCharCodes, LiberationSerifBoldCharCodesCount, LiberationSerifBoldWidths,
         LiberationSerifBoldMetrics, "Toy Liberation Serif", SkFontStyle(700,5,SkFontStyle::kUpright_Slant)
    },
    {    LiberationSerifItalicPoints, LiberationSerifItalicVerbs,
         LiberationSerifItalicCharCodes, LiberationSerifItalicCharCodesCount, LiberationSerifItalicWidths,
         LiberationSerifItalicMetrics, "Toy Liberation Serif", SkFontStyle(400,5,SkFontStyle::kItalic_Slant)
    },
    {    LiberationSerifBoldItalicPoints, LiberationSerifBoldItalicVerbs,
         LiberationSerifBoldItalicCharCodes, LiberationSerifBoldItalicCharCodesCount, LiberationSerifBoldItalicWidths,
         LiberationSerifBoldItalicMetrics, "Toy Liberation Serif", SkFontStyle(700,5,SkFontStyle::kItalic_Slant)
    },
};

struct SubFont {
    const char* fFamilyName;
    const char* fStyleName;
    SkFontStyle fStyle;
    SkTestFontData& fFont;
    const char* fFile;
};

const SubFont gSubFonts[] = {
    { "monospace", "Normal", SkFontStyle(400,5,SkFontStyle::kUpright_Slant), gTestFonts[0], "LiberationMono-Regular.ttf" },
    { "monospace", "Bold", SkFontStyle(700,5,SkFontStyle::kUpright_Slant), gTestFonts[1], "LiberationMono-Bold.ttf" },
    { "monospace", "Italic", SkFontStyle(400,5,SkFontStyle::kItalic_Slant), gTestFonts[2], "LiberationMono-Italic.ttf" },
    { "monospace", "Bold Italic", SkFontStyle(700,5,SkFontStyle::kItalic_Slant), gTestFonts[3], "LiberationMono-BoldItalic.ttf" },
    { "sans-serif", "Normal", SkFontStyle(400,5,SkFontStyle::kUpright_Slant), gTestFonts[4], "LiberationSans-Regular.ttf" },
    { "sans-serif", "Bold", SkFontStyle(700,5,SkFontStyle::kUpright_Slant), gTestFonts[5], "LiberationSans-Bold.ttf" },
    { "sans-serif", "Italic", SkFontStyle(400,5,SkFontStyle::kItalic_Slant), gTestFonts[6], "LiberationSans-Italic.ttf" },
    { "sans-serif", "Bold Italic", SkFontStyle(700,5,SkFontStyle::kItalic_Slant), gTestFonts[7], "LiberationSans-BoldItalic.ttf" },
    { "serif", "Normal", SkFontStyle(400,5,SkFontStyle::kUpright_Slant), gTestFonts[8], "LiberationSerif-Regular.ttf" },
    { "serif", "Bold", SkFontStyle(700,5,SkFontStyle::kUpright_Slant), gTestFonts[9], "LiberationSerif-Bold.ttf" },
    { "serif", "Italic", SkFontStyle(400,5,SkFontStyle::kItalic_Slant), gTestFonts[10], "LiberationSerif-Italic.ttf" },
    { "serif", "Bold Italic", SkFontStyle(700,5,SkFontStyle::kItalic_Slant), gTestFonts[11], "LiberationSerif-BoldItalic.ttf" },
    { "Toy Liberation Mono", "Normal", SkFontStyle(400,5,SkFontStyle::kUpright_Slant), gTestFonts[0], "LiberationMono-Regular.ttf" },
    { "Toy Liberation Mono", "Bold", SkFontStyle(700,5,SkFontStyle::kUpright_Slant), gTestFonts[1], "LiberationMono-Bold.ttf" },
    { "Toy Liberation Mono", "Italic", SkFontStyle(400,5,SkFontStyle::kItalic_Slant), gTestFonts[2], "LiberationMono-Italic.ttf" },
    { "Toy Liberation Mono", "Bold Italic", SkFontStyle(700,5,SkFontStyle::kItalic_Slant), gTestFonts[3], "LiberationMono-BoldItalic.ttf" },
    { "Toy Liberation Sans", "Normal", SkFontStyle(400,5,SkFontStyle::kUpright_Slant), gTestFonts[4], "LiberationSans-Regular.ttf" },
    { "Toy Liberation Sans", "Bold", SkFontStyle(700,5,SkFontStyle::kUpright_Slant), gTestFonts[5], "LiberationSans-Bold.ttf" },
    { "Toy Liberation Sans", "Italic", SkFontStyle(400,5,SkFontStyle::kItalic_Slant), gTestFonts[6], "LiberationSans-Italic.ttf" },
    { "Toy Liberation Sans", "Bold Italic", SkFontStyle(700,5,SkFontStyle::kItalic_Slant), gTestFonts[7], "LiberationSans-BoldItalic.ttf" },
    { "Toy Liberation Serif", "Normal", SkFontStyle(400,5,SkFontStyle::kUpright_Slant), gTestFonts[8], "LiberationSerif-Regular.ttf" },
    { "Toy Liberation Serif", "Bold", SkFontStyle(700,5,SkFontStyle::kUpright_Slant), gTestFonts[9], "LiberationSerif-Bold.ttf" },
    { "Toy Liberation Serif", "Italic", SkFontStyle(400,5,SkFontStyle::kItalic_Slant), gTestFonts[10], "LiberationSerif-Italic.ttf" },
    { "Toy Liberation Serif", "Bold Italic", SkFontStyle(700,5,SkFontStyle::kItalic_Slant), gTestFonts[11], "LiberationSerif-BoldItalic.ttf" },
};

const size_t gDefaultFontIndex = 4;
