]> granicus.if.org Git - php/commitdiff
- add support for entities in hexadecimal format, like © can
authorPierre Joye <pajoye@php.net>
Wed, 23 Aug 2006 20:21:34 +0000 (20:21 +0000)
committerPierre Joye <pajoye@php.net>
Wed, 23 Aug 2006 20:21:34 +0000 (20:21 +0000)
  be passed as &#169 or &#xA9;

ext/gd/libgd/gdft.c

index a09bdcba6d6a8a9ffb98496db6981829019bafc8..6603cd64c31bbf94396073dd036b7696eb611c99 100644 (file)
@@ -207,12 +207,28 @@ static int gdTcl_UtfToUniChar (char *str, Tcl_UniChar * chPtr)
 
                byte = *((unsigned char *) (str + 1));
                if (byte == '#') {
-                       for (i = 2; i < 8; i++) {
-                               byte = *((unsigned char *) (str + i));
-                               if (byte >= '0' && byte <= '9') {
-                                       n = (n * 10) + (byte - '0');
-                               } else {
-                                       break;
+                       byte = *((unsigned char *) (str + 2));
+                       if (byte == 'x' || byte == 'X') {
+                               for (i = 3; i < 8; i++) {
+                                       byte = *((unsigned char *) (str + i));
+                                       if (byte >= 'A' && byte <= 'F')
+                                               byte = byte - 'A' + 10;
+                                       else if (byte >= 'a' && byte <= 'f')
+                                               byte = byte - 'a' + 10;
+                                       else if (byte >= '0' && byte <= '9')
+                                               byte = byte - '0';
+                                       else
+                                               break;
+                                       n = (n * 16) + byte;
+                               }
+                       } else {
+                               for (i = 2; i < 8; i++) {
+                                       byte = *((unsigned char *) (str + i));
+                                       if (byte >= '0' && byte <= '9') {
+                                               n = (n * 10) + (byte - '0');
+                                       } else {
+                                               break;
+                                       }
                                }
                        }
                        if (byte == ';') {