fontconfig: Branch 'master'

[email protected] (Akira TAGOH)
Newsgroups gmane.comp.fonts.fontconfig
Message-ID <[email protected]>
 doc/fcpattern.fncs      |   17 +++++++++++++++++
 fontconfig/fontconfig.h |   12 +++++++++++-
 src/fcint.h             |    9 +++------
 src/fcpat.c             |   18 ++++++++++++++++--
 4 files changed, 47 insertions(+), 9 deletions(-)

New commits:
commit ee2000494c4c8367fe20593709a979d158687855
Author: Akira TAGOH <[email protected]>
Date:   Tue Jul 28 12:48:40 2015 +0900

    Add FcPatternGetWithBinding() to obtain the binding type of the value in FcPattern.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=19375

diff --git a/doc/fcpattern.fncs b/doc/fcpattern.fncs
index 1049d77..e1987ff 100644
--- a/doc/fcpattern.fncs
+++ b/doc/fcpattern.fncs
@@ -199,6 +199,23 @@ any existing list of values.
 @@
 
 @RET@		FcResult
+@FUNC@		FcPatternGetWithBinding
+@TYPE1@		FcPattern *			@ARG1@		p
+@TYPE2@		const char *			@ARG2@		object
+@TYPE3@		int%  	   			@ARG3@		id
+@TYPE4@		FcValue *			@ARG4@		v
+@TYPE5@		FcValueBinding *		@ARG5@		b
+@PURPOSE@	Return a value with binding from a pattern
+@DESC@
+Returns in <parameter>v</parameter> the <parameter>id</parameter>'th value
+and <parameter>b</parameter> binding for that associated with the property
+<parameter>object</parameter>.
+The Value returned is not a copy, but rather refers to the data stored
+within the pattern directly.  Applications must not free this value.
+@SINCE@		2.13.0
+@@
+
+@RET@		FcResult
 @FUNC@		FcPatternGet
 @TYPE1@		FcPattern *			@ARG1@		p
 @TYPE2@		const char *			@ARG2@		object
diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h
index 2e35b6b..9535c56 100644
--- a/fontconfig/fontconfig.h
+++ b/fontconfig/fontconfig.h
@@ -28,6 +28,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdarg.h>
+#include <limits.h>
 
 #if defined(__GNUC__) && (__GNUC__ >= 4)
 #define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0)))
@@ -236,6 +237,12 @@ typedef enum _FcResult {
     FcResultOutOfMemory
 } FcResult;
 
+typedef enum _FcValueBinding {
+    FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame,
+    /* to make sure sizeof (FcValueBinding) == 4 even with -fshort-enums */
+    FcValueBindingEnd = INT_MAX
+} FcValueBinding;
+
 typedef struct _FcPattern   FcPattern;
 
 typedef struct _FcLangSet   FcLangSet;
@@ -837,7 +844,10 @@ FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append
     
 FcPublic FcResult
 FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
-    
+
+FcPublic FcResult
+FcPatternGetWithBinding (const FcPattern *p, const char *object, int id, FcValue *v, FcValueBinding *b);
+
 FcPublic FcBool
 FcPatternDel (FcPattern *p, const char *object);
 
diff --git a/src/fcint.h b/src/fcint.h
index dad34c5..360d80d 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -116,12 +116,6 @@ extern pfnSHGetFolderPathA pSHGetFolderPathA;
 
 FC_ASSERT_STATIC (sizeof (FcRef) == sizeof (int));
 
-typedef enum _FcValueBinding {
-    FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame,
-    /* to make sure sizeof (FcValueBinding) == 4 even with -fshort-enums */
-    FcValueBindingEnd = INT_MAX
-} FcValueBinding;
-
 #define FcStrdup(s) ((FcChar8 *) strdup ((const char *) (s)))
 #define FcFree(s) (free ((FcChar8 *) (s)))
 
@@ -1000,6 +994,9 @@ FcPrivate FcBool
 FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
 
 FcPrivate FcResult
+FcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b);
+
+FcPrivate FcResult
 FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
 
 FcPrivate FcBool
diff --git a/src/fcpat.c b/src/fcpat.c
index 3ef1ed2..cc303c6 100644
--- a/src/fcpat.c
+++ b/src/fcpat.c
@@ -883,7 +883,7 @@ FcPatternAddRange (FcPattern *p, const char *object, const FcRange *r)
 }
 
 FcResult
-FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
+FcPatternObjectGetWithBinding (const FcPattern *p, FcObject object, int id, FcValue *v, FcValueBinding *b)
 {
     FcPatternElt   *e;
     FcValueListPtr l;
@@ -898,6 +898,8 @@ FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
 	if (!id)
 	{
 	    *v = FcValueCanonicalize(&l->value);
+	    if (b)
+		*b = l->binding;
 	    return FcResultMatch;
 	}
 	id--;
@@ -906,9 +908,21 @@ FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
 }
 
 FcResult
+FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
+{
+    return FcPatternObjectGetWithBinding (p, object, id, v, NULL);
+}
+
+FcResult
+FcPatternGetWithBinding (const FcPattern *p, const char *object, int id, FcValue *v, FcValueBinding *b)
+{
+    return FcPatternObjectGetWithBinding (p, FcObjectFromName (object), id, v, b);
+}
+
+FcResult
 FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v)
 {
-    return FcPatternObjectGet (p, FcObjectFromName (object), id, v);
+    return FcPatternObjectGetWithBinding (p, FcObjectFromName (object), id, v, NULL);
 }
 
 FcResult
_______________________________________________
Fontconfig mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/fontconfig
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.