From 94167665e68b100500212b839c12a6aca4b3776f Mon Sep 17 00:00:00 2001 From: Lauren Budorick Date: Thu, 7 May 2015 23:00:34 -0700 Subject: [PATCH 1/4] Initial table extract attempt (segfaults) Initial tables extract attempt (segfaults) [skip ci] --- src/glyphs.cpp | 133 ++++++++++++++++++++++++++++++++++++++++++- src/glyphs.hpp | 4 ++ src/node_fontnik.cpp | 1 + 3 files changed, 136 insertions(+), 2 deletions(-) diff --git a/src/glyphs.cpp b/src/glyphs.cpp index 4a8577af5..98f4fd0de 100644 --- a/src/glyphs.cpp +++ b/src/glyphs.cpp @@ -74,6 +74,34 @@ struct LoadBaton { } }; +struct TableBaton { + v8::Persistent callback; + v8::Persistent buffer; + v8::Persistent table; + const char * font_data; + std::size_t font_size; + std::string error_name; + std::string message; + uv_work_t request; + TableBaton(v8::Local buf, + v8::Local _table, + v8::Local cb) : + table(_table), + font_data(node::Buffer::Data(buf)), + font_size(node::Buffer::Length(buf)), + error_name(), + message(), + request() { + request.data = this; + NanAssignPersistent(callback, cb.As()); + NanAssignPersistent(buffer, buf.As()); + } + ~TableBaton() { + NanDisposePersistent(callback); + NanDisposePersistent(buffer); + } +}; + struct RangeBaton { v8::Persistent callback; v8::Persistent buffer; @@ -128,6 +156,35 @@ NAN_METHOD(Load) { NanReturnUndefined(); } +NAN_METHOD(Table) { + NanScope(); + + // Validate arguments. + if (!args[0]->IsObject()) { + return NanThrowTypeError("First argument must be a font buffer"); + } + v8::Local obj = args[0]->ToObject(); + if (obj->IsNull() || obj->IsUndefined() || !node::Buffer::HasInstance(obj)) { + return NanThrowTypeError("First argument must be a font buffer"); + } + + if (!args[1]->IsString()) { + return NanThrowTypeError("Second argument must be a string table name"); + } + v8::Local table = args[1]->ToString(); + if (table->IsNull() || table->IsUndefined() || table->Length() == 0) { + return NanThrowTypeError("Second argument must be a string of non-zero size"); + } + + if (args.Length() < 3 || !args[2]->IsFunction()) { + return NanThrowTypeError("Callback must be a function"); + } + + TableBaton* baton = new TableBaton(obj,table,args[2]); + uv_queue_work(uv_default_loop(), &baton->request, TableAsync, (uv_after_work_cb)AfterTable); + NanReturnUndefined(); +} + NAN_METHOD(Range) { NanScope(); @@ -265,6 +322,80 @@ void AfterLoad(uv_work_t* req) { delete baton; }; +void TableAsync(uv_work_t* req) { + TableBaton* baton = static_cast(req->data); + + FT_Library library = nullptr; + ft_library_guard library_guard(&library); + FT_Error error = FT_Init_FreeType(&library); + if (error) { + /* LCOV_EXCL_START */ + baton->error_name = std::string("could not open FreeType library"); + return; + /* LCOV_EXCL_END */ + } + FT_Face ft_face = 0; + int num_faces = 0; + for ( int i = 0; ft_face == 0 || i < num_faces; ++i ) + { + FT_Error face_error = FT_New_Memory_Face(library, reinterpret_cast(baton->font_data), static_cast(baton->font_size), i, &ft_face); + if (face_error) { + baton->error_name = std::string("could not open font file"); + return; + } + + FT_ULong length = 0; + FT_Byte *buffer; + + v8::String::Utf8Value _tablename(baton->table); + std::string tablename = reinterpret_cast(_tablename); + + FT_ULong tag = FT_MAKE_TAG(tablename.at(0) << 24, + tablename.at(1) << 16, + tablename.at(2) << 8, + tablename.at(3)); + + face_error = FT_Load_Sfnt_Table(ft_face, tag, 0, NULL, &length); + if (face_error) { + baton->error_name = std::string("error retrieving table"); + return; + } + + buffer = (FT_Byte *) malloc (length); + if (buffer == NULL) { + baton->error_name = std::string("error retrieving 0-length table"); + } + + face_error = FT_Load_Sfnt_Table(ft_face, tag, 0, buffer, &length); + if (face_error) { + baton->error_name = std::string("error retrieving table"); + return; + } + const char _message = reinterpret_cast(buffer); + + baton->message = _message; + + if (ft_face) { + FT_Done_Face(ft_face); + } + } +}; + +void AfterTable(uv_work_t* req) { + NanScope(); + TableBaton* baton = static_cast(req->data); + + if (!baton->error_name.empty()) { + v8::Local argv[1] = { NanError(baton->error_name.c_str()) }; + NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 1, argv); + } else { + v8::Local argv[2] = { NanNull(), NanNewBufferHandle(baton->message.data(), baton->message.size()) }; + NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 2, argv); + } + + delete baton; +}; + void RangeAsync(uv_work_t* req) { RangeBaton* baton = static_cast(req->data); @@ -349,8 +480,6 @@ void AfterRange(uv_work_t* req) { v8::Local argv[1] = { NanError(baton->error_name.c_str()) }; NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 1, argv); } else { - v8::Local js_faces = NanNew(); - unsigned idx = 0; v8::Local argv[2] = { NanNull(), NanNewBufferHandle(baton->message.data(), baton->message.size()) }; NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 2, argv); } diff --git a/src/glyphs.hpp b/src/glyphs.hpp index 22e02c57f..2859ece3e 100644 --- a/src/glyphs.hpp +++ b/src/glyphs.hpp @@ -13,6 +13,7 @@ extern "C" #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H +#include FT_TRUETYPE_TABLES_H } namespace node_fontnik @@ -24,6 +25,9 @@ void AfterLoad(uv_work_t* req); NAN_METHOD(Range); void RangeAsync(uv_work_t* req); void AfterRange(uv_work_t* req); +NAN_METHOD(Table); +void TableAsync(uv_work_t* req); +void AfterTable(uv_work_t* req); struct glyph_info; void RenderSDF(glyph_info &glyph, int size, diff --git a/src/node_fontnik.cpp b/src/node_fontnik.cpp index 9f1627ab6..5db9049da 100644 --- a/src/node_fontnik.cpp +++ b/src/node_fontnik.cpp @@ -10,6 +10,7 @@ namespace node_fontnik void RegisterModule(v8::Handle target) { NODE_SET_METHOD(target, "load", node_fontnik::Load); + NODE_SET_METHOD(target, "table", node_fontnik::Table); NODE_SET_METHOD(target, "range", node_fontnik::Range); } From 4159ec262e5b5251a1412ce5cef65e9833daead5 Mon Sep 17 00:00:00 2001 From: Lauren Budorick Date: Fri, 8 May 2015 11:59:43 -0700 Subject: [PATCH 2/4] Fix segfaults and double-bitshifting with FT macro --- src/glyphs.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/glyphs.cpp b/src/glyphs.cpp index 98f4fd0de..2ff53cf11 100644 --- a/src/glyphs.cpp +++ b/src/glyphs.cpp @@ -77,14 +77,14 @@ struct LoadBaton { struct TableBaton { v8::Persistent callback; v8::Persistent buffer; - v8::Persistent table; + std::string table; const char * font_data; std::size_t font_size; std::string error_name; std::string message; uv_work_t request; TableBaton(v8::Local buf, - v8::Local _table, + std::string _table, v8::Local cb) : table(_table), font_data(node::Buffer::Data(buf)), @@ -171,8 +171,8 @@ NAN_METHOD(Table) { if (!args[1]->IsString()) { return NanThrowTypeError("Second argument must be a string table name"); } - v8::Local table = args[1]->ToString(); - if (table->IsNull() || table->IsUndefined() || table->Length() == 0) { + std::string table = *v8::String::Utf8Value(args[1]->ToString()); + if (table.empty()) { return NanThrowTypeError("Second argument must be a string of non-zero size"); } @@ -347,13 +347,10 @@ void TableAsync(uv_work_t* req) { FT_ULong length = 0; FT_Byte *buffer; - v8::String::Utf8Value _tablename(baton->table); - std::string tablename = reinterpret_cast(_tablename); - - FT_ULong tag = FT_MAKE_TAG(tablename.at(0) << 24, - tablename.at(1) << 16, - tablename.at(2) << 8, - tablename.at(3)); + FT_ULong tag = FT_MAKE_TAG(baton->table.at(0), + baton->table.at(1), + baton->table.at(2), + baton->table.at(3)); face_error = FT_Load_Sfnt_Table(ft_face, tag, 0, NULL, &length); if (face_error) { From 82487ea8386003cc61d92ab8d43f120b1c849896 Mon Sep 17 00:00:00 2001 From: Mike Morris Date: Thu, 9 Jul 2015 17:10:50 -0400 Subject: [PATCH 3/4] add table tests --- src/glyphs.cpp | 3 +- src/glyphs.hpp | 3 +- src/node_fontnik.cpp | 4 +- .../expected/Fira Sans Medium/codepoints.json | 1 + .../Open Sans Regular/codepoints.json | 1 + test/expected/Open Sans Regular/gpos.sfnt | 1 + .../{ => Open Sans Regular}/range.json | 0 test/expected/load.json | 1 - .../firasans-medium/FiraSans-Medium.ttf | Bin {fonts => test/fonts}/firasans-medium/LICENSE | 0 .../fonts}/open-sans/Apache License.txt | 0 .../fonts}/open-sans/OpenSans-Regular.ttf | Bin test/load.test.js | 74 ++++++++++++++++++ test/{fontnik.test.js => range.test.js} | 71 +++-------------- test/table.test.js | 55 +++++++++++++ 15 files changed, 146 insertions(+), 68 deletions(-) create mode 100644 test/expected/Fira Sans Medium/codepoints.json create mode 100644 test/expected/Open Sans Regular/codepoints.json create mode 100644 test/expected/Open Sans Regular/gpos.sfnt rename test/expected/{ => Open Sans Regular}/range.json (100%) delete mode 100644 test/expected/load.json rename {fonts => test/fonts}/firasans-medium/FiraSans-Medium.ttf (100%) rename {fonts => test/fonts}/firasans-medium/LICENSE (100%) rename {fonts => test/fonts}/open-sans/Apache License.txt (100%) rename {fonts => test/fonts}/open-sans/OpenSans-Regular.ttf (100%) create mode 100644 test/load.test.js rename test/{fontnik.test.js => range.test.js} (61%) create mode 100644 test/table.test.js diff --git a/src/glyphs.cpp b/src/glyphs.cpp index 2ff53cf11..4f679dd5c 100644 --- a/src/glyphs.cpp +++ b/src/glyphs.cpp @@ -34,8 +34,7 @@ typedef std::pair SegmentPair; typedef std::pair SegmentValue; typedef bgi::rtree> Tree; -namespace node_fontnik -{ +namespace node_fontnik { struct FaceMetadata { std::string family_name; diff --git a/src/glyphs.hpp b/src/glyphs.hpp index 2859ece3e..7fb419b34 100644 --- a/src/glyphs.hpp +++ b/src/glyphs.hpp @@ -16,8 +16,7 @@ extern "C" #include FT_TRUETYPE_TABLES_H } -namespace node_fontnik -{ +namespace node_fontnik { NAN_METHOD(Load); void LoadAsync(uv_work_t* req); diff --git a/src/node_fontnik.cpp b/src/node_fontnik.cpp index 5db9049da..1d0f9f137 100644 --- a/src/node_fontnik.cpp +++ b/src/node_fontnik.cpp @@ -5,14 +5,12 @@ #include #include -namespace node_fontnik -{ +namespace node_fontnik { void RegisterModule(v8::Handle target) { NODE_SET_METHOD(target, "load", node_fontnik::Load); NODE_SET_METHOD(target, "table", node_fontnik::Table); NODE_SET_METHOD(target, "range", node_fontnik::Range); - } NODE_MODULE(fontnik, RegisterModule); diff --git a/test/expected/Fira Sans Medium/codepoints.json b/test/expected/Fira Sans Medium/codepoints.json new file mode 100644 index 000000000..7660ae124 --- /dev/null +++ b/test/expected/Fira Sans Medium/codepoints.json @@ -0,0 +1 @@ +[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,402,508,509,510,511,536,537,538,539,567,700,710,711,728,729,730,731,732,733,768,769,770,771,772,774,775,776,778,779,780,787,788,806,807,900,901,902,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1122,1123,1138,1139,1140,1141,1168,1169,1170,1171,1174,1175,1176,1177,1178,1179,1180,1181,1184,1185,1186,1187,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1206,1207,1208,1209,1210,1211,1216,1217,1218,1227,1228,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1308,1309,1316,1317,1318,1319,7808,7809,7810,7811,7812,7813,7922,7923,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8112,8113,8118,8120,8121,8122,8123,8128,8134,8136,8137,8138,8139,8144,8145,8146,8147,8150,8151,8152,8153,8154,8155,8160,8161,8162,8163,8166,8167,8168,8169,8170,8171,8182,8184,8185,8186,8187,8199,8200,8203,8204,8205,8206,8207,8210,8211,8212,8213,8216,8217,8218,8220,8221,8222,8224,8225,8226,8230,8240,8249,8250,8260,8304,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8364,8470,8482,8486,8494,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8678,8679,8680,8681,8682,8706,8709,8710,8719,8721,8722,8725,8729,8730,8734,8747,8776,8800,8804,8805,8901,8998,8999,9000,9003,9166,9647,9674,10145,11013,11014,11015,57344,57345,57346,57347,64257,64258,65279,127760] \ No newline at end of file diff --git a/test/expected/Open Sans Regular/codepoints.json b/test/expected/Open Sans Regular/codepoints.json new file mode 100644 index 000000000..34000b6fb --- /dev/null +++ b/test/expected/Open Sans Regular/codepoints.json @@ -0,0 +1 @@ +[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,416,417,431,432,496,506,507,508,509,510,511,536,537,538,539,567,700,710,711,713,728,729,730,731,732,733,755,768,769,771,777,783,803,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,977,978,982,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,7680,7681,7742,7743,7808,7809,7810,7811,7812,7813,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,8013,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8260,8304,8308,8309,8310,8311,8312,8313,8319,8355,8356,8359,8363,8364,8453,8467,8470,8480,8482,8486,8494,8539,8540,8541,8542,8706,8710,8719,8721,8722,8730,8734,8747,8776,8800,8804,8805,9674,64256,64257,64258,64259,64260,65279,65532,65533] \ No newline at end of file diff --git a/test/expected/Open Sans Regular/gpos.sfnt b/test/expected/Open Sans Regular/gpos.sfnt new file mode 100644 index 000000000..04f7b5be6 --- /dev/null +++ b/test/expected/Open Sans Regular/gpos.sfnt @@ -0,0 +1 @@ +ð \ No newline at end of file diff --git a/test/expected/range.json b/test/expected/Open Sans Regular/range.json similarity index 100% rename from test/expected/range.json rename to test/expected/Open Sans Regular/range.json diff --git a/test/expected/load.json b/test/expected/load.json deleted file mode 100644 index 75bdfa03f..000000000 --- a/test/expected/load.json +++ /dev/null @@ -1 +0,0 @@ -[{"family_name":"Fira Sans","style_name":"Medium","points":[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,402,508,509,510,511,536,537,538,539,567,700,710,711,728,729,730,731,732,733,768,769,770,771,772,774,775,776,778,779,780,787,788,806,807,900,901,902,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1122,1123,1138,1139,1140,1141,1168,1169,1170,1171,1174,1175,1176,1177,1178,1179,1180,1181,1184,1185,1186,1187,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1206,1207,1208,1209,1210,1211,1216,1217,1218,1227,1228,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1308,1309,1316,1317,1318,1319,7808,7809,7810,7811,7812,7813,7922,7923,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8112,8113,8118,8120,8121,8122,8123,8128,8134,8136,8137,8138,8139,8144,8145,8146,8147,8150,8151,8152,8153,8154,8155,8160,8161,8162,8163,8166,8167,8168,8169,8170,8171,8182,8184,8185,8186,8187,8199,8200,8203,8204,8205,8206,8207,8210,8211,8212,8213,8216,8217,8218,8220,8221,8222,8224,8225,8226,8230,8240,8249,8250,8260,8304,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8364,8470,8482,8486,8494,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8678,8679,8680,8681,8682,8706,8709,8710,8719,8721,8722,8725,8729,8730,8734,8747,8776,8800,8804,8805,8901,8998,8999,9000,9003,9166,9647,9674,10145,11013,11014,11015,57344,57345,57346,57347,64257,64258,65279,127760]}] diff --git a/fonts/firasans-medium/FiraSans-Medium.ttf b/test/fonts/firasans-medium/FiraSans-Medium.ttf similarity index 100% rename from fonts/firasans-medium/FiraSans-Medium.ttf rename to test/fonts/firasans-medium/FiraSans-Medium.ttf diff --git a/fonts/firasans-medium/LICENSE b/test/fonts/firasans-medium/LICENSE similarity index 100% rename from fonts/firasans-medium/LICENSE rename to test/fonts/firasans-medium/LICENSE diff --git a/fonts/open-sans/Apache License.txt b/test/fonts/open-sans/Apache License.txt similarity index 100% rename from fonts/open-sans/Apache License.txt rename to test/fonts/open-sans/Apache License.txt diff --git a/fonts/open-sans/OpenSans-Regular.ttf b/test/fonts/open-sans/OpenSans-Regular.ttf similarity index 100% rename from fonts/open-sans/OpenSans-Regular.ttf rename to test/fonts/open-sans/OpenSans-Regular.ttf diff --git a/test/load.test.js b/test/load.test.js new file mode 100644 index 000000000..e76b78ac5 --- /dev/null +++ b/test/load.test.js @@ -0,0 +1,74 @@ +'use strict'; + +/* jshint node: true */ + +var fontnik = require('..'); +var test = require('tape'); +var fs = require('fs'); +var UPDATE = process.env.UPDATE; + +var firasans = fs.readFileSync(__dirname + '/fonts/firasans-medium/FiraSans-Medium.ttf'); +var opensans = fs.readFileSync(__dirname + '/fonts/open-sans/OpenSans-Regular.ttf'); + +test('load', function(t) { + t.test('loads: fira sans', function(t) { + fontnik.load(firasans, function(err, faces) { + t.error(err); + + var family = faces[0].family_name; + var style = faces[0].style_name; + var face = [family, style].join(' '); + var codepoints = __dirname + '/expected/' + face + '/codepoints.json'; + + t.equal(family, 'Fira Sans'); + t.equal(style, 'Medium'); + + if (UPDATE) fs.writeFileSync(codepoints, JSON.stringify(faces[0].points)); + t.deepEqual(faces[0].points, JSON.parse(fs.readFileSync(codepoints))) + + t.end(); + }); + }); + + t.test('loads: open sans', function(t) { + fontnik.load(opensans, function(err, faces) { + t.error(err); + + var family = faces[0].family_name; + var style = faces[0].style_name; + var face = [family, style].join(' '); + var codepoints = __dirname + '/expected/' + face + '/codepoints.json'; + + t.equal(family, 'Open Sans'); + t.equal(style, 'Regular'); + + if (UPDATE) fs.writeFileSync(codepoints, JSON.stringify(faces[0].points)); + t.deepEqual(faces[0].points, require(codepoints)); + + t.end(); + }); + }); + + t.test('invalid font loading', function(t) { + t.throws(function() { + fontnik.load(undefined, function(err, faces) {}); + }, /First argument must be a font buffer/); + t.end(); + }); + + t.test('non existent font loading', function(t) { + var doesnotexistsans = new Buffer('baloney'); + fontnik.load(doesnotexistsans, function(err, faces) { + t.ok(err.message.indexOf('Font buffer is not an object')); + t.end(); + }); + }); + + t.test('load typeerror callback', function(t) { + t.throws(function() { + fontnik.load(firasans); + }, /Callback must be a function/); + t.end(); + }); +}); + diff --git a/test/fontnik.test.js b/test/range.test.js similarity index 61% rename from test/fontnik.test.js rename to test/range.test.js index 9dbe77558..9addaab70 100644 --- a/test/fontnik.test.js +++ b/test/range.test.js @@ -5,70 +5,13 @@ var fontnik = require('..'); var test = require('tape'); var fs = require('fs'); -var path = require('path'); var zlib = require('zlib'); var zdata = fs.readFileSync(__dirname + '/fixtures/range.0.256.pbf'); var Protobuf = require('pbf'); var Glyphs = require('./format/glyphs'); var UPDATE = process.env.UPDATE; -function nobuffer(key, val) { - return key !== '_buffer' && key !== 'bitmap' ? val : undefined; -} - -function jsonEqual(t, key, json) { - if (UPDATE) fs.writeFileSync(__dirname + '/expected/' + key + '.json', JSON.stringify(json, null, 2)); - t.deepEqual(json, require('./expected/' + key + '.json')); -} - -var expected = JSON.parse(fs.readFileSync(__dirname + '/expected/load.json').toString()); -var firasans = fs.readFileSync(path.resolve(__dirname + '/../fonts/firasans-medium/FiraSans-Medium.ttf')); -var opensans = fs.readFileSync(path.resolve(__dirname + '/../fonts/open-sans/OpenSans-Regular.ttf')); - -test('load', function(t) { - t.test('loads: fira sans', function(t) { - fontnik.load(firasans, function(err, faces) { - t.error(err); - t.equal(faces[0].points.length, 789); - t.equal(faces[0].family_name, 'Fira Sans'); - t.equal(faces[0].style_name, 'Medium'); - t.end(); - }); - }); - - t.test('loads: open sans', function(t) { - fontnik.load(opensans, function(err, faces) { - t.error(err); - t.equal(faces[0].points.length, 882); - t.equal(faces[0].family_name, 'Open Sans'); - t.equal(faces[0].style_name, 'Regular'); - t.end(); - }); - }); - - t.test('invalid font loading', function(t) { - t.throws(function() { - fontnik.load(undefined, function(err, faces) {}); - }, /First argument must be a font buffer/); - t.end(); - }); - - t.test('non existent font loading', function(t) { - var doesnotexistsans = new Buffer('baloney'); - fontnik.load(doesnotexistsans, function(err, faces) { - t.ok(err.message.indexOf('Font buffer is not an object')); - t.end(); - }); - }); - - t.test('load typeerror callback', function(t) { - t.throws(function() { - fontnik.load(firasans); - }, /Callback must be a function/); - t.end(); - }); - -}); +var opensans = fs.readFileSync(__dirname + '/fonts/open-sans/OpenSans-Regular.ttf'); test('range', function(t) { var data; @@ -82,9 +25,17 @@ test('range', function(t) { t.error(err); t.ok(res); t.deepEqual(res, data); + var vt = new Glyphs(new Protobuf(new Uint8Array(res))); - var json = JSON.parse(JSON.stringify(vt, nobuffer)); - jsonEqual(t, 'range', json); + var json = JSON.parse(JSON.stringify(vt, function(key, val) { + return key !== '_buffer' && key !== 'bitmap' ? val : undefined; + })); + + var range = __dirname + '/expected/Open Sans Regular/range.json'; + + if (UPDATE) fs.writeFileSync(range, JSON.stringify(json, null, 2)); + t.deepEqual(json, require(range)); + t.end(); }); }); diff --git a/test/table.test.js b/test/table.test.js new file mode 100644 index 000000000..cf9604df1 --- /dev/null +++ b/test/table.test.js @@ -0,0 +1,55 @@ +'use strict'; + +/* jshint node: true */ + +var fontnik = require('..'); +var test = require('tape'); +var fs = require('fs'); +var UPDATE = process.env.UPDATE; + +var opensans = fs.readFileSync(__dirname + '/fonts/open-sans/OpenSans-Regular.ttf'); + +test('table', function(t) { + t.test('tables', function(t) { + fontnik.table(opensans, 'GPOS', function(err, res) { + t.error(err); + if (UPDATE) fs.writeFileSync(__dirname + '/expected/Open Sans Regular/gpos.sfnt', res); + t.ok(res); + t.end(); + }); + }); + + t.test('TypeError font buffer', function(t) { + t.throws(function() { + fontnik.table(); + }, /First argument must be a font buffer/); + t.throws(function() { + fontnik.table({}); + }, /First argument must be a font buffer/); + t.end(); + }); + + t.test('TypeError string table name', function(t) { + t.throws(function() { + fontnik.table(opensans, undefined, function() {}); + }, /Second argument must be a string table name/); + t.end(); + }); + + t.test('TypeError string of non-zero size', function(t) { + t.throws(function() { + fontnik.table(opensans, '', function() {}); + }, /Second argument must be a string of non-zero size/); + t.end(); + }); + + t.test('TypeError callback', function(t) { + t.throws(function() { + fontnik.table(opensans, 'GPOS'); + }, /Callback must be a function/); + t.throws(function() { + fontnik.table(opensans, 'GPOS', undefined); + }, /Callback must be a function/); + t.end(); + }); +}); From e4eb7880899692a6c3e10e751a232727c40021b6 Mon Sep 17 00:00:00 2001 From: Mike Morris Date: Fri, 10 Jul 2015 12:02:42 -0400 Subject: [PATCH 4/4] add Noto Kufi Arabic Regular --- package.json | 1 + .../expected/Fira Sans Medium/codepoints.json | 1 - .../Noto Kufi Arabic Regular/codepoints.json | 1 + .../Noto Kufi Arabic Regular/gpos.sfnt | Bin 0 -> 1 bytes .../fonts/noto-kufi-arabic/LICENSE.txt | 201 ++++++++++++++++++ .../NotoKufiArabic-Regular.ttf | Bin 0 -> 62632 bytes .../fonts/open-sans/Apache License.txt | 0 .../fonts/open-sans/OpenSans-Regular.ttf | Bin .../fonts/firasans-medium/FiraSans-Medium.ttf | Bin 194388 -> 0 bytes test/fonts/firasans-medium/LICENSE | 99 --------- test/load.test.js | 43 ++-- test/range.test.js | 2 +- test/table.test.js | 22 +- 13 files changed, 246 insertions(+), 124 deletions(-) delete mode 100644 test/expected/Fira Sans Medium/codepoints.json create mode 100644 test/expected/Noto Kufi Arabic Regular/codepoints.json create mode 100644 test/expected/Noto Kufi Arabic Regular/gpos.sfnt create mode 100644 test/fixtures/fonts/noto-kufi-arabic/LICENSE.txt create mode 100644 test/fixtures/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf rename test/{ => fixtures}/fonts/open-sans/Apache License.txt (100%) rename test/{ => fixtures}/fonts/open-sans/OpenSans-Regular.ttf (100%) delete mode 100644 test/fonts/firasans-medium/FiraSans-Medium.ttf delete mode 100644 test/fonts/firasans-medium/LICENSE diff --git a/package.json b/package.json index 74d2c82c9..68e9647f0 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ ], "devDependencies": { "faucet": "0.0.1", + "mkdirp": "^0.5.1", "pbf": "^1.3.1", "tape": "^4.0.0" }, diff --git a/test/expected/Fira Sans Medium/codepoints.json b/test/expected/Fira Sans Medium/codepoints.json deleted file mode 100644 index 7660ae124..000000000 --- a/test/expected/Fira Sans Medium/codepoints.json +++ /dev/null @@ -1 +0,0 @@ -[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,402,508,509,510,511,536,537,538,539,567,700,710,711,728,729,730,731,732,733,768,769,770,771,772,774,775,776,778,779,780,787,788,806,807,900,901,902,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1122,1123,1138,1139,1140,1141,1168,1169,1170,1171,1174,1175,1176,1177,1178,1179,1180,1181,1184,1185,1186,1187,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1206,1207,1208,1209,1210,1211,1216,1217,1218,1227,1228,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1308,1309,1316,1317,1318,1319,7808,7809,7810,7811,7812,7813,7922,7923,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8112,8113,8118,8120,8121,8122,8123,8128,8134,8136,8137,8138,8139,8144,8145,8146,8147,8150,8151,8152,8153,8154,8155,8160,8161,8162,8163,8166,8167,8168,8169,8170,8171,8182,8184,8185,8186,8187,8199,8200,8203,8204,8205,8206,8207,8210,8211,8212,8213,8216,8217,8218,8220,8221,8222,8224,8225,8226,8230,8240,8249,8250,8260,8304,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8364,8470,8482,8486,8494,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8678,8679,8680,8681,8682,8706,8709,8710,8719,8721,8722,8725,8729,8730,8734,8747,8776,8800,8804,8805,8901,8998,8999,9000,9003,9166,9647,9674,10145,11013,11014,11015,57344,57345,57346,57347,64257,64258,65279,127760] \ No newline at end of file diff --git a/test/expected/Noto Kufi Arabic Regular/codepoints.json b/test/expected/Noto Kufi Arabic Regular/codepoints.json new file mode 100644 index 000000000..47eabc57b --- /dev/null +++ b/test/expected/Noto Kufi Arabic Regular/codepoints.json @@ -0,0 +1 @@ +[13,32,160,1536,1537,1538,1539,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1563,1566,1567,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,8203,8204,8205,8206,8207,9676,64336,64337,64342,64343,64344,64345,64358,64359,64360,64361,64362,64363,64364,64365,64378,64379,64380,64381,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64414,64415,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64486,64487,64488,64489,64508,64509,64510,64511,64606,64607,64608,64609,64610,64611,64830,64831,65010,65020,65136,65138,65140,65142,65144,65146,65148,65150,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,65279] \ No newline at end of file diff --git a/test/expected/Noto Kufi Arabic Regular/gpos.sfnt b/test/expected/Noto Kufi Arabic Regular/gpos.sfnt new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/test/fixtures/fonts/noto-kufi-arabic/LICENSE.txt b/test/fixtures/fonts/noto-kufi-arabic/LICENSE.txt new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/test/fixtures/fonts/noto-kufi-arabic/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/test/fixtures/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf b/test/fixtures/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..85b4ffd88f52926b318733b346374ee034bf8b58 GIT binary patch literal 62632 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%0Defm#& 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 S&2m)ZB1nA%c{)>y^#211=Z1R# literal 0 HcmV?d00001 diff --git a/test/fonts/open-sans/Apache License.txt b/test/fixtures/fonts/open-sans/Apache License.txt similarity index 100% rename from test/fonts/open-sans/Apache License.txt rename to test/fixtures/fonts/open-sans/Apache License.txt diff --git a/test/fonts/open-sans/OpenSans-Regular.ttf b/test/fixtures/fonts/open-sans/OpenSans-Regular.ttf similarity index 100% rename from test/fonts/open-sans/OpenSans-Regular.ttf rename to test/fixtures/fonts/open-sans/OpenSans-Regular.ttf diff --git a/test/fonts/firasans-medium/FiraSans-Medium.ttf b/test/fonts/firasans-medium/FiraSans-Medium.ttf deleted file mode 100644 index e6a6637b0a0b5582dc5ed7998ebd2c357ccad3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194388 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 diff --git a/test/fonts/firasans-medium/LICENSE b/test/fonts/firasans-medium/LICENSE deleted file mode 100644 index e4d7557ab..000000000 --- a/test/fonts/firasans-medium/LICENSE +++ /dev/null @@ -1,99 +0,0 @@ -Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ -with Reserved Font Name Fira Sans. - -Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ -with Reserved Font Name Fira Mono. - -Copyright (c) 2014, Telefonica S.A. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/test/load.test.js b/test/load.test.js index e76b78ac5..f4ca0f2a5 100644 --- a/test/load.test.js +++ b/test/load.test.js @@ -5,45 +5,56 @@ var fontnik = require('..'); var test = require('tape'); var fs = require('fs'); +var mkdirp = require('mkdirp'); var UPDATE = process.env.UPDATE; -var firasans = fs.readFileSync(__dirname + '/fonts/firasans-medium/FiraSans-Medium.ttf'); -var opensans = fs.readFileSync(__dirname + '/fonts/open-sans/OpenSans-Regular.ttf'); +var opensans = fs.readFileSync(__dirname + '/fixtures/fonts/open-sans/OpenSans-Regular.ttf'); +var notokufiarabic = fs.readFileSync(__dirname + '/fixtures/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf'); test('load', function(t) { - t.test('loads: fira sans', function(t) { - fontnik.load(firasans, function(err, faces) { + t.test('loads: Open Sans Regular', function(t) { + fontnik.load(opensans, function(err, faces) { t.error(err); var family = faces[0].family_name; var style = faces[0].style_name; var face = [family, style].join(' '); - var codepoints = __dirname + '/expected/' + face + '/codepoints.json'; + var dir = __dirname + '/expected/' + face; + var codepoints = dir + '/codepoints.json'; + + t.equal(family, 'Open Sans'); + t.equal(style, 'Regular'); - t.equal(family, 'Fira Sans'); - t.equal(style, 'Medium'); + if (UPDATE) { + mkdirp(dir); + fs.writeFileSync(codepoints, JSON.stringify(faces[0].points)); + } - if (UPDATE) fs.writeFileSync(codepoints, JSON.stringify(faces[0].points)); - t.deepEqual(faces[0].points, JSON.parse(fs.readFileSync(codepoints))) + t.deepEqual(faces[0].points, require(codepoints)); t.end(); }); }); - t.test('loads: open sans', function(t) { - fontnik.load(opensans, function(err, faces) { + t.test('loads: Noto Kufi Arabic Regular', function(t) { + fontnik.load(notokufiarabic, function(err, faces) { t.error(err); var family = faces[0].family_name; var style = faces[0].style_name; var face = [family, style].join(' '); - var codepoints = __dirname + '/expected/' + face + '/codepoints.json'; + var dir = __dirname + '/expected/' + face; + var codepoints = dir + '/codepoints.json'; - t.equal(family, 'Open Sans'); + t.equal(family, 'Noto Kufi Arabic'); t.equal(style, 'Regular'); - if (UPDATE) fs.writeFileSync(codepoints, JSON.stringify(faces[0].points)); - t.deepEqual(faces[0].points, require(codepoints)); + if (UPDATE) { + mkdirp(dir); + fs.writeFileSync(codepoints, JSON.stringify(faces[0].points)); + } + + t.deepEqual(faces[0].points, JSON.parse(fs.readFileSync(codepoints))) t.end(); }); @@ -66,7 +77,7 @@ test('load', function(t) { t.test('load typeerror callback', function(t) { t.throws(function() { - fontnik.load(firasans); + fontnik.load(opensans); }, /Callback must be a function/); t.end(); }); diff --git a/test/range.test.js b/test/range.test.js index 9addaab70..14f94c8c6 100644 --- a/test/range.test.js +++ b/test/range.test.js @@ -11,7 +11,7 @@ var Protobuf = require('pbf'); var Glyphs = require('./format/glyphs'); var UPDATE = process.env.UPDATE; -var opensans = fs.readFileSync(__dirname + '/fonts/open-sans/OpenSans-Regular.ttf'); +var opensans = fs.readFileSync(__dirname + '/fixtures/fonts/open-sans/OpenSans-Regular.ttf'); test('range', function(t) { var data; diff --git a/test/table.test.js b/test/table.test.js index cf9604df1..398c54198 100644 --- a/test/table.test.js +++ b/test/table.test.js @@ -5,15 +5,23 @@ var fontnik = require('..'); var test = require('tape'); var fs = require('fs'); +var mkdirp = require('mkdirp'); var UPDATE = process.env.UPDATE; -var opensans = fs.readFileSync(__dirname + '/fonts/open-sans/OpenSans-Regular.ttf'); +var notokufiarabic = fs.readFileSync(__dirname + '/fixtures/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf'); test('table', function(t) { t.test('tables', function(t) { - fontnik.table(opensans, 'GPOS', function(err, res) { + fontnik.table(notokufiarabic, 'GPOS', function(err, res) { t.error(err); - if (UPDATE) fs.writeFileSync(__dirname + '/expected/Open Sans Regular/gpos.sfnt', res); + + var dir = __dirname + '/expected/Noto Kufi Arabic Regular'; + + if (UPDATE) { + mkdirp(dir); + fs.writeFileSync(dir + '/gpos.sfnt', res); + } + t.ok(res); t.end(); }); @@ -31,24 +39,24 @@ test('table', function(t) { t.test('TypeError string table name', function(t) { t.throws(function() { - fontnik.table(opensans, undefined, function() {}); + fontnik.table(notokufiarabic, undefined, function() {}); }, /Second argument must be a string table name/); t.end(); }); t.test('TypeError string of non-zero size', function(t) { t.throws(function() { - fontnik.table(opensans, '', function() {}); + fontnik.table(notokufiarabic, '', function() {}); }, /Second argument must be a string of non-zero size/); t.end(); }); t.test('TypeError callback', function(t) { t.throws(function() { - fontnik.table(opensans, 'GPOS'); + fontnik.table(notokufiarabic, 'GPOS'); }, /Callback must be a function/); t.throws(function() { - fontnik.table(opensans, 'GPOS', undefined); + fontnik.table(notokufiarabic, 'GPOS', undefined); }, /Callback must be a function/); t.end(); });