/*
 * !!! DO NOT EDIT !!!
 * THIS FILE IS GENERATED BY A SCRIPT.
 * FOR MORE DETAILS SEE 'README-test_data.txt'.
 */

/*
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * 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 TYPOGRAPHY_FONT_SFNTLY_SRC_TEST_AUTOGENERATED_CMAP_TEST_DATA_H_
#define TYPOGRAPHY_FONT_SFNTLY_SRC_TEST_AUTOGENERATED_CMAP_TEST_DATA_H_

#include "sfntly/port/type.h"

namespace sfntly {
namespace cmap_test_data {
const char* kAllTests[] = {
  "data/fonts/cousine/Cousine-BoldItalic.ttf",
  "data/fonts/cousine/Cousine-Bold.ttf",
  "data/fonts/cousine/Cousine-Regular.ttf",
  "data/fonts/cousine/Cousine-Italic.ttf",
  "data/fonts/cedarvillecursive/Cedarville-Cursive.ttf",
  "data/fonts/dancingscript/DancingScript-Bold.ttf",
  "data/fonts/dancingscript/DancingScript-Regular.ttf",
  "data/fonts/damion/Damion-Regular.ttf",
  "data/fonts/annieuseyourtelescope/AnnieUseYourTelescope.ttf",
  "data/fonts/deliusswashcaps/DeliusSwashCaps-Regular.ttf",
  "data/fonts/delius/Delius-Regular.ttf",
  "data/fonts/coveredbyyourgrace/CoveredByYourGrace.ttf",
  "data/fonts/ebgaramond/EBGaramond-Regular.ttf",
  "data/fonts/cabinsketch/CabinSketch-Bold.ttf",
  "data/fonts/allan/Allan-Bold.ttf",
  "data/fonts/coda/Coda-Caption-Heavy.ttf",
  "data/fonts/coda/Coda-Heavy.ttf",
  "data/fonts/forum/Forum-Regular.ttf",
  "data/fonts/alike/Alike-Regular.ttf",
  "data/fonts/corben/Corben-Bold.ttf",
  "data/fonts/caudex/Caudex-Regular.ttf",
  "data/fonts/caudex/Caudex-BoldItalic.ttf",
  "data/fonts/caudex/Caudex-Italic.ttf",
  "data/fonts/caudex/Caudex-Bold.ttf",
  "data/fonts/cabin/Cabin-MediumItalic.ttf",
  "data/fonts/cabin/Cabin-SemiBold.ttf",
  "data/fonts/cabin/Cabin-SemiBoldItalic.ttf",
  "data/fonts/cabin/Cabin-BoldItalic.ttf",
  "data/fonts/cabin/Cabin-Medium.ttf",
  "data/fonts/cabin/Cabin-Italic.ttf",
  "data/fonts/cabin/Cabin-Bold.ttf",
  "data/fonts/cabin/Cabin-Regular.ttf",
  "data/fonts/dawningofanewday/DawningofaNewDay.ttf",
  "data/fonts/dangrek/Dangrek.ttf",
  "data/fonts/blackopsone/BlackOpsOne.ttf",
  "data/fonts/francoisone/FrancoisOne.ttf",
  "data/fonts/bowlbyone/BowlbyOne.ttf",
  "data/fonts/bowlbyone/BowlbyOneSC.ttf",
  "data/fonts/calligraffiti/Calligraffiti.ttf",
  "data/fonts/bangers/Bangers.ttf",
  "data/fonts/astloch/Astloch-Regular.ttf",
  "data/fonts/astloch/Astloch-Bold.ttf",
  "data/fonts/angkor/Angkor.ttf",
  "data/fonts/abrilfatface/AbrilFatface-Regular.ttf",
  "data/fonts/cantarell/Cantarell-BoldOblique.ttf",
  "data/fonts/cantarell/Cantarell-Oblique.ttf",
  "data/fonts/cantarell/Cantarell-Bold.ttf",
  "data/fonts/cantarell/Cantarell-Regular.ttf",
  "data/fonts/arvo/Arvo-Bold.ttf",
  "data/fonts/arvo/Arvo-Italic.ttf",
  "data/fonts/arvo/Arvo-BoldItalic.ttf",
  "data/fonts/arvo/Arvo-Regular.ttf",
  "data/fonts/chewy/Chewy.ttf",
  "data/fonts/bigshotone/BigshotOne.ttf",
  "data/fonts/chenla/Chenla.ttf",
  "data/fonts/bayon/Bayon.ttf",
  "data/fonts/coustard/Coustard-Black.ttf",
  "data/fonts/coustard/Coustard-Regular.ttf",
  "data/fonts/amaticsc/AmaticSC-Bold.ttf",
  "data/fonts/amaticsc/AmaticSC-Regular.ttf",
  "data/fonts/comfortaa/Comfortaa-Light.ttf",
  "data/fonts/comfortaa/Comfortaa-Bold.ttf",
  "data/fonts/comfortaa/Comfortaa-Regular.ttf",
  "data/fonts/expletussans/ExpletusSans-Bold.ttf",
  "data/fonts/expletussans/ExpletusSans-MediumItalic.ttf",
  "data/fonts/expletussans/ExpletusSans-Medium.ttf",
  "data/fonts/expletussans/ExpletusSans-SemiBold.ttf",
  "data/fonts/expletussans/ExpletusSans-Regular.ttf",
  "data/fonts/expletussans/ExpletusSans-Italic.ttf",
  "data/fonts/expletussans/ExpletusSans-SemiBoldItalic.ttf",
  "data/fonts/expletussans/ExpletusSans-BoldItalic.ttf",
  "data/fonts/aubrey/Aubrey-Regular.ttf",
  "data/fonts/antic/Antic-Regular.ttf",
  "data/fonts/copse/Copse-Regular.ttf",
  "data/fonts/daysone/DaysOne-Regular.ttf",
  "data/fonts/actor/Actor-Regular.ttf",
  "data/fonts/bentham/Bentham-Regular.ttf",
  "data/fonts/federo/Federo-Regular.ttf",
  "data/fonts/arimo/Arimo-Italic.ttf",
  "data/fonts/arimo/Arimo-BoldItalic.ttf",
  "data/fonts/arimo/Arimo-Bold.ttf",
  "data/fonts/arimo/Arimo-Regular.ttf",
  "data/fonts/felltypes/IMFeDPsc28P.ttf",
  "data/fonts/felltypes/IMFeGPrm28P.ttf",
  "data/fonts/felltypes/IMFeENsc28P.ttf",
  "data/fonts/felltypes/IMFePIit28P.ttf",
  "data/fonts/felltypes/IMFeDPrm28P.ttf",
  "data/fonts/felltypes/IMFePIrm28P.ttf",
  "data/fonts/felltypes/IMFeFCrm28P.ttf",
  "data/fonts/felltypes/IMFeGPit28P.ttf",
  "data/fonts/felltypes/IMFeENit28P.ttf",
  "data/fonts/felltypes/IMFeDPit28P.ttf",
  "data/fonts/felltypes/IMFeENrm28P.ttf",
  "data/fonts/felltypes/IMFeGPsc28P.ttf",
  "data/fonts/felltypes/IMFePIsc28P.ttf",
  "data/fonts/felltypes/IMFeFCsc28P.ttf",
  "data/fonts/felltypes/IMFeFCit28P.ttf",
  "data/fonts/bokor/Bokor.ttf",
  "data/fonts/didactgothic/DidactGothic.ttf",
  "data/fonts/allerta/Allerta-Medium.ttf",
  "data/fonts/allerta/Allerta-Stencil.ttf",
  "data/fonts/buda/Buda-Light.ttf",
  "data/fonts/brawler/Brawler-Regular.ttf",
  "data/fonts/carterone/CarterOne.ttf",
  "data/fonts/candal/Candal.ttf",
  "data/fonts/dorsa/Dorsa-Regular.ttf",
  "data/fonts/crimson/CrimsonText-BoldItalic.ttf",
  "data/fonts/crimson/CrimsonText-Bold.ttf",
  "data/fonts/crimson/CrimsonText-Italic.ttf",
  "data/fonts/crimson/CrimsonText-Roman.ttf",
  "data/fonts/crimson/CrimsonText-Semibold.ttf",
  "data/fonts/crimson/CrimsonText-SemiboldItalic.ttf",
  "data/fonts/amaranth/Amaranth-Italic.ttf",
  "data/fonts/amaranth/Amaranth-Bold.ttf",
  "data/fonts/amaranth/Amaranth-Regular.ttf",
  "data/fonts/amaranth/Amaranth-BoldItalic.ttf",
  "data/fonts/crushed/Crushed.ttf",
  "data/fonts/adamina/Adamina-Regular.ttf",
  "data/fonts/aldrich/Aldrich-Regular.ttf",
  "data/fonts/fanwoodtext/FanwoodText-Italic.ttf",
  "data/fonts/fanwoodtext/FanwoodText-Regular.ttf",
  "data/fonts/anonymouspro/AnonymousPro-Regular.ttf",
  "data/fonts/anonymouspro/AnonymousPro-Bold.ttf",
  "data/fonts/anonymouspro/AnonymousPro-Italic.ttf",
  "data/fonts/anonymouspro/AnonymousPro-BoldItalic.ttf",
  "data/fonts/bevan/Bevan.ttf",
  "data/fonts/artifika/Artifika-Regular.ttf",
  "data/fonts/anton/Anton.ttf",
  "data/fonts/battambang/Battambang-Regular.ttf",
  "data/fonts/battambang/Battambang-Bold.ttf",
  "data/fonts/carme/Carme-Regular.ttf",
  "data/fonts/cherrycreamsoda/CherryCreamSoda.ttf",
  "data/fonts/deliusunicase/DeliusUnicase-Regular.ttf",
  "data/fonts/comingsoon/ComingSoon.ttf",
  "data/fonts/freehand/Freehand.ttf",
  "data/fonts/alice/Alice-Regular.ttf",
  "data/fonts/contrail/Contrail-Regular.ttf",
  "data/fonts/cardo/Cardo-Bold.ttf",
  "data/fonts/cardo/Cardo-Italic.ttf",
  "data/fonts/cardo/Cardo-Regular.ttf",
  "data/fonts/asset/Asset.ttf",
  "data/fonts/changaone/ChangaOne-Regular.ttf",
  "data/fonts/aclonica/Aclonica.ttf",
  "data/fonts/craftygirls/CraftyGirls.ttf",
  "data/fonts/architectsdaughter/ArchitectsDaughter.ttf",
  "data/fonts/content/Content-Bold.ttf",
  "data/fonts/content/Content-Regular.ttf",
  "data/fonts/abel/Abel-Regular.ttf",
  "data/fonts/cuprum/Cuprum.ttf",
  "data/fonts/andika/Andika-R.ttf"
};
}  // namespace cmap_test_data
}  // namespace sfntly

#endif  // TYPOGRAPHY_FONT_SFNTLY_SRC_TEST_AUTOGENERATED_CMAP_TEST_DATA_H_
