1 #Region "Microsoft.VisualBasic::f1977fad5b8481516a06d917ec139c65, Microsoft.VisualBasic.Core\Serialization\JSON\Formatter\JsonFormatterInternal.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class JsonFormatterInternal
35     
36     '         Constructor: (+1 OverloadsSub New
37     
38     '         FunctionFormat
39     
40     '         Sub: PrettyPrintCharacter
41     
42     
43     ' /********************************************************************************/
44
45 #End Region
46
47 Imports System.Text
48 Imports Microsoft.VisualBasic.Serialization.JSON.Formatter.Internals.Strategies
49
50 Namespace Serialization.JSON.Formatter.Internals
51
52     Friend NotInheritable Class JsonFormatterInternal
53
54         ReadOnly context As JsonFormatterStrategyContext
55
56         Public Sub New(context As JsonFormatterStrategyContext)
57             Me.context = context
58
59             Me.context.ClearStrategies()
60             Me.context.AddCharacterStrategy(New OpenBracketStrategy())
61             Me.context.AddCharacterStrategy(New CloseBracketStrategy())
62             Me.context.AddCharacterStrategy(New OpenSquareBracketStrategy())
63             Me.context.AddCharacterStrategy(New CloseSquareBracketStrategy())
64             Me.context.AddCharacterStrategy(New SingleQuoteStrategy())
65             Me.context.AddCharacterStrategy(New DoubleQuoteStrategy())
66             Me.context.AddCharacterStrategy(New CommaStrategy())
67             Me.context.AddCharacterStrategy(New ColonCharacterStrategy())
68             Me.context.AddCharacterStrategy(New SkipWhileNotInStringStrategy(ControlChars.Lf))
69             Me.context.AddCharacterStrategy(New SkipWhileNotInStringStrategy(ControlChars.Cr))
70             Me.context.AddCharacterStrategy(New SkipWhileNotInStringStrategy(ControlChars.Tab))
71             Me.context.AddCharacterStrategy(New SkipWhileNotInStringStrategy(" "c))
72         End Sub
73
74         Public Function Format(json As StringAs String
75             If json Is Nothing Then
76                 Return String.Empty
77             End If
78
79             If json.Trim() = String.Empty Then
80                 Return String.Empty
81             End If
82
83             Dim input As New StringBuilder(json)
84             Dim output As New StringBuilder()
85
86             Me.PrettyPrintCharacter(input, output)
87
88             Return output.ToString()
89         End Function
90
91         Private Sub PrettyPrintCharacter(input As StringBuilder, output As StringBuilder)
92             For i As Integer = 0 To input.Length - 1
93                 Me.context.PrettyPrintCharacter(input(i), output)
94             Next
95         End Sub
96     End Class
97 End Namespace