Skip to content

Commit f8873ab

Browse files
committed
Adopt System.Text.Json to replace Newtonsoft.Json.
1 parent c305944 commit f8873ab

File tree

3 files changed

+122
-132
lines changed

3 files changed

+122
-132
lines changed

ConsoleTestApplication1/ConsoleTestApplication1.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
<ImplicitUsings>Enable</ImplicitUsings>
66
<Nullable>Enable</Nullable>
77
</PropertyGroup>
8-
<ItemGroup>
9-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
10-
</ItemGroup>
118
<ItemGroup>
129
<ProjectReference Include="..\MwParserFromScratch\MwParserFromScratch.csproj" />
1310
</ItemGroup>

ConsoleTestApplication1/Program.cs

Lines changed: 121 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,53 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.IO;
4-
using System.Linq;
5-
using System.Net.Http;
1+
using System.Net.Http.Json;
62
using System.Text;
7-
using System.Threading.Tasks;
3+
using System.Text.Json.Nodes;
84
using MwParserFromScratch;
95
using MwParserFromScratch.Nodes;
10-
using Newtonsoft.Json;
11-
using Newtonsoft.Json.Linq;
126

13-
namespace ConsoleTestApplication1
7+
namespace ConsoleTestApplication1;
8+
9+
static class Program
1410
{
15-
static class Program
11+
private static string ReadInput()
1612
{
17-
private static string ReadInput()
13+
var sb = new StringBuilder();
14+
int c;
15+
while ((c = Console.Read()) >= 0)
1816
{
19-
var sb = new StringBuilder();
20-
int c;
21-
while ((c = Console.Read()) >= 0)
22-
{
23-
sb.Append((char)c);
24-
}
25-
return sb.ToString();
17+
sb.Append((char)c);
2618
}
19+
return sb.ToString();
20+
}
2721

28-
private static string Escapse(string expr)
29-
{
30-
return expr.Replace("\r", "\\r").Replace("\n", "\\n");
31-
}
22+
private static string Escapse(string expr)
23+
{
24+
return expr.Replace("\r", "\\r").Replace("\n", "\\n");
25+
}
3226

33-
private static void PrintAst(Node node, int level)
34-
{
35-
var indension = new string('.', level);
36-
var ns = node.ToString();
37-
Console.WriteLine("{0,-20} [{1}]", indension + node.GetType().Name,
38-
Escapse(ns.Substring(0, Math.Min(20, ns.Length))));
39-
foreach (var child in node.EnumChildren())
40-
PrintAst(child, level + 1);
41-
}
27+
private static void PrintAst(Node node, int level)
28+
{
29+
var indension = new string('.', level);
30+
var ns = node.ToString();
31+
Console.WriteLine("{0,-20} [{1}]", indension + node.GetType().Name,
32+
Escapse(ns.Substring(0, Math.Min(20, ns.Length))));
33+
foreach (var child in node.EnumChildren())
34+
PrintAst(child, level + 1);
35+
}
4236

43-
static void Main(string[] args)
44-
{
45-
SimpleDemo();
46-
//ParseAndPrint();
47-
//FetchAndParse();
48-
//LoadAndParse();
49-
}
37+
static async Task Main(string[] args)
38+
{
39+
SimpleDemo();
40+
// ParseAndPrint();
41+
// await FetchAndParseAsync();
42+
// LoadAndParse();
43+
}
5044

51-
static void SimpleDemo()
52-
{
53-
// Fills the missing template parameters.
54-
var parser = new WikitextParser();
55-
var templateNames = new [] {"Expand section", "Cleanup"};
56-
var text = @"==Hello==<!--comment-->
45+
static void SimpleDemo()
46+
{
47+
// Fills the missing template parameters.
48+
var parser = new WikitextParser();
49+
var templateNames = new [] {"Expand section", "Cleanup"};
50+
var text = @"==Hello==<!--comment-->
5751
{{Expand section|
5852
date=2010-10-05
5953
}}
@@ -62,102 +56,101 @@ This is a nice '''paragraph'''.
6256
==References==
6357
{{Reflist}}
6458
";
65-
var ast = parser.Parse(text);
66-
// Convert the code snippets to nodes
67-
var dateName = parser.Parse("date");
68-
var dateValue = parser.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
69-
Console.WriteLine("Issues:");
70-
// Search and set
71-
foreach (var t in ast.EnumDescendants().OfType<Template>()
72-
.Where(t => templateNames.Contains(MwParserUtility.NormalizeTemplateArgumentName(t.Name))))
59+
var ast = parser.Parse(text);
60+
// Convert the code snippets to nodes
61+
var dateName = parser.Parse("date");
62+
var dateValue = parser.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
63+
Console.WriteLine("Issues:");
64+
// Search and set
65+
foreach (var t in ast.EnumDescendants().OfType<Template>()
66+
.Where(t => templateNames.Contains(MwParserUtility.NormalizeTemplateArgumentName(t.Name))))
67+
{
68+
// Get the argument by name.
69+
var date = t.Arguments["date"];
70+
if (date != null)
7371
{
74-
// Get the argument by name.
75-
var date = t.Arguments["date"];
76-
if (date != null)
77-
{
78-
// To print the wikitext instead of user-friendly text, use ToString()
79-
Console.WriteLine("{0} ({1})", t.Name.ToPlainText(), date.Value.ToPlainText());
80-
}
81-
// Update/Add the argument
82-
t.Arguments.SetValue(dateName, dateValue);
72+
// To print the wikitext instead of user-friendly text, use ToString()
73+
Console.WriteLine("{0} ({1})", t.Name.ToPlainText(), date.Value.ToPlainText());
8374
}
84-
Console.WriteLine();
85-
Console.WriteLine("Wikitext:");
86-
Console.WriteLine(ast.ToString());
75+
// Update/Add the argument
76+
t.Arguments.SetValue(dateName, dateValue);
8777
}
78+
Console.WriteLine();
79+
Console.WriteLine("Wikitext:");
80+
Console.WriteLine(ast.ToString());
81+
}
8882

89-
private static void ParseAndPrint()
90-
{
91-
var parser = new WikitextParser();
92-
Console.WriteLine("Please input the wikitext to parse; use EOF (Ctrl+Z) to accept:");
93-
var ast = parser.Parse(ReadInput());
94-
Console.WriteLine("Parsed AST");
95-
PrintAst(ast, 0);
96-
Console.WriteLine("Plain text");
97-
Console.WriteLine(ast.ToPlainText());
98-
}
83+
private static void ParseAndPrint()
84+
{
85+
var parser = new WikitextParser();
86+
Console.WriteLine("Please input the wikitext to parse; use EOF (Ctrl+Z) to accept:");
87+
var ast = parser.Parse(ReadInput());
88+
Console.WriteLine("Parsed AST");
89+
PrintAst(ast, 0);
90+
Console.WriteLine("Plain text");
91+
Console.WriteLine(ast.ToPlainText());
92+
}
9993

100-
private static void FetchAndParse()
94+
private static async Task FetchAndParseAsync()
95+
{
96+
Console.WriteLine("Please input the title of the Wikipedia page to parse:");
97+
var title = Console.ReadLine();
98+
Console.WriteLine();
99+
var ast = await FetchAndParseAsync(title);
100+
Console.WriteLine("Headings:");
101+
// Show all headings
102+
foreach (var h in ast.EnumDescendants().OfType<Heading>())
101103
{
102-
Console.WriteLine("Please input the title of the Wikipedia page to parse:");
103-
var title = Console.ReadLine();
104-
Console.WriteLine();
105-
var ast = FetchAndParse(title);
106-
Console.WriteLine("Headings:");
107-
// Show all headings
108-
foreach (var h in ast.EnumDescendants().OfType<Heading>())
109-
{
110-
Console.WriteLine(h.ToString());
111-
}
104+
Console.WriteLine(h.ToString());
112105
}
106+
}
113107

114-
private static void LoadAndParse()
108+
private static void LoadAndParse()
109+
{
110+
Console.WriteLine("Please input the path of the file to parse:");
111+
var fileName = Console.ReadLine();
112+
Console.WriteLine();
113+
var ast = LoadAndParse(fileName.Trim(' ', '\t', '"'));
114+
PrintAst(ast, 0);
115+
Console.WriteLine("Headings:");
116+
// Show all headings
117+
foreach (var h in ast.EnumDescendants().OfType<Heading>())
115118
{
116-
Console.WriteLine("Please input the path of the file to parse:");
117-
var fileName = Console.ReadLine();
118-
Console.WriteLine();
119-
var ast = LoadAndParse(fileName.Trim(' ', '\t', '"'));
120-
PrintAst(ast, 0);
121-
Console.WriteLine("Headings:");
122-
// Show all headings
123-
foreach (var h in ast.EnumDescendants().OfType<Heading>())
124-
{
125-
Console.WriteLine(h.ToString());
126-
}
119+
Console.WriteLine(h.ToString());
127120
}
121+
}
128122

129-
/// <summary>
130-
/// Fetches a page from en Wikipedia, and parse it.
131-
/// </summary>
132-
private static Wikitext FetchAndParse(string title)
123+
/// <summary>
124+
/// Fetches a page from en Wikipedia, and parse it.
125+
/// </summary>
126+
private static async Task<Wikitext> FetchAndParseAsync(string title)
127+
{
128+
if (title == null) throw new ArgumentNullException(nameof(title));
129+
const string endPointUrl = "https://en.wikipedia.org/w/api.php";
130+
var client = new HttpClient();
131+
var requestContent = new Dictionary<string, string>
133132
{
134-
if (title == null) throw new ArgumentNullException(nameof(title));
135-
const string EndPointUrl = "https://en.wikipedia.org/w/api.php";
136-
var client = new HttpClient();
137-
var requestContent = new Dictionary<string, string>
138-
{
139-
{"format", "json"},
140-
{"action", "query"},
141-
{"prop", "revisions"},
142-
{"rvlimit", "1"},
143-
{"rvprop", "content"},
144-
{"titles", title}
145-
};
146-
var response = client.PostAsync(EndPointUrl, new FormUrlEncodedContent(requestContent)).Result;
147-
var root = JObject.Parse(response.Content.ReadAsStringAsync().Result);
148-
var content = (string) root["query"]["pages"].Children<JProperty>().First().Value["revisions"][0]["*"];
149-
var parser = new WikitextParser();
150-
return parser.Parse(content);
151-
}
133+
{"format", "json"},
134+
{"action", "query"},
135+
{"prop", "revisions"},
136+
{"rvlimit", "1"},
137+
{"rvprop", "content"},
138+
{"titles", title}
139+
};
140+
var response = await client.PostAsync(endPointUrl, new FormUrlEncodedContent(requestContent));
141+
var root = await response.Content.ReadFromJsonAsync<JsonObject>();
142+
var content = (string) root["query"]["pages"].AsObject().First().Value["revisions"][0]["*"];
143+
var parser = new WikitextParser();
144+
return parser.Parse(content);
145+
}
152146

153-
/// <summary>
154-
/// Loads a page from file and parse it.
155-
/// </summary>
156-
private static Wikitext LoadAndParse(string fileName)
157-
{
158-
var content = File.ReadAllText(fileName);
159-
var parser = new WikitextParser();
160-
return parser.Parse(content);
161-
}
147+
/// <summary>
148+
/// Loads a page from file and parse it.
149+
/// </summary>
150+
private static Wikitext LoadAndParse(string fileName)
151+
{
152+
var content = File.ReadAllText(fileName);
153+
var parser = new WikitextParser();
154+
return parser.Parse(content);
162155
}
163156
}

MwParserFromScratch/MwParserFromScratch.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.0;net8.0</TargetFrameworks>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66

77
<AssemblyName>MwParserFromScratch</AssemblyName>

0 commit comments

Comments
 (0)