Download Reference Manual
The Developer's Library for D
About Wiki Forums Source Search Contact

Changeset 3871

Show
Ignore:
Timestamp:
08/11/08 00:47:21 (4 months ago)
Author:
kris
Message:

Added new DocEntity? module, and moved Util.unentity() there instead

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/tango/text/Util.d

    r3599 r3871  
    11301130/****************************************************************************** 
    11311131 
    1132         Convert entity chars to normal ones: & => ; for example. 
    1133          
    1134 ******************************************************************************/ 
    1135  
    1136 T[] unentity (T) (T[] src, T[] dst = null) 
    1137 { 
    1138         int delta; 
    1139         auto s = src.ptr; 
    1140         auto len = src.length; 
    1141  
    1142         // take a peek first to see if there's anything 
    1143         if ((delta = indexOf (s, '&', len)) < len) 
    1144            { 
    1145            // make some room if not enough provided 
    1146            if (dst.length < src.length) 
    1147                dst.length = src.length; 
    1148            auto d = dst.ptr; 
    1149  
    1150            // copy segments over, a chunk at a time 
    1151            do { 
    1152               d [0 .. delta] = s [0 .. delta]; 
    1153               len -= delta; 
    1154               s += delta; 
    1155               d += delta; 
    1156  
    1157               // translate entity 
    1158               auto token = 0; 
    1159  
    1160               switch (s[1]) 
    1161                      { 
    1162                       case 'a': 
    1163                            if (len > 4 && s[1..5] == "amp;") 
    1164                                *d++ = '&', token = 5; 
    1165                            else 
    1166                            if (len > 5 && s[1..6] == "apos;") 
    1167                                *d++ = '\'', token = 6; 
    1168                            break; 
    1169                             
    1170                       case 'g': 
    1171                            if (len > 3 && s[1..4] == "gt;") 
    1172                                *d++ = '>', token = 4; 
    1173                            break; 
    1174                             
    1175                       case 'l': 
    1176                            if (len > 3 && s[1..4] == "lt;") 
    1177                                *d++ = '<', token = 4; 
    1178                            break; 
    1179                             
    1180                       case 'q': 
    1181                            if (len > 5 && s[1..6] == "quot;") 
    1182                                *d++ = '"', token = 6; 
    1183                            break; 
    1184  
    1185                       default: 
    1186                            break; 
    1187                      } 
    1188  
    1189               if (token is 0) 
    1190                   *d++ = '&', token = 1; 
    1191               s += token, len -= token; 
    1192               } while ((delta = indexOf (s, '&', len)) < len); 
    1193  
    1194            // copy tail too 
    1195            d [0 .. len] = s [0 .. len]; 
    1196            return dst [0 .. (d + len) - dst.ptr]; 
    1197            } 
    1198         return src; 
    1199 } 
    1200  
    1201  
    1202 /****************************************************************************** 
    1203  
    12041132        jhash() -- hash a variable-length key into a 32-bit value 
    12051133 
     
    17181646        assert (unescape ("\\v\\vx") == "\v\vx"); 
    17191647        assert (unescape ("abc\\t\\a\\bc") == "abc\t\a\bc"); 
    1720  
    1721         assert (unentity ("abc") == "abc"); 
    1722         assert (unentity ("abc&") == "abc&"); 
    1723         assert (unentity ("abc&lt;") == "abc<"); 
    1724         assert (unentity ("abc&gt;goo") == "abc>goo"); 
    1725         assert (unentity ("&amp;") == "&"); 
    1726         assert (unentity ("&quot;&apos;") == "\"'"); 
    1727         assert (unentity ("&q&s") == "&q&s"); 
    17281648        } 
    17291649}