886 {
887 int num = 0;
888 char* digits = number.digits;
890 int num3;
891 int num4;
892 bool flag;
893 bool flag2;
894 int num5;
895 int num6;
896 int num9;
897 while (true)
898 {
899 num3 = 0;
900 num4 = -1;
901 num5 = int.MaxValue;
902 num6 = 0;
903 flag = false;
904 int num7 = -1;
905 flag2 = false;
906 int num8 = 0;
907 num9 = num2;
909 {
910 char c;
911 while (num9 <
format.Length && (c = ptr[num9++]) != 0)
912 {
913 switch (c)
914 {
915 case ';':
916 break;
917 case '#':
918 num3++;
919 continue;
920 case '0':
921 if (num5 == int.MaxValue)
922 {
923 num5 = num3;
924 }
925 num3++;
926 num6 = num3;
927 continue;
928 case '.':
929 if (num4 < 0)
930 {
931 num4 = num3;
932 }
933 continue;
934 case ',':
935 if (num3 <= 0 || num4 >= 0)
936 {
937 continue;
938 }
939 if (num7 >= 0)
940 {
941 if (num7 == num3)
942 {
943 num++;
944 continue;
945 }
946 flag2 = true;
947 }
948 num7 = num3;
949 num = 1;
950 continue;
951 case '%':
952 num8 += 2;
953 continue;
954 case '‰':
955 num8 += 3;
956 continue;
957 case '"':
958 case '\'':
959 while (num9 <
format.Length && ptr[num9] != 0 && ptr[num9++] != c)
960 {
961 }
962 continue;
963 case '\\':
964 if (num9 <
format.Length && ptr[num9] != 0)
965 {
966 num9++;
967 }
968 continue;
969 case 'E':
970 case 'e':
971 if ((num9 <
format.Length && ptr[num9] ==
'0') || (num9 + 1 <
format.Length && (ptr[num9] ==
'+' || ptr[num9] ==
'-') && ptr[num9 + 1] ==
'0'))
972 {
973 while (++num9 <
format.Length && ptr[num9] ==
'0')
974 {
975 }
976 flag = true;
977 }
978 continue;
979 default:
980 continue;
981 }
982 break;
983 }
984 }
985 if (num4 < 0)
986 {
987 num4 = num3;
988 }
989 if (num7 >= 0)
990 {
991 if (num7 == num4)
992 {
993 num8 -= num * 3;
994 }
995 else
996 {
997 flag2 = true;
998 }
999 }
1000 if (*digits != 0)
1001 {
1002 number.scale += num8;
1003 int pos = (flag ? num3 : (number.scale + num3 - num4));
1005 if (*digits != 0)
1006 {
1007 break;
1008 }
1010 if (num9 == num2)
1011 {
1012 break;
1013 }
1014 num2 = num9;
1015 continue;
1016 }
1017 number.sign = false;
1018 number.scale = 0;
1019 break;
1020 }
1021 num5 = ((num5 < num4) ? (num4 - num5) : 0);
1022 num6 = ((num6 > num4) ? (num4 - num6) : 0);
1023 int num10;
1024 int num11;
1025 if (flag)
1026 {
1027 num10 = num4;
1028 num11 = 0;
1029 }
1030 else
1031 {
1032 num10 = ((number.scale > num4) ? number.scale : num4);
1033 num11 = number.scale - num4;
1034 }
1035 num9 = num2;
1036 Span<int> span = stackalloc int[4];
1037 int num12 = -1;
1038 if (flag2 &&
info.NumberGroupSeparator.Length > 0)
1039 {
1040 int[] numberGroupSizes =
info.NumberGroupSizes;
1041 int num13 = 0;
1043 int num14 = numberGroupSizes.Length;
1044 if (num14 != 0)
1045 {
1046 i = numberGroupSizes[num13];
1047 }
1049 int num16 = num10 + ((num11 < 0) ? num11 : 0);
1050 for (
int num17 = ((num5 > num16) ? num5 : num16); num17 >
i;
i += num15)
1051 {
1052 if (num15 == 0)
1053 {
1054 break;
1055 }
1056 num12++;
1057 if (num12 >= span.Length)
1058 {
1059 int[]
array =
new int[span.Length * 2];
1062 }
1064 if (num13 < num14 - 1)
1065 {
1066 num13++;
1067 num15 = numberGroupSizes[num13];
1068 }
1069 }
1070 }
1071 if (number.sign && num2 == 0)
1072 {
1073 sb.Append(
info.NegativeSign);
1074 }
1075 bool flag3 = false;
1077 {
1078 char* ptr2 = digits;
1079 char c;
1080 while (num9 <
format.Length && (c = ptr3[num9++]) != 0 && c !=
';')
1081 {
1082 if (num11 > 0 && (c == '#' || c == '.' || c == '0'))
1083 {
1084 while (num11 > 0)
1085 {
1086 sb.Append((*ptr2 != 0) ? (*(ptr2++)) : '0');
1087 if (flag2 && num10 > 1 && num12 >= 0 && num10 == span[num12] + 1)
1088 {
1089 sb.Append(
info.NumberGroupSeparator);
1090 num12--;
1091 }
1092 num10--;
1093 num11--;
1094 }
1095 }
1096 switch (c)
1097 {
1098 case '#':
1099 case '0':
1100 if (num11 < 0)
1101 {
1102 num11++;
1103 c = ((num10 <= num5) ? '0' : '\0');
1104 }
1105 else
1106 {
1107 c = ((*ptr2 != 0) ? (*(ptr2++)) : ((num10 > num6) ? '0' : '\0'));
1108 }
1109 if (c != 0)
1110 {
1111 sb.Append(c);
1112 if (flag2 && num10 > 1 && num12 >= 0 && num10 == span[num12] + 1)
1113 {
1114 sb.Append(
info.NumberGroupSeparator);
1115 num12--;
1116 }
1117 }
1118 num10--;
1119 break;
1120 case '.':
1121 if (!(num10 != 0 || flag3) && (num6 < 0 || (num4 < num3 && *ptr2 != 0)))
1122 {
1123 sb.Append(
info.NumberDecimalSeparator);
1124 flag3 = true;
1125 }
1126 break;
1127 case '‰':
1128 sb.Append(
info.PerMilleSymbol);
1129 break;
1130 case '%':
1131 sb.Append(
info.PercentSymbol);
1132 break;
1133 case '"':
1134 case '\'':
1135 while (num9 <
format.Length && ptr3[num9] != 0 && ptr3[num9] != c)
1136 {
1137 sb.Append(ptr3[num9++]);
1138 }
1139 if (num9 <
format.Length && ptr3[num9] != 0)
1140 {
1141 num9++;
1142 }
1143 break;
1144 case '\\':
1145 if (num9 <
format.Length && ptr3[num9] != 0)
1146 {
1147 sb.Append(ptr3[num9++]);
1148 }
1149 break;
1150 case 'E':
1151 case 'e':
1152 {
1153 bool positiveSign = false;
1154 int num18 = 0;
1155 if (flag)
1156 {
1157 if (num9 <
format.Length && ptr3[num9] ==
'0')
1158 {
1159 num18++;
1160 }
1161 else if (num9 + 1 <
format.Length && ptr3[num9] ==
'+' && ptr3[num9 + 1] ==
'0')
1162 {
1163 positiveSign = true;
1164 }
1165 else if (num9 + 1 >=
format.Length || ptr3[num9] !=
'-' || ptr3[num9 + 1] !=
'0')
1166 {
1167 sb.Append(c);
1168 break;
1169 }
1170 while (++num9 <
format.Length && ptr3[num9] ==
'0')
1171 {
1172 num18++;
1173 }
1174 if (num18 > 10)
1175 {
1176 num18 = 10;
1177 }
1178 int value = ((*digits != 0) ? (number.scale - num4) : 0);
1180 flag = false;
1181 break;
1182 }
1183 sb.Append(c);
1184 if (num9 <
format.Length)
1185 {
1186 if (ptr3[num9] == '+' || ptr3[num9] == '-')
1187 {
1188 sb.Append(ptr3[num9++]);
1189 }
1190 while (num9 <
format.Length && ptr3[num9] ==
'0')
1191 {
1192 sb.Append(ptr3[num9++]);
1193 }
1194 }
1195 break;
1196 }
1197 default:
1198 sb.Append(c);
1199 break;
1200 case ',':
1201 break;
1202 }
1203 }
1204 }
1205 }