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

◆ AppendFormatHelper()

void System.Text.ValueStringBuilder.AppendFormatHelper ( IFormatProvider provider,
string format,
ParamsArray args )
inlinepackage

Definition at line 45 of file ValueStringBuilder.cs.

46 {
47 if (format == null)
48 {
49 throw new ArgumentNullException("format");
50 }
51 int num = 0;
52 int length = format.Length;
53 char c = '\0';
54 ICustomFormatter customFormatter = (ICustomFormatter)(provider?.GetFormat(typeof(ICustomFormatter)));
55 while (true)
56 {
57 if (num < length)
58 {
59 c = format[num];
60 num++;
61 if (c == '}')
62 {
63 if (num < length && format[num] == '}')
64 {
65 num++;
66 }
67 else
68 {
70 }
71 }
72 else if (c == '{')
73 {
74 if (num >= length || format[num] != '{')
75 {
76 num--;
77 goto IL_008f;
78 }
79 num++;
80 }
81 Append(c);
82 continue;
83 }
84 goto IL_008f;
85 IL_008f:
86 if (num == length)
87 {
88 break;
89 }
90 num++;
91 if (num == length || (c = format[num]) < '0' || c > '9')
92 {
94 }
95 int num2 = 0;
96 do
97 {
98 num2 = num2 * 10 + c - 48;
99 num++;
100 if (num == length)
101 {
103 }
104 c = format[num];
105 }
106 while (c >= '0' && c <= '9' && num2 < 1000000);
107 if (num2 >= args.Length)
108 {
109 throw new FormatException(SR.Format_IndexOutOfRange);
110 }
111 for (; num < length; num++)
112 {
113 if ((c = format[num]) != ' ')
114 {
115 break;
116 }
117 }
118 bool flag = false;
119 int num3 = 0;
120 if (c == ',')
121 {
122 for (num++; num < length && format[num] == ' '; num++)
123 {
124 }
125 if (num == length)
126 {
128 }
129 c = format[num];
130 if (c == '-')
131 {
132 flag = true;
133 num++;
134 if (num == length)
135 {
137 }
138 c = format[num];
139 }
140 if (c < '0' || c > '9')
141 {
143 }
144 do
145 {
146 num3 = num3 * 10 + c - 48;
147 num++;
148 if (num == length)
149 {
151 }
152 c = format[num];
153 }
154 while (c >= '0' && c <= '9' && num3 < 1000000);
155 }
156 for (; num < length; num++)
157 {
158 if ((c = format[num]) != ' ')
159 {
160 break;
161 }
162 }
163 object obj = args[num2];
164 ReadOnlySpan<char> readOnlySpan = default(ReadOnlySpan<char>);
165 switch (c)
166 {
167 case ':':
168 {
169 num++;
170 int num4 = num;
171 while (true)
172 {
173 if (num == length)
174 {
176 }
177 c = format[num];
178 switch (c)
179 {
180 case '{':
182 goto IL_0205;
183 default:
184 goto IL_0205;
185 case '}':
186 break;
187 }
188 break;
189 IL_0205:
190 num++;
191 }
192 if (num > num4)
193 {
194 readOnlySpan = format.AsSpan(num4, num - num4);
195 }
196 break;
197 }
198 default:
200 break;
201 case '}':
202 break;
203 }
204 num++;
205 string text = null;
206 string text2 = null;
207 if (customFormatter != null)
208 {
209 if (readOnlySpan.Length != 0)
210 {
211 text2 = new string(readOnlySpan);
212 }
213 text = customFormatter.Format(text2, obj, provider);
214 }
215 if (text == null)
216 {
217 if (obj is ISpanFormattable spanFormattable && (flag || num3 == 0) && spanFormattable.TryFormat(_chars.Slice(_pos), out var charsWritten, readOnlySpan, provider))
218 {
219 _pos += charsWritten;
220 int num5 = num3 - charsWritten;
221 if (flag && num5 > 0)
222 {
223 Append(' ', num5);
224 }
225 continue;
226 }
227 if (obj is IFormattable formattable)
228 {
229 if (readOnlySpan.Length != 0 && text2 == null)
230 {
231 text2 = new string(readOnlySpan);
232 }
233 text = formattable.ToString(text2, provider);
234 }
235 else if (obj != null)
236 {
237 text = obj.ToString();
238 }
239 }
240 if (text == null)
241 {
242 text = string.Empty;
243 }
244 int num6 = num3 - text.Length;
245 if (!flag && num6 > 0)
246 {
247 Append(' ', num6);
248 }
249 Append(text);
250 if (flag && num6 > 0)
251 {
252 Append(' ', num6);
253 }
254 }
255 }
Span< T > Slice(int start)
Definition Span.cs:271

References System.Text.ValueStringBuilder._chars, System.Text.ValueStringBuilder._pos, System.Text.ValueStringBuilder.Append(), System.format, System.ICustomFormatter.Format(), System.SR.Format_IndexOutOfRange, System.length, System.ParamsArray.Length, System.ReadOnlySpan< T >.Length, System.obj, System.Span< T >.Slice(), System.text, System.Text.ValueStringBuilder.ThrowFormatError(), and System.ISpanFormattable.TryFormat().