Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5064 dpurdie 1
'=====================================================
2
'   DictDump
3
'   Pretty display of a Dictionary Item
4
'=====================================================
5
 
6
 
7
Private DICToutput_level
8
Public Function DICToutput(data)
9
    DICToutput_level = 1
10
    DICToutput = "{" & Chr(13) & Chr(10) & GetDict(data) & "}"
11
End Function
12
 
13
Private Function GetDict(objDict)
14
    dim aj_item, aj_keyvals, aj_label, aj_dicttype
15
    For Each aj_item In objDict
16
        Select Case TypeName(objDict.Item(aj_item))
17
            Case "Dictionary"
18
                GetDict = GetDict & Space(DICToutput_level * 4)
19
 
20
                aj_dicttype = "[]"
21
                For Each aj_label In objDict.Item(aj_item).Keys
22
                     If Not IsInt(aj_label) Then aj_dicttype = "{}"
23
                Next
24
 
25
                If IsInt(aj_item) Then
26
                    GetDict = GetDict & Left(aj_dicttype,1) & Chr(13) & Chr(10)
27
                Else
28
                    GetDict = GetDict & """" & aj_DICTEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10)
29
                End If
30
                DICToutput_level = DICToutput_level + 1
31
 
32
                aj_keyvals = objDict.Keys
33
                GetDict = GetDict & GetSubDict(objDict.Item(aj_item)) & Space(DICToutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10)
34
            Case Else
35
                aj_keyvals =  objDict.Keys
36
                GetDict = GetDict & Space(DICToutput_level * 4) & aj_InlineIf(IsInt(aj_item), "", """" & aj_DICTEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10)
37
        End Select
38
    Next
39
End Function
40
 
41
Private Function IsInt(val)
42
    IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")
43
End Function
44
 
45
Private Function GetSubDict(objSubDict)
46
    GetSubDict = GetDict(objSubDict)
47
    DICToutput_level= DICToutput_level -1
48
End Function
49
 
50
Private Function WriteValue(ByVal val)
51
    Select Case TypeName(val)
52
        Case "Double", "Integer", "Long": WriteValue = val
53
        Case "Null"						: WriteValue = "null"
54
        Case "Boolean"					: WriteValue = aj_InlineIf(val, "true", "false")
55
        Case Else						: WriteValue = """" & aj_DICTEncode(val) & """"
56
    End Select
57
End Function
58
 
59
Private Function aj_DICTEncode(ByVal val)
60
    val = Replace(val, "\", "\\")
61
    val = Replace(val, """", "\""")
62
    'val = Replace(val, "/", "\/")
63
    val = Replace(val, Chr(8), "\b")
64
    val = Replace(val, Chr(12), "\f")
65
    val = Replace(val, Chr(10), "\n")
66
    val = Replace(val, Chr(13), "\r")
67
    val = Replace(val, Chr(9), "\t")
68
    aj_DICTEncode = Trim(val)
69
End Function
70
 
71
Private Function aj_InlineIf(condition, returntrue, returnfalse)
72
    If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse
73
End Function