Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CanBeMadeAtomic()

static bool System.Text.RegularExpressions.RegexNode.CanBeMadeAtomic ( RegexNode node,
RegexNode subsequent,
uint maxDepth )
inlinestaticprivate

Definition at line 1030 of file RegexNode.cs.

1031 {
1032 if (maxDepth == 0)
1033 {
1034 return false;
1035 }
1036 for (; subsequent.ChildCount() > 0; subsequent = subsequent.Child(0))
1037 {
1038 switch (subsequent.Type)
1039 {
1040 case 30:
1041 if ((subsequent.Options & RegexOptions.RightToLeft) == 0)
1042 {
1043 continue;
1044 }
1045 break;
1046 case 26:
1047 if (subsequent.M > 0)
1048 {
1049 continue;
1050 }
1051 break;
1052 case 27:
1053 if (subsequent.M > 0)
1054 {
1055 continue;
1056 }
1057 break;
1058 case 25:
1059 case 28:
1060 case 32:
1061 continue;
1062 }
1063 break;
1064 }
1065 if (node.Options != subsequent.Options)
1066 {
1067 return false;
1068 }
1069 if (subsequent.Type == 24)
1070 {
1071 int num = subsequent.ChildCount();
1072 for (int i = 0; i < num; i++)
1073 {
1074 if (!CanBeMadeAtomic(node, subsequent.Child(i), maxDepth - 1))
1075 {
1076 return false;
1077 }
1078 }
1079 return true;
1080 }
1081 switch (node.Type)
1082 {
1083 case 3:
1084 switch (subsequent.Type)
1085 {
1086 case 9:
1087 if (node.Ch == subsequent.Ch)
1088 {
1089 break;
1090 }
1091 goto case 21;
1092 case 6:
1093 if (subsequent.M <= 0 || node.Ch == subsequent.Ch)
1094 {
1095 break;
1096 }
1097 goto case 21;
1098 case 3:
1099 if (subsequent.M <= 0 || node.Ch == subsequent.Ch)
1100 {
1101 break;
1102 }
1103 goto case 21;
1104 case 43:
1105 if (subsequent.M <= 0 || node.Ch == subsequent.Ch)
1106 {
1107 break;
1108 }
1109 goto case 21;
1110 case 10:
1111 if (node.Ch != subsequent.Ch)
1112 {
1113 break;
1114 }
1115 goto case 21;
1116 case 7:
1117 if (subsequent.M <= 0 || node.Ch != subsequent.Ch)
1118 {
1119 break;
1120 }
1121 goto case 21;
1122 case 4:
1123 if (subsequent.M <= 0 || node.Ch != subsequent.Ch)
1124 {
1125 break;
1126 }
1127 goto case 21;
1128 case 44:
1129 if (subsequent.M <= 0 || node.Ch != subsequent.Ch)
1130 {
1131 break;
1132 }
1133 goto case 21;
1134 case 12:
1135 if (node.Ch == subsequent.Str[0])
1136 {
1137 break;
1138 }
1139 goto case 21;
1140 case 11:
1141 if (RegexCharClass.CharInClass(node.Ch, subsequent.Str))
1142 {
1143 break;
1144 }
1145 goto case 21;
1146 case 8:
1147 if (subsequent.M <= 0 || RegexCharClass.CharInClass(node.Ch, subsequent.Str))
1148 {
1149 break;
1150 }
1151 goto case 21;
1152 case 5:
1153 if (subsequent.M <= 0 || RegexCharClass.CharInClass(node.Ch, subsequent.Str))
1154 {
1155 break;
1156 }
1157 goto case 21;
1158 case 45:
1159 if (subsequent.M <= 0 || RegexCharClass.CharInClass(node.Ch, subsequent.Str))
1160 {
1161 break;
1162 }
1163 goto case 21;
1164 case 20:
1165 if (node.Ch == '\n')
1166 {
1167 break;
1168 }
1169 goto case 21;
1170 case 15:
1171 if (node.Ch == '\n')
1172 {
1173 break;
1174 }
1175 goto case 21;
1176 case 16:
1177 if (!RegexCharClass.IsWordChar(node.Ch))
1178 {
1179 break;
1180 }
1181 goto case 21;
1182 case 17:
1183 if (RegexCharClass.IsWordChar(node.Ch))
1184 {
1185 break;
1186 }
1187 goto case 21;
1188 case 41:
1189 if (!RegexCharClass.IsECMAWordChar(node.Ch))
1190 {
1191 break;
1192 }
1193 goto case 21;
1194 case 42:
1195 if (RegexCharClass.IsECMAWordChar(node.Ch))
1196 {
1197 break;
1198 }
1199 goto case 21;
1200 case 21:
1201 return true;
1202 }
1203 break;
1204 case 4:
1205 {
1206 int type = subsequent.Type;
1207 if (type <= 9)
1208 {
1209 if (type != 3)
1210 {
1211 if (type != 6)
1212 {
1213 if (type != 9 || node.Ch != subsequent.Ch)
1214 {
1215 break;
1216 }
1217 }
1218 else if (subsequent.M <= 0 || node.Ch != subsequent.Ch)
1219 {
1220 break;
1221 }
1222 }
1223 else if (subsequent.M <= 0 || node.Ch != subsequent.Ch)
1224 {
1225 break;
1226 }
1227 }
1228 else if (type != 12)
1229 {
1230 if (type != 21 && (type != 43 || subsequent.M <= 0 || node.Ch != subsequent.Ch))
1231 {
1232 break;
1233 }
1234 }
1235 else if (node.Ch != subsequent.Str[0])
1236 {
1237 break;
1238 }
1239 return true;
1240 }
1241 case 5:
1242 switch (subsequent.Type)
1243 {
1244 case 9:
1245 if (RegexCharClass.CharInClass(subsequent.Ch, node.Str))
1246 {
1247 break;
1248 }
1249 goto case 21;
1250 case 6:
1251 if (subsequent.M <= 0 || RegexCharClass.CharInClass(subsequent.Ch, node.Str))
1252 {
1253 break;
1254 }
1255 goto case 21;
1256 case 3:
1257 if (subsequent.M <= 0 || RegexCharClass.CharInClass(subsequent.Ch, node.Str))
1258 {
1259 break;
1260 }
1261 goto case 21;
1262 case 43:
1263 if (subsequent.M <= 0 || RegexCharClass.CharInClass(subsequent.Ch, node.Str))
1264 {
1265 break;
1266 }
1267 goto case 21;
1268 case 12:
1269 if (RegexCharClass.CharInClass(subsequent.Str[0], node.Str))
1270 {
1271 break;
1272 }
1273 goto case 21;
1274 case 11:
1275 if (RegexCharClass.MayOverlap(node.Str, subsequent.Str))
1276 {
1277 break;
1278 }
1279 goto case 21;
1280 case 8:
1281 if (subsequent.M <= 0 || RegexCharClass.MayOverlap(node.Str, subsequent.Str))
1282 {
1283 break;
1284 }
1285 goto case 21;
1286 case 5:
1287 if (subsequent.M <= 0 || RegexCharClass.MayOverlap(node.Str, subsequent.Str))
1288 {
1289 break;
1290 }
1291 goto case 21;
1292 case 45:
1293 if (subsequent.M <= 0 || RegexCharClass.MayOverlap(node.Str, subsequent.Str))
1294 {
1295 break;
1296 }
1297 goto case 21;
1298 case 20:
1299 if (RegexCharClass.CharInClass('\n', node.Str))
1300 {
1301 break;
1302 }
1303 goto case 21;
1304 case 15:
1305 if (RegexCharClass.CharInClass('\n', node.Str))
1306 {
1307 break;
1308 }
1309 goto case 21;
1310 case 16:
1311 if (!(node.Str == "\0\0\n\0\u0002\u0004\u0005\u0003\u0001\u0006\t\u0013\0") && !(node.Str == "\0\0\u0001\t"))
1312 {
1313 break;
1314 }
1315 goto case 21;
1316 case 17:
1317 if (!(node.Str == "\u0001\0\n\0\u0002\u0004\u0005\u0003\u0001\u0006\t\u0013\0") && !(node.Str == "\0\0\u0001\ufff7"))
1318 {
1319 break;
1320 }
1321 goto case 21;
1322 case 41:
1323 if (!(node.Str == "\0\n\00:A[_`a{İı") && !(node.Str == "\0\u0002\00:"))
1324 {
1325 break;
1326 }
1327 goto case 21;
1328 case 42:
1329 if (!(node.Str == "\u0001\n\00:A[_`a{İı") && !(node.Str == "\0\0\u0001\ufff7"))
1330 {
1331 break;
1332 }
1333 goto case 21;
1334 case 21:
1335 return true;
1336 }
1337 break;
1338 }
1339 return false;
1340 }
static bool CanBeMadeAtomic(RegexNode node, RegexNode subsequent, uint maxDepth)

References System.Text.RegularExpressions.RegexNode.CanBeMadeAtomic(), System.Text.RegularExpressions.RegexCharClass.CharInClass(), System.Text.RegularExpressions.i, System.Text.RegularExpressions.RegexCharClass.IsECMAWordChar(), System.Text.RegularExpressions.RegexCharClass.IsWordChar(), System.Text.RegularExpressions.RegexCharClass.MayOverlap(), and System.type.

Referenced by System.Text.RegularExpressions.RegexNode.CanBeMadeAtomic(), System.Text.RegularExpressions.RegexNode.FindLastExpressionInLoopForAutoAtomic(), and System.Text.RegularExpressions.RegexNode.ReduceConcatenationWithAutoAtomic().