LCOV - code coverage report
Current view: top level - ext/http - php_http_utf8.h (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 24 29 82.8 %
Date: 2015-02-17 20:30:22 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :     +--------------------------------------------------------------------+
       3             :     | PECL :: http                                                       |
       4             :     +--------------------------------------------------------------------+
       5             :     | Redistribution and use in source and binary forms, with or without |
       6             :     | modification, are permitted provided that the conditions mentioned |
       7             :     | in the accompanying LICENSE file are met.                          |
       8             :     +--------------------------------------------------------------------+
       9             :     | Copyright (c) 2004-2014, Michael Wallner <mike@php.net>            |
      10             :     +--------------------------------------------------------------------+
      11             : */
      12             : 
      13             : #ifndef PHP_HTTP_UTF8_H
      14             : #define PHP_HTTP_UTF8_H
      15             : 
      16             : typedef struct utf8_range {
      17             :         unsigned int start;
      18             :         unsigned int end;
      19             :         unsigned char step;
      20             : } utf8_range_t;
      21             : 
      22             : static const unsigned char utf8_mblen[256] = {
      23             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      24             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      25             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      26             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      27             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      28             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      29             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      30             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      31             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      32             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      33             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      34             :     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
      35             :     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
      36             :     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
      37             :     3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
      38             :     4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6
      39             : };
      40             : 
      41             : static const unsigned char utf8_mask[] = {
      42             :                 0, 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01
      43             : };
      44             : 
      45             : static const utf8_range_t utf8_ranges[] = {
      46             : /* BEGIN::UTF8TABLE */
      47             :         {    0x0041,     0x005A, 1},
      48             :         {    0x0061,     0x007A, 1},
      49             :         {    0x00AA,          0, 0},
      50             :         {    0x00B5,          0, 0},
      51             :         {    0x00BA,          0, 0},
      52             :         {    0x00C0,     0x00D6, 1},
      53             :         {    0x00D8,     0x00F6, 1},
      54             :         {    0x00F8,     0x00FF, 1},
      55             :         {    0x0100,     0x017F, 1},
      56             :         {    0x0180,     0x024F, 1},
      57             :         {    0x0250,     0x02AF, 1},
      58             :         {    0x02B0,     0x02C1, 1},
      59             :         {    0x02C6,     0x02D1, 1},
      60             :         {    0x02E0,     0x02E4, 1},
      61             :         {    0x02EE,          0, 0},
      62             :         {    0x0345,          0, 0},
      63             :         {    0x0370,     0x0373, 1},
      64             :         {    0x0376,     0x0377, 1},
      65             :         {    0x037A,     0x037D, 1},
      66             :         {    0x0386,          0, 0},
      67             :         {    0x0388,     0x038A, 1},
      68             :         {    0x038C,          0, 0},
      69             :         {    0x038E,     0x03A1, 1},
      70             :         {    0x03A3,     0x03CE, 1},
      71             :         {    0x03D0,     0x03F5, 1},
      72             :         {    0x03F7,     0x03FF, 1},
      73             :         {    0x0400,     0x0481, 1},
      74             :         {    0x048A,     0x04FF, 1},
      75             :         {    0x0500,     0x0523, 1},
      76             :         {    0x0531,     0x0556, 1},
      77             :         {    0x0559,          0, 0},
      78             :         {    0x0561,     0x0587, 1},
      79             :         {    0x05D0,     0x05EA, 1},
      80             :         {    0x05F0,     0x05F2, 1},
      81             :         {    0x0621,     0x064A, 1},
      82             :         {    0x066E,     0x066F, 1},
      83             :         {    0x0671,     0x06D3, 1},
      84             :         {    0x06D5,          0, 0},
      85             :         {    0x06E5,     0x06E6, 1},
      86             :         {    0x06EE,     0x06EF, 1},
      87             :         {    0x06FA,     0x06FC, 1},
      88             :         {    0x06FF,          0, 0},
      89             :         {    0x0710,          0, 0},
      90             :         {    0x0712,     0x072F, 1},
      91             :         {    0x074D,     0x074F, 1},
      92             :         {    0x0750,     0x077F, 1},
      93             :         {    0x0780,     0x07A5, 1},
      94             :         {    0x07B1,          0, 0},
      95             :         {    0x07C0,     0x07EA, 1},
      96             :         {    0x07F4,     0x07F5, 1},
      97             :         {    0x07FA,          0, 0},
      98             :         {    0x0901,     0x0939, 1},
      99             :         {    0x093C,     0x094D, 1},
     100             :         {    0x0950,     0x0954, 1},
     101             :         {    0x0958,     0x0961, 1},
     102             :         {    0x0962,          0, 0},
     103             :         {    0x0963,          0, 0},
     104             :         {    0x0972,          0, 0},
     105             :         {    0x097B,     0x097F, 1},
     106             :         {    0x0981,     0x0983, 1},
     107             :         {    0x0985,     0x098C, 1},
     108             :         {    0x098F,          0, 0},
     109             :         {    0x0990,          0, 0},
     110             :         {    0x0993,     0x09A8, 1},
     111             :         {    0x09AA,     0x09B0, 1},
     112             :         {    0x09B2,          0, 0},
     113             :         {    0x09B6,     0x09B9, 1},
     114             :         {    0x09BC,     0x09C4, 1},
     115             :         {    0x09C7,          0, 0},
     116             :         {    0x09C8,          0, 0},
     117             :         {    0x09CB,     0x09CE, 1},
     118             :         {    0x09D7,          0, 0},
     119             :         {    0x09DC,          0, 0},
     120             :         {    0x09DD,          0, 0},
     121             :         {    0x09DF,     0x09E3, 1},
     122             :         {    0x09F0,     0x09FA, 1},
     123             :         {    0x0A01,     0x0A03, 1},
     124             :         {    0x0A05,     0x0A0A, 1},
     125             :         {    0x0A0F,          0, 0},
     126             :         {    0x0A10,          0, 0},
     127             :         {    0x0A13,     0x0A28, 1},
     128             :         {    0x0A2A,     0x0A30, 1},
     129             :         {    0x0A32,          0, 0},
     130             :         {    0x0A33,          0, 0},
     131             :         {    0x0A35,          0, 0},
     132             :         {    0x0A36,          0, 0},
     133             :         {    0x0A38,          0, 0},
     134             :         {    0x0A39,          0, 0},
     135             :         {    0x0A3C,          0, 0},
     136             :         {    0x0A3E,     0x0A42, 1},
     137             :         {    0x0A47,          0, 0},
     138             :         {    0x0A48,          0, 0},
     139             :         {    0x0A4B,     0x0A4D, 1},
     140             :         {    0x0A51,          0, 0},
     141             :         {    0x0A59,     0x0A5C, 1},
     142             :         {    0x0A5E,          0, 0},
     143             :         {    0x0A70,     0x0A75, 1},
     144             :         {    0x0A81,     0x0A83, 1},
     145             :         {    0x0A85,     0x0A8D, 1},
     146             :         {    0x0A8F,     0x0A91, 1},
     147             :         {    0x0A93,     0x0AA8, 1},
     148             :         {    0x0AAA,     0x0AB0, 1},
     149             :         {    0x0AB2,          0, 0},
     150             :         {    0x0AB3,          0, 0},
     151             :         {    0x0AB5,     0x0AB9, 1},
     152             :         {    0x0ABC,     0x0AC5, 1},
     153             :         {    0x0AC7,     0x0AC9, 1},
     154             :         {    0x0ACB,     0x0ACD, 1},
     155             :         {    0x0AD0,          0, 0},
     156             :         {    0x0AE0,     0x0AE3, 1},
     157             :         {    0x0AF1,          0, 0},
     158             :         {    0x0B01,     0x0B03, 1},
     159             :         {    0x0B05,     0x0B0C, 1},
     160             :         {    0x0B0F,          0, 0},
     161             :         {    0x0B10,          0, 0},
     162             :         {    0x0B13,     0x0B28, 1},
     163             :         {    0x0B2A,     0x0B30, 1},
     164             :         {    0x0B32,          0, 0},
     165             :         {    0x0B33,          0, 0},
     166             :         {    0x0B35,     0x0B39, 1},
     167             :         {    0x0B3C,     0x0B44, 1},
     168             :         {    0x0B47,     0x0B48, 1},
     169             :         {    0x0B4B,     0x0B4D, 1},
     170             :         {    0x0B56,     0x0B57, 1},
     171             :         {    0x0B5C,          0, 0},
     172             :         {    0x0B5D,          0, 0},
     173             :         {    0x0B5F,     0x0B63, 1},
     174             :         {    0x0B70,          0, 0},
     175             :         {    0x0B71,          0, 0},
     176             :         {    0x0B82,          0, 0},
     177             :         {    0x0B83,          0, 0},
     178             :         {    0x0B85,     0x0B8A, 1},
     179             :         {    0x0B8E,     0x0B90, 1},
     180             :         {    0x0B92,     0x0B95, 1},
     181             :         {    0x0B99,          0, 0},
     182             :         {    0x0B9A,          0, 0},
     183             :         {    0x0B9C,          0, 0},
     184             :         {    0x0B9E,          0, 0},
     185             :         {    0x0B9F,          0, 0},
     186             :         {    0x0BA3,          0, 0},
     187             :         {    0x0BA4,          0, 0},
     188             :         {    0x0BA8,     0x0BAA, 1},
     189             :         {    0x0BAE,     0x0BB9, 1},
     190             :         {    0x0BBE,     0x0BC2, 1},
     191             :         {    0x0BC6,     0x0BC8, 1},
     192             :         {    0x0BCA,     0x0BCD, 1},
     193             :         {    0x0BD0,          0, 0},
     194             :         {    0x0BD7,          0, 0},
     195             :         {    0x0BF0,     0x0BFA, 1},
     196             :         {    0x0C01,     0x0C03, 1},
     197             :         {    0x0C05,     0x0C0C, 1},
     198             :         {    0x0C0E,     0x0C10, 1},
     199             :         {    0x0C12,     0x0C28, 1},
     200             :         {    0x0C2A,     0x0C33, 1},
     201             :         {    0x0C35,     0x0C39, 1},
     202             :         {    0x0C3D,     0x0C44, 1},
     203             :         {    0x0C46,     0x0C48, 1},
     204             :         {    0x0C4A,     0x0C4D, 1},
     205             :         {    0x0C55,     0x0C56, 1},
     206             :         {    0x0C58,     0x0C59, 1},
     207             :         {    0x0C60,     0x0C63, 1},
     208             :         {    0x0C82,     0x0C83, 1},
     209             :         {    0x0C85,     0x0C8C, 1},
     210             :         {    0x0C8E,     0x0C90, 1},
     211             :         {    0x0C92,     0x0CA8, 1},
     212             :         {    0x0CAA,     0x0CB3, 1},
     213             :         {    0x0CB5,     0x0CB9, 1},
     214             :         {    0x0CBC,     0x0CC4, 1},
     215             :         {    0x0CC6,     0x0CC8, 1},
     216             :         {    0x0CCA,     0x0CCD, 1},
     217             :         {    0x0CD5,     0x0CD6, 1},
     218             :         {    0x0CDE,          0, 0},
     219             :         {    0x0CE0,     0x0CE3, 1},
     220             :         {    0x0CF1,          0, 0},
     221             :         {    0x0CF2,          0, 0},
     222             :         {    0x0D02,     0x0D03, 1},
     223             :         {    0x0D05,     0x0D0C, 1},
     224             :         {    0x0D0E,     0x0D10, 1},
     225             :         {    0x0D12,     0x0D28, 1},
     226             :         {    0x0D2A,     0x0D39, 1},
     227             :         {    0x0D3D,     0x0D44, 1},
     228             :         {    0x0D46,     0x0D48, 1},
     229             :         {    0x0D4A,     0x0D4D, 1},
     230             :         {    0x0D57,          0, 0},
     231             :         {    0x0D60,     0x0D63, 1},
     232             :         {    0x0D79,     0x0D7F, 1},
     233             :         {    0x0D82,     0x0D83, 1},
     234             :         {    0x0D85,     0x0D96, 1},
     235             :         {    0x0D9A,     0x0DB1, 1},
     236             :         {    0x0DB3,     0x0DBB, 1},
     237             :         {    0x0DBD,          0, 0},
     238             :         {    0x0DC0,     0x0DC6, 1},
     239             :         {    0x0DCA,          0, 0},
     240             :         {    0x0DCF,     0x0DD4, 1},
     241             :         {    0x0DD6,          0, 0},
     242             :         {    0x0DD8,     0x0DDF, 1},
     243             :         {    0x0DF2,     0x0DF4, 1},
     244             :         {    0x0E01,     0x0E2E, 1},
     245             :         {    0x0E30,     0x0E3A, 1},
     246             :         {    0x0E40,     0x0E45, 1},
     247             :         {    0x0E47,     0x0E4E, 1},
     248             :         {    0x0E81,     0x0E82, 1},
     249             :         {    0x0E84,          0, 0},
     250             :         {    0x0E87,     0x0E88, 1},
     251             :         {    0x0E8A,          0, 0},
     252             :         {    0x0E8D,          0, 0},
     253             :         {    0x0E94,     0x0E97, 1},
     254             :         {    0x0E99,     0x0E9F, 1},
     255             :         {    0x0EA1,     0x0EA3, 1},
     256             :         {    0x0EA5,          0, 0},
     257             :         {    0x0EA7,          0, 0},
     258             :         {    0x0EAA,     0x0EAB, 1},
     259             :         {    0x0EAD,     0x0EB0, 1},
     260             :         {    0x0EB2,     0x0EB3, 1},
     261             :         {    0x0EBD,          0, 0},
     262             :         {    0x0EC0,     0x0EC4, 1},
     263             :         {    0x0EC6,          0, 0},
     264             :         {    0x0EDC,     0x0EDD, 1},
     265             :         {    0x0F00,          0, 0},
     266             :         {    0x0F40,     0x0F47, 1},
     267             :         {    0x0F49,     0x0F6C, 1},
     268             :         {    0x0F88,     0x0F8B, 1},
     269             :         {    0x1000,     0x102A, 1},
     270             :         {    0x1050,     0x1055, 1},
     271             :         {    0x105A,     0x105D, 1},
     272             :         {    0x1061,          0, 0},
     273             :         {    0x0165,          0, 0},
     274             :         {    0x1066,          0, 0},
     275             :         {    0x106E,     0x1070, 1},
     276             :         {    0x1075,     0x1081, 1},
     277             :         {    0x108E,          0, 0},
     278             :         {    0x10A0,     0x10C5, 1},
     279             :         {    0x10D0,     0x10FA, 1},
     280             :         {    0x10FC,          0, 0},
     281             :         {    0x1100,     0x1159, 1},
     282             :         {    0x115F,     0x11A2, 1},
     283             :         {    0x11A8,     0x11F9, 1},
     284             :         {    0x1200,     0x1248, 1},
     285             :         {    0x124A,     0x124D, 1},
     286             :         {    0x1250,     0x1256, 1},
     287             :         {    0x1258,          0, 0},
     288             :         {    0x125A,     0x125D, 1},
     289             :         {    0x1260,     0x1288, 1},
     290             :         {    0x128A,     0x128D, 1},
     291             :         {    0x1290,     0x12B0, 1},
     292             :         {    0x12B2,     0x12B5, 1},
     293             :         {    0x12B8,     0x12BE, 1},
     294             :         {    0x12C0,          0, 0},
     295             :         {    0x12C2,     0x12C5, 1},
     296             :         {    0x12C8,     0x12D6, 1},
     297             :         {    0x12D8,     0x1310, 1},
     298             :         {    0x1312,     0x1315, 1},
     299             :         {    0x1318,     0x135A, 1},
     300             :         {    0x1380,     0x138F, 1},
     301             :         {    0x13A0,     0x13F4, 1},
     302             :         {    0x1401,     0x166C, 1},
     303             :         {    0x166F,     0x1676, 1},
     304             :         {    0x1681,     0x169A, 1},
     305             :         {    0x16A0,     0x16EA, 1},
     306             :         {    0x16EE,     0x16F0, 1},
     307             :         {    0x1700,     0x170C, 1},
     308             :         {    0x170E,     0x1711, 1},
     309             :         {    0x1720,     0x1731, 1},
     310             :         {    0x1740,     0x1751, 1},
     311             :         {    0x1760,     0x176C, 1},
     312             :         {    0x176E,     0x1770, 1},
     313             :         {    0x1780,     0x17B3, 1},
     314             :         {    0x17D7,          0, 0},
     315             :         {    0x17DC,          0, 0},
     316             :         {    0x1820,     0x1877, 1},
     317             :         {    0x1880,     0x18A8, 1},
     318             :         {    0x18AA,          0, 0},
     319             :         {    0x1900,     0x191C, 1},
     320             :         {    0x1946,     0x194F, 1},
     321             :         {    0x1950,     0x196D, 1},
     322             :         {    0x1970,     0x1974, 1},
     323             :         {    0x1980,     0x19A9, 1},
     324             :         {    0x19C1,     0x19C7, 1},
     325             :         {    0x19D0,     0x19D9, 1},
     326             :         {    0x1A00,     0x1A16, 1},
     327             :         {    0x1B05,     0x1B33, 1},
     328             :         {    0x1B45,     0x1B4B, 1},
     329             :         {    0x1B50,     0x1B59, 1},
     330             :         {    0x1B83,     0x1BA0, 1},
     331             :         {    0x1BAE,     0x1BAF, 1},
     332             :         {    0x1C00,     0x1C23, 1},
     333             :         {    0x1C4D,     0x1C4F, 1},
     334             :         {    0x1C5A,     0x1C7D, 1},
     335             :         {    0x1D00,     0x1DBF, 1},
     336             :         {    0x1E00,     0x1E9F, 1},
     337             :         {    0x1EA0,     0x1EFF, 1},
     338             :         {    0x1F00,     0x1F15, 1},
     339             :         {    0x1F18,     0x1F1D, 1},
     340             :         {    0x1F20,     0x1F45, 1},
     341             :         {    0x1F48,     0x1F4D, 1},
     342             :         {    0x1F50,     0x1F57, 1},
     343             :         {    0x1F59,          0, 0},
     344             :         {    0x1F5B,          0, 0},
     345             :         {    0x1F5D,          0, 0},
     346             :         {    0x1F5F,     0x1F7D, 1},
     347             :         {    0x1F80,     0x1FB4, 1},
     348             :         {    0x1FB6,     0x1FBC, 1},
     349             :         {    0x1FBE,          0, 0},
     350             :         {    0x1FC2,     0x1FC4, 1},
     351             :         {    0x1FC6,     0x1FCC, 1},
     352             :         {    0x1FD0,     0x1FD3, 1},
     353             :         {    0x1FD6,     0x1FDB, 1},
     354             :         {    0x1FE0,     0x1FEC, 1},
     355             :         {    0x1FF2,     0x1FF4, 1},
     356             :         {    0x1FF6,     0x1FFC, 1},
     357             :         {    0x2071,          0, 0},
     358             :         {    0x207F,          0, 0},
     359             :         {    0x2090,     0x2094, 1},
     360             :         {    0x2102,          0, 0},
     361             :         {    0x2107,          0, 0},
     362             :         {    0x210A,     0x2113, 1},
     363             :         {    0x2115,          0, 0},
     364             :         {    0x2119,     0x211D, 1},
     365             :         {    0x2124,          0, 0},
     366             :         {    0x2126,          0, 0},
     367             :         {    0x2128,     0x212D, 1},
     368             :         {    0x212F,     0x2139, 1},
     369             :         {    0x213C,     0x213F, 1},
     370             :         {    0x2145,     0x2149, 1},
     371             :         {    0x214E,          0, 0},
     372             :         {    0x2160,     0x2188, 1},
     373             :         {    0x249C,     0x24E9, 1},
     374             :         {    0x2C00,     0x2C2E, 1},
     375             :         {    0x2C30,     0x2C5E, 1},
     376             :         {    0x2C60,     0x2C6F, 1},
     377             :         {    0x2C71,     0x2C7D, 1},
     378             :         {    0x2C80,     0x2CE4, 1},
     379             :         {    0x2D00,     0x2D25, 1},
     380             :         {    0x2D30,     0x2D65, 1},
     381             :         {    0x2D6F,          0, 0},
     382             :         {    0x2D80,     0x2D96, 1},
     383             :         {    0x2DA0,     0x2DA6, 1},
     384             :         {    0x2DA8,     0x2DAE, 1},
     385             :         {    0x2DB0,     0x2DB6, 1},
     386             :         {    0x2DB8,     0x2DBE, 1},
     387             :         {    0x2DC0,     0x2DC6, 1},
     388             :         {    0x2DC8,     0x2DCE, 1},
     389             :         {    0x2DD0,     0x2DD6, 1},
     390             :         {    0x2DD8,     0x2DDE, 1},
     391             :         {    0x3005,     0x3007, 1},
     392             :         {    0x3021,     0x3029, 1},
     393             :         {    0x3031,     0x3035, 1},
     394             :         {    0x3038,     0x303C, 1},
     395             :         {    0x3041,     0x3096, 1},
     396             :         {    0x309D,     0x309F, 1},
     397             :         {    0x30A1,     0x30FA, 1},
     398             :         {    0x30FC,     0x30FF, 1},
     399             :         {    0x3105,     0x312D, 1},
     400             :         {    0x3131,     0x318E, 1},
     401             :         {    0x31A0,     0x31B7, 1},
     402             :         {    0x31F0,     0x31FF, 1},
     403             :         {    0x3400,     0x4DB5, 1},
     404             :         {    0x4E00,     0x9FBB, 1},
     405             :         {    0xA000,     0xA48C, 1},
     406             :         {    0xA500,     0xA60B, 1},
     407             :         {    0xA610,     0xA61F, 1},
     408             :         {    0xA62A,     0xA62B, 1},
     409             :         {    0xA640,     0xA65F, 1},
     410             :         {    0xA662,     0xA66E, 1},
     411             :         {    0xA680,     0xA697, 1},
     412             :         {    0xA717,     0xA71F, 1},
     413             :         {    0xA722,     0xA78C, 1},
     414             :         {    0xA7FB,     0xA7FF, 1},
     415             :         {    0xA800,          0, 0},
     416             :         {    0xA801,          0, 0},
     417             :         {    0xA803,     0xA805, 1},
     418             :         {    0xA807,     0xA80A, 1},
     419             :         {    0xA80C,     0xA822, 1},
     420             :         {    0xA840,     0xA873, 1},
     421             :         {    0xA882,     0xA8B3, 1},
     422             :         {    0xA90A,     0xA92D, 1},
     423             :         {    0xA930,     0xA946, 1},
     424             :         {    0xAA00,     0xAA28, 1},
     425             :         {    0xAA40,     0xAA42, 1},
     426             :         {    0xAA44,     0xAA4B, 1},
     427             :         {    0xAC00,     0xD7A3, 1},
     428             :         {    0xF900,     0xFA2D, 1},
     429             :         {    0xFA30,     0xFA6A, 1},
     430             :         {    0xFA70,     0xFAD9, 1},
     431             :         {    0xFB00,     0xFB06, 1},
     432             :         {    0xFB13,     0xFB17, 1},
     433             :         {    0xFB1D,          0, 0},
     434             :         {    0xFB1F,     0xFB28, 1},
     435             :         {    0xFB2A,     0xFB36, 1},
     436             :         {    0xFB38,     0xFB3C, 1},
     437             :         {    0xFB3E,          0, 0},
     438             :         {    0xFB40,          0, 0},
     439             :         {    0xFB41,          0, 0},
     440             :         {    0xFB43,          0, 0},
     441             :         {    0xFB44,          0, 0},
     442             :         {    0xFB46,     0xFB4F, 1},
     443             :         {    0xFB50,     0xFBB1, 1},
     444             :         {    0xFBD3,     0xFD3D, 1},
     445             :         {    0xFD50,     0xFD8F, 1},
     446             :         {    0xFD92,     0xFDC7, 1},
     447             :         {    0xFDF0,     0xFDFB, 1},
     448             :         {    0xFE70,     0xFE74, 1},
     449             :         {    0xFE76,     0xFEFC, 1},
     450             :         {    0xFF21,     0xFF3A, 1},
     451             :         {    0xFF41,     0xFF5A, 1},
     452             :         {    0xFF66,     0xFFBE, 1},
     453             :         {    0xFFC2,     0xFFC7, 1},
     454             :         {    0xFFCA,     0xFFCF, 1},
     455             :         {    0xFFD2,     0xFFD7, 1},
     456             :         {    0xFFDA,     0xFFDC, 1},
     457             :         {0x00010000, 0x0001000B, 1},
     458             :         {0x0001000D, 0x00010026, 1},
     459             :         {0x00010028, 0x0001003A, 1},
     460             :         {0x0001003C, 0x0001003D, 1},
     461             :         {0x0001003F, 0x0001004D, 1},
     462             :         {0x00010050, 0x0001005D, 1},
     463             :         {0x00010080, 0x000100FA, 1},
     464             :         {0x00010140, 0x00010174, 1},
     465             :         {0x00010280, 0x0001029C, 1},
     466             :         {0x000102A0, 0x000102D0, 1},
     467             :         {0x00010300, 0x0001031E, 1},
     468             :         {0x00010330, 0x0001034A, 1},
     469             :         {0x00010380, 0x0001039D, 1},
     470             :         {0x000103A0, 0x000103C3, 1},
     471             :         {0x000103C8, 0x000103CF, 1},
     472             :         {0x000103D1, 0x000103D5, 1},
     473             :         {0x00010400, 0x0001044F, 1},
     474             :         {0x00010450, 0x0001047F, 1},
     475             :         {0x00010480, 0x0001049D, 1},
     476             :         {0x000104A0, 0x000104A9, 1},
     477             :         {0x00010800, 0x00010805, 1},
     478             :         {0x00010808,          0, 0},
     479             :         {0x0001080A, 0x00010835, 1},
     480             :         {0x00010837, 0x00010838, 1},
     481             :         {0x0001083C,          0, 0},
     482             :         {0x0001083F,          0, 0},
     483             :         {0x00010900, 0x00010915, 1},
     484             :         {0x00010A00,          0, 0},
     485             :         {0x00010A10, 0x00010A13, 1},
     486             :         {0x00010A15, 0x00010A17, 1},
     487             :         {0x00010A19, 0x00010A33, 1},
     488             :         {0x00012000, 0x0001236E, 1},
     489             :         {0x00012400, 0x00012462, 1},
     490             :         {0x0001D400, 0x0001D454, 1},
     491             :         {0x0001D456, 0x0001D49C, 1},
     492             :         {0x0001D49E, 0x0001D49F, 1},
     493             :         {0x0001D4A2,          0, 0},
     494             :         {0x0001D4A5, 0x0001D4A6, 1},
     495             :         {0x0001D4A9, 0x0001D4AC, 1},
     496             :         {0x0001D4AE, 0x0001D4B9, 1},
     497             :         {0x0001D4BB,          0, 0},
     498             :         {0x0001D4BD, 0x0001D4C3, 1},
     499             :         {0x0001D4C5, 0x0001D505, 1},
     500             :         {0x0001D507, 0x0001D50A, 1},
     501             :         {0x0001D50D, 0x0001D514, 1},
     502             :         {0x0001D516, 0x0001D51C, 1},
     503             :         {0x0001D51E, 0x0001D539, 1},
     504             :         {0x0001D53B, 0x0001D53E, 1},
     505             :         {0x0001D540, 0x0001D544, 1},
     506             :         {0x0001D546,          0, 0},
     507             :         {0x0001D54A, 0x0001D550, 1},
     508             :         {0x0001D552, 0x0001D6A5, 1},
     509             :         {0x0001D6A8, 0x0001D6C0, 1},
     510             :         {0x0001D6C2, 0x0001D6DA, 1},
     511             :         {0x0001D6DC, 0x0001D6FA, 1},
     512             :         {0x0001D6FC, 0x0001D714, 1},
     513             :         {0x0001D716, 0x0001D734, 1},
     514             :         {0x0001D736, 0x0001D74E, 1},
     515             :         {0x0001D750, 0x0001D76E, 1},
     516             :         {0x0001D770, 0x0001D788, 1},
     517             :         {0x0001D78A, 0x0001D7A8, 1},
     518             :         {0x0001D7AA, 0x0001D7C2, 1},
     519             :         {0x0001D7C4, 0x0001D7CB, 1},
     520             :         {0x0001D7CE, 0x0001D7FF, 1},
     521             :         {0x00020000, 0x0002A6D6, 1},
     522             :         {0x0002F800, 0x0002FA1D, 1},
     523             :         {    0x0660,     0x0669, 1},
     524             :         {    0x06F0,     0x06F9, 1},
     525             :         {    0x0966,     0x096F, 1},
     526             :         {    0x09E6,     0x09EF, 1},
     527             :         {    0x0A66,     0x0A6F, 1},
     528             :         {    0x0AE6,     0x0AEF, 1},
     529             :         {    0x0B66,     0x0B6F, 1},
     530             :         {    0x0BE6,     0x0BEF, 1},
     531             :         {    0x0C66,     0x0C6F, 1},
     532             :         {    0x0C78,     0x0C7F, 1},
     533             :         {    0x0CE6,     0x0CEF, 1},
     534             :         {    0x0D66,     0x0D75, 1},
     535             :         {    0x0D70,     0x0D75, 1},
     536             :         {    0x0E50,     0x0E59, 1},
     537             :         {    0x0ED0,     0x0ED9, 1},
     538             :         {    0x0F20,     0x0F29, 1},
     539             :         {    0x1040,     0x1049, 1},
     540             :         {    0x17E0,     0x17E9, 1},
     541             :         {    0x1810,     0x1819, 1},
     542             :         {    0x1BB0,     0x1BB9, 1},
     543             :         {    0x1C40,     0x1C49, 1},
     544             :         {    0x1C50,     0x1C59, 1},
     545             :         {    0xA620,     0xA629, 1},
     546             :         {    0xA8D0,     0xA8D9, 1},
     547             :         {    0xA900,     0xA909, 1},
     548             :         {    0xAA50,     0xAA59, 1},
     549             :         {    0xFF10,     0xFF19, 1},
     550             : 
     551             : /* END::UTF8TABLE */
     552             : };
     553             : 
     554          64 : static inline size_t utf8towc(unsigned *wc, const unsigned char *uc, size_t len)
     555             : {
     556          64 :         unsigned char ub = utf8_mblen[*uc];
     557             : 
     558          64 :         if (!ub || ub > len || ub > 4) {
     559           1 :                 return 0;
     560             :         }
     561             : 
     562          63 :         *wc = *uc & utf8_mask[ub];
     563             : 
     564          63 :         switch (ub) {
     565             :         case 4:
     566           3 :                 if ((uc[1] & 0xc0) != 0x80) {
     567           0 :                         return 0;
     568             :                 }
     569           3 :                 *wc <<= 6;
     570           3 :                 *wc += *++uc & 0x3f;
     571             :                 /* no break */
     572             :         case 3:
     573           4 :                 if ((uc[1] & 0xc0) != 0x80) {
     574           0 :                         return 0;
     575             :                 }
     576           4 :                 *wc <<= 6;
     577           4 :                 *wc += *++uc & 0x3f;
     578             :                 /* no break */
     579             :         case 2:
     580          23 :                 if ((uc[1] & 0xc0) != 0x80) {
     581           0 :                         return 0;
     582             :                 }
     583          23 :                 *wc <<= 6;
     584          23 :                 *wc += *++uc & 0x3f;
     585             :                 /* no break */
     586             :         case 1:
     587          63 :                 break;
     588             : 
     589             :         default:
     590           0 :                 return 0;
     591             :         }
     592             : 
     593          63 :         return ub;
     594             : }
     595             : 
     596          57 : static inline zend_bool isualpha(unsigned ch)
     597             : {
     598          57 :         unsigned i = 0, j;
     599             : 
     600          57 :         PHP_HTTP_DUFF(sizeof(utf8_ranges)/sizeof(utf8_range_t),
     601             :                 if (utf8_ranges[i].start == ch) {
     602             :                         return 1;
     603             :                 } else if (utf8_ranges[i].start <= ch && utf8_ranges[i].end >= ch) {
     604             :                         if (utf8_ranges[i].step == 1) {
     605             :                                 return 1;
     606             :                         }
     607             :                         for (j = utf8_ranges[i].start; j <= utf8_ranges[i].end; j+= utf8_ranges[i].step) {
     608             :                                 if (ch == j) {
     609             :                                         return 1;
     610             :                                 }
     611             :                         }
     612             :                         return 0;
     613             :                 }
     614             :                 ++i;
     615             :         );
     616          40 :         return 0;
     617             : }
     618             : 
     619          57 : static inline zend_bool isualnum(unsigned ch)
     620             : {
     621             :         /* digits */
     622          57 :         if (ch >= 0x30 && ch <= 0x39) {
     623           0 :                 return 1;
     624             :         }
     625          57 :         return isualpha(ch);
     626             : }
     627             : 
     628             : #endif  /* PHP_HTTP_UTF8_H */
     629             : 
     630             : /*
     631             :  * Local variables:
     632             :  * tab-width: 4
     633             :  * c-basic-offset: 4
     634             :  * End:
     635             :  * vim600: noet sw=4 ts=4 fdm=marker
     636             :  * vim<600: noet sw=4 ts=4
     637             :  */

Generated by: LCOV version 1.11