summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <info@littlecms.com>2011-05-24 16:00:20 +0200
committerMarti Maria <info@littlecms.com>2011-05-24 16:00:20 +0200
commita4d8ee129fdd10b980e8a77badbb45df786c48ef (patch)
tree21d875fba14de1625d662fba6a1271c4c22ed4d1
parentcfafa7495a0e2d3bc4429010f0cbdd701ea2cb98 (diff)
downloadlcms2-a4d8ee129fdd10b980e8a77badbb45df786c48ef.tar.gz
Testbed for dictionary tag
-rw-r--r--src/cmstypes.c7
-rw-r--r--testbed/testcms2.c74
2 files changed, 79 insertions, 2 deletions
diff --git a/src/cmstypes.c b/src/cmstypes.c
index 462e85c..5fd702f 100644
--- a/src/cmstypes.c
+++ b/src/cmstypes.c
@@ -4939,6 +4939,13 @@ cmsBool ReadOneMLUC(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, _cm
{
cmsUInt32Number nItems = 0;
+ // A way to get null MLUCs
+ if (e -> Sizes[i] == 0) {
+
+ *mlu = NULL;
+ return TRUE;
+ }
+
if (!io -> Seek(io, e -> Offsets[i])) return FALSE;
*mlu = (cmsMLU*) Type_MLU_Read(self, io, &nItems, e ->Sizes[i]);
diff --git a/testbed/testcms2.c b/testbed/testcms2.c
index 2d108d7..4e6501b 100644
--- a/testbed/testcms2.c
+++ b/testbed/testcms2.c
@@ -4863,6 +4863,75 @@ cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile)
}
+
+static
+cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile)
+{
+ cmsHANDLE hDict;
+ const cmsDICTentry* e;
+ cmsMLU* DisplayName;
+ char Buffer[256];
+ cmsInt32Number rc = 1;
+
+ switch (Pass) {
+
+ case 1:
+ hDict = cmsDictAlloc(DbgThread());
+
+ DisplayName = cmsMLUalloc(DbgThread(), 0);
+
+ cmsMLUsetWide(DisplayName, "en", "US", L"Hello, world");
+ cmsMLUsetWide(DisplayName, "es", "ES", L"Hola, mundo");
+ cmsMLUsetWide(DisplayName, "fr", "FR", L"Bonjour, le monde");
+ cmsMLUsetWide(DisplayName, "ca", "CA", L"Hola, mon");
+
+ cmsDictAddEntry(hDict, L"Name", L"String", DisplayName, NULL);
+ cmsMLUfree(DisplayName);
+
+ cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL);
+ if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0;
+ cmsDictFree(hDict);
+
+ return 1;
+
+
+ case 2:
+
+ hDict = cmsReadTag(hProfile, cmsSigMetaTag);
+ if (hDict == NULL) return 0;
+
+ e = cmsDictGetEntryList(hDict);
+ if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0;
+ if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0;
+ e = cmsDictNextEntry(e);
+ if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0;
+ if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0;
+
+ cmsMLUgetASCII(e->DisplayName, "en", "US", Buffer, 256);
+ if (strcmp(Buffer, "Hello, world") != 0) rc = 0;
+
+
+ cmsMLUgetASCII(e->DisplayName, "es", "ES", Buffer, 256);
+ if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0;
+
+
+ cmsMLUgetASCII(e->DisplayName, "fr", "FR", Buffer, 256);
+ if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0;
+
+
+ cmsMLUgetASCII(e->DisplayName, "ca", "CA", Buffer, 256);
+ if (strcmp(Buffer, "Hola, mon") != 0) rc = 0;
+
+ if (rc == 0)
+ Fail("Unexpected string '%s'", Buffer);
+ return 1;
+
+ default:;
+ }
+
+ return 0;
+}
+
static
cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile)
{
@@ -5026,6 +5095,7 @@ cmsInt32Number CheckProfileCreation(void)
SubTest("Dictionary meta tags");
if (!CheckDictionary16(Pass, h)) return 0;
+ if (!CheckDictionary24(Pass, h)) return 0;
if (Pass == 1) {
cmsSaveProfileToFile(h, "alltags.icc");
@@ -7439,7 +7509,7 @@ void CheckProfileZOO(void)
#endif
-
+#if 0
#define TYPE_709 709
static double Rec709Math(int Type, const double Params[], double R)
{ double Fun;
@@ -7466,7 +7536,7 @@ return Fun;
cmsPluginParametricCurves NewCurvePlugin = {
{ cmsPluginMagicNumber, 2000, cmsPluginParametricCurveSig, NULL },
1, {TYPE_709}, {5}, Rec709Math};
-
+#endif