Skip to content
This repository was archived by the owner on Apr 28, 2020. It is now read-only.

Commit 4ac634b

Browse files
Merge pull request #17 from mcraiha/spacing-fixes
Fix spacing related issues
2 parents 89aa592 + b8f5973 commit 4ac634b

File tree

9 files changed

+58
-17
lines changed

9 files changed

+58
-17
lines changed

Json5/Json5.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static string Stringify(Json5Value value, Func<Json5Container, string, Js
4545

4646
public static string Stringify(Json5Value value, Func<Json5Container, string, Json5Value, Json5Value> replacer, int space)
4747
{
48-
return Stringify(value, replacer, new string(' ', Math.Max(space, 10)));
48+
return Stringify(value, replacer, new string(' ', Math.Min(space, 10)));
4949
}
5050

5151
public static string Stringify(Json5Value value, Func<string, Json5Value, Json5Value> replacer, string space = null)

Json5/Json5Array.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,15 @@ public override Json5Type Type
111111
get { return Json5Type.Array; }
112112
}
113113

114-
internal override string ToJson5String(string space, string indent)
114+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
115115
{
116+
// "If white space is used, trailing commas will be used in objects and arrays." from specification
117+
bool forcedCommaAndNewLineRequired = !string.IsNullOrEmpty(space);
118+
116119
string newLine = string.IsNullOrEmpty(space) ? "" : "\n";
117120

118121
// TODO: Use string builder instead of string
119-
string s = "[" + newLine;
122+
string s = indent + "[" + newLine;
120123

121124
bool isFirstValue = true;
122125

@@ -134,6 +137,11 @@ internal override string ToJson5String(string space, string indent)
134137
s += (value ?? Null).ToJson5String(space, indent + space);
135138
}
136139

140+
if (forcedCommaAndNewLineRequired)
141+
{
142+
s += "," + newLine;
143+
}
144+
137145
s += indent + "]";
138146

139147
return s;

Json5/Json5Boolean.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ protected override object Value
1919
get { return this.value; }
2020
}
2121

22-
internal override string ToJson5String(string space, string indent)
22+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
2323
{
24-
return this.value.ToString().ToLower();
24+
return AddIndent(this.value.ToString().ToLower(), indent, useOneSpaceIndent);
2525
}
2626

2727
public static implicit operator bool(Json5Boolean value)

Json5/Json5Date.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ protected override object Value
2121
get { return this.value; }
2222
}
2323

24-
internal override string ToJson5String(string space, string indent)
24+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
2525
{
26-
return Json5.QuoteString(this.value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"));
26+
return AddIndent(Json5.QuoteString(this.value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")), indent, useOneSpaceIndent);
2727
}
2828

2929
public static implicit operator DateTimeOffset(Json5Date value)

Json5/Json5Null.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ public override Json5Type Type
99
get { return Json5Type.Null; }
1010
}
1111

12-
internal override string ToJson5String(string space, string indent)
12+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
1313
{
14-
return "null";
14+
return AddIndent("null", indent, useOneSpaceIndent);
1515
}
1616
}
1717
}

Json5/Json5Number.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ protected override object Value
2121
get { return this.value; }
2222
}
2323

24-
internal override string ToJson5String(string space, string indent)
24+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
2525
{
26-
return this.value.ToString(CultureInfo.InvariantCulture);
26+
return AddIndent(this.value.ToString(CultureInfo.InvariantCulture), indent, useOneSpaceIndent);
2727
}
2828

2929
public static implicit operator double(Json5Number value)

Json5/Json5Object.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,17 @@ public override Json5Type Type
6565
get { return Json5Type.Object; }
6666
}
6767

68-
internal override string ToJson5String(string space, string indent)
68+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
6969
{
70+
// "If white space is used, trailing commas will be used in objects and arrays." from specification
71+
bool forcedCommaAndNewLineRequired = !string.IsNullOrEmpty(space);
72+
7073
string newLine = string.IsNullOrEmpty(space) ? "" : "\n";
7174

75+
string currentIndent = useOneSpaceIndent ? " " : indent;
76+
7277
// TODO: Use string builder instead of string
73-
string s = "{" + newLine;
78+
string s = currentIndent + "{" + newLine;
7479

7580
bool isFirstValue = true;
7681

@@ -86,7 +91,13 @@ internal override string ToJson5String(string space, string indent)
8691
}
8792

8893
s += indent + space + KeyToString(property.Key) + ":";
89-
s += (property.Value ?? Null).ToJson5String(space, indent + space);
94+
95+
s += (property.Value ?? Null).ToJson5String(space, indent + space, forcedCommaAndNewLineRequired);
96+
}
97+
98+
if (forcedCommaAndNewLineRequired)
99+
{
100+
s += "," + newLine;
90101
}
91102

92103
s += indent + "}";

Json5/Json5String.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ protected override object Value
2323
get { return this.value; }
2424
}
2525

26-
internal override string ToJson5String(string space, string indent)
26+
internal override string ToJson5String(string space, string indent, bool useOneSpaceIndent = false)
2727
{
28-
return Json5.QuoteString(this.value);
28+
return AddIndent(Json5.QuoteString(this.value), indent, useOneSpaceIndent);
2929
}
3030

3131
public static implicit operator string(Json5String value)

Json5/Json5Value.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,29 @@ public string ToJson5String(string space = null)
3333
return this.ToJson5String(space, "");
3434
}
3535

36-
internal abstract string ToJson5String(string space, string indent);
36+
internal abstract string ToJson5String(string space, string indent, bool useOneSpaceIndent = false);
37+
38+
/// <summary>
39+
/// Add indent string to the start of original string, if needed
40+
/// </summary>
41+
/// <example>if original string is "worm" and indent is " " then this returns " worm"</example>
42+
/// <param name="originalString">Original string</param>
43+
/// <param name="indent">Indent string, can contain other chars than whitespace</param>
44+
/// <param name="useOneSpaceIndent">Use one space indent, this is for case where object value starts</param>
45+
/// <returns>Original or combined string</returns>
46+
internal static string AddIndent(string originalString, string indent, bool useOneSpaceIndent)
47+
{
48+
if (useOneSpaceIndent)
49+
{
50+
return " " + originalString;
51+
}
52+
else if (string.IsNullOrEmpty(indent))
53+
{
54+
return originalString;
55+
}
56+
57+
return indent + originalString;
58+
}
3759

3860
public static implicit operator Json5Value(string value)
3961
{

0 commit comments

Comments
 (0)