@@ -58,10 +58,6 @@ internal class XmlUTF8NodeWriter : XmlStreamNodeWriter
58
58
private Encoding ? _encoding ;
59
59
private char [ ] ? _chars ;
60
60
61
- private static readonly byte [ ] s_startDecl = "<?xml version=\" 1.0\" encoding=\" "u8 . ToArray ( ) ;
62
- private static readonly byte [ ] s_endDecl = "\" ?>"u8 . ToArray ( ) ;
63
- private static readonly byte [ ] s_utf8Decl = "<?xml version=\" 1.0\" encoding=\" utf-8\" ?>"u8 . ToArray ( ) ;
64
-
65
61
private static ReadOnlySpan < byte > Digits => "0123456789ABCDEF"u8 ;
66
62
67
63
private static readonly bool [ ] s_defaultIsEscapedAttributeChar = new bool [ ]
@@ -127,64 +123,34 @@ public override void WriteDeclaration()
127
123
{
128
124
if ( _encoding == null )
129
125
{
130
- WriteUTF8Chars ( s_utf8Decl , 0 , s_utf8Decl . Length ) ;
126
+ WriteUTF8Bytes ( "<?xml version= \" 1.0 \" encoding= \" utf-8 \" ?>"u8 ) ;
131
127
}
132
128
else
133
129
{
134
- WriteUTF8Chars ( s_startDecl , 0 , s_startDecl . Length ) ;
130
+ WriteUTF8Bytes ( "<?xml version= \" 1.0 \" encoding= \" "u8 ) ;
135
131
if ( _encoding . WebName == Encoding . BigEndianUnicode . WebName )
136
- WriteUTF8Chars ( "utf-16BE" ) ;
132
+ WriteUTF8Bytes ( "utf-16BE"u8 ) ;
137
133
else
138
134
WriteUTF8Chars ( _encoding . WebName ) ;
139
- WriteUTF8Chars ( s_endDecl , 0 , s_endDecl . Length ) ;
135
+ WriteUTF8Bytes ( " \" ?>"u8 ) ;
140
136
}
141
137
}
142
138
143
139
public override void WriteCData ( string text )
144
140
{
145
- byte [ ] buffer ;
146
- int offset ;
147
-
148
- buffer = GetBuffer ( 9 , out offset ) ;
149
- buffer [ offset + 0 ] = ( byte ) '<' ;
150
- buffer [ offset + 1 ] = ( byte ) '!' ;
151
- buffer [ offset + 2 ] = ( byte ) '[' ;
152
- buffer [ offset + 3 ] = ( byte ) 'C' ;
153
- buffer [ offset + 4 ] = ( byte ) 'D' ;
154
- buffer [ offset + 5 ] = ( byte ) 'A' ;
155
- buffer [ offset + 6 ] = ( byte ) 'T' ;
156
- buffer [ offset + 7 ] = ( byte ) 'A' ;
157
- buffer [ offset + 8 ] = ( byte ) '[' ;
158
- Advance ( 9 ) ;
159
-
141
+ WriteUTF8Bytes ( "<![CDATA["u8 ) ;
160
142
WriteUTF8Chars ( text ) ;
161
-
162
- buffer = GetBuffer ( 3 , out offset ) ;
163
- buffer [ offset + 0 ] = ( byte ) ']' ;
164
- buffer [ offset + 1 ] = ( byte ) ']' ;
165
- buffer [ offset + 2 ] = ( byte ) '>' ;
166
- Advance ( 3 ) ;
143
+ WriteUTF8Bytes ( "]]>"u8 ) ;
167
144
}
168
145
169
146
private void WriteStartComment ( )
170
147
{
171
- int offset ;
172
- byte [ ] buffer = GetBuffer ( 4 , out offset ) ;
173
- buffer [ offset + 0 ] = ( byte ) '<' ;
174
- buffer [ offset + 1 ] = ( byte ) '!' ;
175
- buffer [ offset + 2 ] = ( byte ) '-' ;
176
- buffer [ offset + 3 ] = ( byte ) '-' ;
177
- Advance ( 4 ) ;
148
+ WriteUTF8Bytes ( "<!--"u8 ) ;
178
149
}
179
150
180
151
private void WriteEndComment ( )
181
152
{
182
- int offset ;
183
- byte [ ] buffer = GetBuffer ( 3 , out offset ) ;
184
- buffer [ offset + 0 ] = ( byte ) '-' ;
185
- buffer [ offset + 1 ] = ( byte ) '-' ;
186
- buffer [ offset + 2 ] = ( byte ) '>' ;
187
- Advance ( 3 ) ;
153
+ WriteUTF8Bytes ( "-->"u8 ) ;
188
154
}
189
155
190
156
public override void WriteComment ( string text )
@@ -297,15 +263,7 @@ public override void WriteEndElement(byte[] prefixBuffer, int prefixOffset, int
297
263
298
264
private void WriteStartXmlnsAttribute ( )
299
265
{
300
- int offset ;
301
- byte [ ] buffer = GetBuffer ( 6 , out offset ) ;
302
- buffer [ offset + 0 ] = ( byte ) ' ' ;
303
- buffer [ offset + 1 ] = ( byte ) 'x' ;
304
- buffer [ offset + 2 ] = ( byte ) 'm' ;
305
- buffer [ offset + 3 ] = ( byte ) 'l' ;
306
- buffer [ offset + 4 ] = ( byte ) 'n' ;
307
- buffer [ offset + 5 ] = ( byte ) 's' ;
308
- Advance ( 6 ) ;
266
+ WriteUTF8Bytes ( " xmlns"u8 ) ;
309
267
_inAttribute = true ;
310
268
}
311
269
@@ -403,7 +361,7 @@ private void WritePrefix(byte[] prefixBuffer, int prefixOffset, int prefixLength
403
361
}
404
362
else
405
363
{
406
- WriteUTF8Chars ( prefixBuffer , prefixOffset , prefixLength ) ;
364
+ WriteUTF8Bytes ( prefixBuffer . AsSpan ( prefixOffset , prefixLength ) ) ;
407
365
}
408
366
}
409
367
@@ -414,7 +372,7 @@ private void WriteLocalName(string localName)
414
372
415
373
private void WriteLocalName ( byte [ ] localNameBuffer , int localNameOffset , int localNameLength )
416
374
{
417
- WriteUTF8Chars ( localNameBuffer , localNameOffset , localNameLength ) ;
375
+ WriteUTF8Bytes ( localNameBuffer . AsSpan ( localNameOffset , localNameLength ) ) ;
418
376
}
419
377
420
378
public override void WriteEscapedText ( XmlDictionaryString s )
@@ -473,7 +431,7 @@ public override void WriteEscapedText(byte[] chars, int offset, int count)
473
431
byte ch = chars [ offset + j ] ;
474
432
if ( ch < isEscapedCharLength && isEscapedChar [ ch ] )
475
433
{
476
- WriteUTF8Chars ( chars , offset + i , j - i ) ;
434
+ WriteUTF8Bytes ( chars . AsSpan ( offset + i , j - i ) ) ;
477
435
WriteCharEntity ( ch ) ;
478
436
i = j + 1 ;
479
437
}
@@ -486,13 +444,13 @@ public override void WriteEscapedText(byte[] chars, int offset, int count)
486
444
byte ch3 = chars [ offset + j + 2 ] ;
487
445
if ( ch2 == 191 && ( ch3 == 190 || ch3 == 191 ) )
488
446
{
489
- WriteUTF8Chars ( chars , offset + i , j - i ) ;
447
+ WriteUTF8Bytes ( chars . AsSpan ( offset + i , j - i ) ) ;
490
448
WriteCharEntity ( ch3 == 190 ? ( char ) 0xFFFE : ( char ) 0xFFFF ) ;
491
449
i = j + 3 ;
492
450
}
493
451
}
494
452
}
495
- WriteUTF8Chars ( chars , offset + i , count - i ) ;
453
+ WriteUTF8Bytes ( chars . AsSpan ( offset + i , count - i ) ) ;
496
454
}
497
455
498
456
public void WriteText ( int ch )
@@ -502,7 +460,7 @@ public void WriteText(int ch)
502
460
503
461
public override void WriteText ( byte [ ] chars , int offset , int count )
504
462
{
505
- WriteUTF8Chars ( chars , offset , count ) ;
463
+ WriteUTF8Bytes ( chars . AsSpan ( offset , count ) ) ;
506
464
}
507
465
508
466
public override unsafe void WriteText ( char [ ] chars , int offset , int count )
@@ -528,62 +486,27 @@ public override void WriteText(XmlDictionaryString value)
528
486
529
487
public void WriteLessThanCharEntity ( )
530
488
{
531
- int offset ;
532
- byte [ ] buffer = GetBuffer ( 4 , out offset ) ;
533
- buffer [ offset + 0 ] = ( byte ) '&' ;
534
- buffer [ offset + 1 ] = ( byte ) 'l' ;
535
- buffer [ offset + 2 ] = ( byte ) 't' ;
536
- buffer [ offset + 3 ] = ( byte ) ';' ;
537
- Advance ( 4 ) ;
489
+ WriteUTF8Bytes ( "<"u8 ) ;
538
490
}
539
491
540
492
public void WriteGreaterThanCharEntity ( )
541
493
{
542
- int offset ;
543
- byte [ ] buffer = GetBuffer ( 4 , out offset ) ;
544
- buffer [ offset + 0 ] = ( byte ) '&' ;
545
- buffer [ offset + 1 ] = ( byte ) 'g' ;
546
- buffer [ offset + 2 ] = ( byte ) 't' ;
547
- buffer [ offset + 3 ] = ( byte ) ';' ;
548
- Advance ( 4 ) ;
494
+ WriteUTF8Bytes ( ">"u8 ) ;
549
495
}
550
496
551
497
public void WriteAmpersandCharEntity ( )
552
498
{
553
- int offset ;
554
- byte [ ] buffer = GetBuffer ( 5 , out offset ) ;
555
- buffer [ offset + 0 ] = ( byte ) '&' ;
556
- buffer [ offset + 1 ] = ( byte ) 'a' ;
557
- buffer [ offset + 2 ] = ( byte ) 'm' ;
558
- buffer [ offset + 3 ] = ( byte ) 'p' ;
559
- buffer [ offset + 4 ] = ( byte ) ';' ;
560
- Advance ( 5 ) ;
499
+ WriteUTF8Bytes ( "&"u8 ) ;
561
500
}
562
501
563
502
public void WriteApostropheCharEntity ( )
564
503
{
565
- int offset ;
566
- byte [ ] buffer = GetBuffer ( 6 , out offset ) ;
567
- buffer [ offset + 0 ] = ( byte ) '&' ;
568
- buffer [ offset + 1 ] = ( byte ) 'a' ;
569
- buffer [ offset + 2 ] = ( byte ) 'p' ;
570
- buffer [ offset + 3 ] = ( byte ) 'o' ;
571
- buffer [ offset + 4 ] = ( byte ) 's' ;
572
- buffer [ offset + 5 ] = ( byte ) ';' ;
573
- Advance ( 6 ) ;
504
+ WriteUTF8Bytes ( "'"u8 ) ;
574
505
}
575
506
576
507
public void WriteQuoteCharEntity ( )
577
508
{
578
- int offset ;
579
- byte [ ] buffer = GetBuffer ( 6 , out offset ) ;
580
- buffer [ offset + 0 ] = ( byte ) '&' ;
581
- buffer [ offset + 1 ] = ( byte ) 'q' ;
582
- buffer [ offset + 2 ] = ( byte ) 'u' ;
583
- buffer [ offset + 3 ] = ( byte ) 'o' ;
584
- buffer [ offset + 4 ] = ( byte ) 't' ;
585
- buffer [ offset + 5 ] = ( byte ) ';' ;
586
- Advance ( 6 ) ;
509
+ WriteUTF8Bytes ( """u8 ) ;
587
510
}
588
511
589
512
private void WriteHexCharEntity ( int ch )
@@ -595,7 +518,7 @@ private void WriteHexCharEntity(int ch)
595
518
chars [ -- offset ] = ( byte ) 'x' ;
596
519
chars [ -- offset ] = ( byte ) '#' ;
597
520
chars [ -- offset ] = ( byte ) '&' ;
598
- WriteUTF8Chars ( chars , offset , maxEntityLength - offset ) ;
521
+ WriteUTF8Bytes ( chars . AsSpan ( offset , maxEntityLength - offset ) ) ;
599
522
}
600
523
601
524
public override void WriteCharEntity ( int ch )
@@ -638,36 +561,31 @@ private static int ToBase16(byte[] chars, int offset, uint value)
638
561
639
562
public override void WriteBoolText ( bool value )
640
563
{
641
- int offset ;
642
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxBoolChars , out offset ) ;
564
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxBoolChars , out int offset ) ;
643
565
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
644
566
}
645
567
646
568
public override void WriteDecimalText ( decimal value )
647
569
{
648
- int offset ;
649
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxDecimalChars , out offset ) ;
570
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxDecimalChars , out int offset ) ;
650
571
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
651
572
}
652
573
653
574
public override void WriteDoubleText ( double value )
654
575
{
655
- int offset ;
656
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxDoubleChars , out offset ) ;
576
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxDoubleChars , out int offset ) ;
657
577
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
658
578
}
659
579
660
580
public override void WriteFloatText ( float value )
661
581
{
662
- int offset ;
663
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxFloatChars , out offset ) ;
582
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxFloatChars , out int offset ) ;
664
583
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
665
584
}
666
585
667
586
public override void WriteDateTimeText ( DateTime value )
668
587
{
669
- int offset ;
670
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxDateTimeChars , out offset ) ;
588
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxDateTimeChars , out int offset ) ;
671
589
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
672
590
}
673
591
@@ -688,22 +606,19 @@ public override void WriteUniqueIdText(UniqueId value)
688
606
689
607
public override void WriteInt32Text ( int value )
690
608
{
691
- int offset ;
692
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxInt32Chars , out offset ) ;
609
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxInt32Chars , out int offset ) ;
693
610
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
694
611
}
695
612
696
613
public override void WriteInt64Text ( long value )
697
614
{
698
- int offset ;
699
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxInt64Chars , out offset ) ;
615
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxInt64Chars , out int offset ) ;
700
616
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
701
617
}
702
618
703
619
public override void WriteUInt64Text ( ulong value )
704
620
{
705
- int offset ;
706
- byte [ ] buffer = GetBuffer ( XmlConverter . MaxUInt64Chars , out offset ) ;
621
+ byte [ ] buffer = GetBuffer ( XmlConverter . MaxUInt64Chars , out int offset ) ;
707
622
Advance ( XmlConverter . ToChars ( value , buffer , offset ) ) ;
708
623
}
709
624
@@ -738,16 +653,14 @@ private void InternalWriteBase64Text(byte[] buffer, int offset, int count)
738
653
{
739
654
int byteCount = Math . Min ( bufferLength / 4 * 3 , count - count % 3 ) ;
740
655
int charCount = byteCount / 3 * 4 ;
741
- int charOffset ;
742
- byte [ ] chars = GetBuffer ( charCount , out charOffset ) ;
656
+ byte [ ] chars = GetBuffer ( charCount , out int charOffset ) ;
743
657
Advance ( encoding . GetChars ( buffer , offset , byteCount , chars , charOffset ) ) ;
744
658
offset += byteCount ;
745
659
count -= byteCount ;
746
660
}
747
661
if ( count > 0 )
748
662
{
749
- int charOffset ;
750
- byte [ ] chars = GetBuffer ( 4 , out charOffset ) ;
663
+ byte [ ] chars = GetBuffer ( 4 , out int charOffset ) ;
751
664
Advance ( encoding . GetChars ( buffer , offset , count , chars , charOffset ) ) ;
752
665
}
753
666
}
0 commit comments