summaryrefslogtreecommitdiff
path: root/WorldlineKeepers/Assets/ThirdParty/CSV-Parser
diff options
context:
space:
mode:
Diffstat (limited to 'WorldlineKeepers/Assets/ThirdParty/CSV-Parser')
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/.gitignore15
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.meta8
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln22
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta7
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj13
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta7
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta8
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs181
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs9
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs24
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE35
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE.meta7
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md102
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md.meta7
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md14
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta7
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Tests.meta8
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Unity Examples.meta8
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json7
-rw-r--r--WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json.meta7
23 files changed, 529 insertions, 0 deletions
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/.gitignore b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/.gitignore
new file mode 100644
index 0000000..19f0983
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/.gitignore
@@ -0,0 +1,15 @@
+obj/
+bin/
+.vs/
+.vscode/
+.idea/
+*.DotSettings
+*.user
+
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db \ No newline at end of file
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.meta
new file mode 100644
index 0000000..1b9c4db
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 85cabb48324945548a8b18124ed3918a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln
new file mode 100644
index 0000000..9e25d75
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSV Parser", "CSV Parser\CSV Parser.csproj", "{BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{C7E7ACFD-66DB-4296-8536-4418728F3A5D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta
new file mode 100644
index 0000000..3f5d3cf
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2d428b7f5708308489ff910a5977b13c
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj
new file mode 100644
index 0000000..bf48c73
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net6.0</TargetFramework>
+ <RootNamespace>CSV_Parser</RootNamespace>
+ <LangVersion>7.3</LangVersion>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="System.Memory" Version="4.5.4" />
+ </ItemGroup>
+
+</Project>
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta
new file mode 100644
index 0000000..da4f4a8
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c9cc963a877064748a9e6fe4397c807f
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta
new file mode 100644
index 0000000..8e65917
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3e17c685928714443973ed558020bdee
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs
new file mode 100644
index 0000000..c886c19
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs
@@ -0,0 +1,181 @@
+/*
+ * CSV Parser for C#.
+ *
+ * These codes are licensed under CC0.
+ * https://github.com/yutokun/CSV-Parser
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace yutokun
+{
+ public static class CSVParser
+ {
+ /// <summary>
+ /// Load CSV data from specified path.
+ /// </summary>
+ /// <param name="path">CSV file path.</param>
+ /// <param name="delimiter">Delimiter.</param>
+ /// <param name="encoding">Type of text encoding. (default UTF-8)</param>
+ /// <returns>Nested list that CSV parsed.</returns>
+ public static List<List<string>> LoadFromPath(string path, Delimiter delimiter = Delimiter.Auto, Encoding encoding = null)
+ {
+ encoding = encoding ?? Encoding.UTF8;
+
+ if (delimiter == Delimiter.Auto)
+ {
+ delimiter = EstimateDelimiter(path);
+ }
+
+ var data = File.ReadAllText(path, encoding);
+ return Parse(data, delimiter);
+ }
+
+ /// <summary>
+ /// Load CSV data asynchronously from specified path.
+ /// </summary>
+ /// <param name="path">CSV file path.</param>
+ /// <param name="delimiter">Delimiter.</param>
+ /// <param name="encoding">Type of text encoding. (default UTF-8)</param>
+ /// <returns>Nested list that CSV parsed.</returns>
+ public static async Task<List<List<string>>> LoadFromPathAsync(string path, Delimiter delimiter = Delimiter.Auto, Encoding encoding = null)
+ {
+ encoding = encoding ?? Encoding.UTF8;
+
+ if (delimiter == Delimiter.Auto)
+ {
+ delimiter = EstimateDelimiter(path);
+ }
+
+ using (var reader = new StreamReader(path, encoding))
+ {
+ var data = await reader.ReadToEndAsync();
+ return Parse(data, delimiter);
+ }
+ }
+
+ static Delimiter EstimateDelimiter(string path)
+ {
+ var extension = Path.GetExtension(path);
+ if (extension.Equals(".csv", StringComparison.OrdinalIgnoreCase))
+ {
+ return Delimiter.Comma;
+ }
+
+ if (extension.Equals(".tsv", StringComparison.OrdinalIgnoreCase))
+ {
+ return Delimiter.Tab;
+ }
+
+ throw new Exception($"Delimiter estimation failed. Unknown Extension: {extension}");
+ }
+
+ /// <summary>
+ /// Load CSV data from string.
+ /// </summary>
+ /// <param name="data">CSV string</param>
+ /// <param name="delimiter">Delimiter.</param>
+ /// <returns>Nested list that CSV parsed.</returns>
+ public static List<List<string>> LoadFromString(string data, Delimiter delimiter = Delimiter.Comma)
+ {
+ if (delimiter == Delimiter.Auto) throw new InvalidEnumArgumentException("Delimiter estimation from string is not supported.");
+ return Parse(data, delimiter);
+ }
+
+ static List<List<string>> Parse(string data, Delimiter delimiter)
+ {
+ ConvertToCrlf(ref data);
+
+ var sheet = new List<List<string>>();
+ var row = new List<string>();
+ var cell = new StringBuilder();
+ var insideQuoteCell = false;
+ var start = 0;
+
+ var delimiterSpan = delimiter.ToChar().ToString().AsSpan();
+ var crlfSpan = "\r\n".AsSpan();
+ var oneDoubleQuotSpan = "\"".AsSpan();
+ var twoDoubleQuotSpan = "\"\"".AsSpan();
+
+ while (start < data.Length)
+ {
+ var length = start <= data.Length - 2 ? 2 : 1;
+ var span = data.AsSpan(start, length);
+
+ if (span.StartsWith(delimiterSpan))
+ {
+ if (insideQuoteCell)
+ {
+ cell.Append(delimiter.ToChar());
+ }
+ else
+ {
+ AddCell(row, cell);
+ }
+
+ start += 1;
+ }
+ else if (span.StartsWith(crlfSpan))
+ {
+ if (insideQuoteCell)
+ {
+ cell.Append("\r\n");
+ }
+ else
+ {
+ AddCell(row, cell);
+ AddRow(sheet, ref row);
+ }
+
+ start += 2;
+ }
+ else if (span.StartsWith(twoDoubleQuotSpan))
+ {
+ cell.Append("\"");
+ start += 2;
+ }
+ else if (span.StartsWith(oneDoubleQuotSpan))
+ {
+ insideQuoteCell = !insideQuoteCell;
+ start += 1;
+ }
+ else
+ {
+ cell.Append(span[0]);
+ start += 1;
+ }
+ }
+
+ if (row.Count > 0 || cell.Length > 0)
+ {
+ AddCell(row, cell);
+ AddRow(sheet, ref row);
+ }
+
+ return sheet;
+ }
+
+ static void AddCell(List<string> row, StringBuilder cell)
+ {
+ row.Add(cell.ToString());
+ cell.Length = 0; // Old C#.
+ }
+
+ static void AddRow(List<List<string>> sheet, ref List<string> row)
+ {
+ sheet.Add(row);
+ row = new List<string>();
+ }
+
+ static void ConvertToCrlf(ref string data)
+ {
+ data = Regex.Replace(data, @"\r\n|\r|\n", "\r\n");
+ }
+ }
+}
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta
new file mode 100644
index 0000000..fb3cd58
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1dcf43e5bd8e0204580fc6899a086b00
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs
new file mode 100644
index 0000000..b32dcc3
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs
@@ -0,0 +1,9 @@
+namespace yutokun
+{
+ public enum Delimiter
+ {
+ Auto,
+ Comma,
+ Tab
+ }
+}
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta
new file mode 100644
index 0000000..8f7cf00
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e0e2bb27fdbb714468ca87aeaf607331
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs
new file mode 100644
index 0000000..a38371d
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs
@@ -0,0 +1,24 @@
+using System;
+using System.ComponentModel;
+
+namespace yutokun
+{
+ public static class DelimiterExtensions
+ {
+ public static char ToChar(this Delimiter delimiter)
+ {
+ // C# 7.3: Unity 2018.2 - 2020.1 Compatible
+ switch (delimiter)
+ {
+ case Delimiter.Auto:
+ throw new InvalidEnumArgumentException("Could not return char of Delimiter.Auto.");
+ case Delimiter.Comma:
+ return ',';
+ case Delimiter.Tab:
+ return '\t';
+ default:
+ throw new ArgumentOutOfRangeException(nameof(delimiter), delimiter, null);
+ }
+ }
+ }
+}
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta
new file mode 100644
index 0000000..d98b86d
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b9ab5b183dd311459e9893fe735bea6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE
new file mode 100644
index 0000000..8a9b3dc
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE
@@ -0,0 +1,35 @@
+For unique parts of the repository
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org>
+
+--------------------------------------------------------------------------------------------
+
+For .NET Runtimes (included in the .unitypackage for old Unity)
+
+The MIT License
+Copyright (c) .NET Foundation and Contributors
+
+https://github.com/dotnet/runtime/blob/main/LICENSE.TXT \ No newline at end of file
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE.meta
new file mode 100644
index 0000000..1df5cd4
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/LICENSE.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e44599b63f0a77d408c64fcf15e388e1
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md
new file mode 100644
index 0000000..c87aaef
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md
@@ -0,0 +1,102 @@
+# CSV Parser for C#
+
+[![Test](https://github.com/yutokun/CSV-Parser/actions/workflows/test.yml/badge.svg)](https://github.com/yutokun/CSV-Parser/actions/workflows/test.yml)
+
+CSV Parser with CC0 License.
+
+Best for:
+
+- [Unity](https://unity3d.com/) projects that requires cross-platform CSV parser. (maybe works on any platform supported by Unity)
+- Commercial products that you could not display the license.
+
+## Prerequisites
+
+| Environment | Prerequisites |
+| ----------------------- | ------------------------------------------------------------------------- |
+| Unity 2019.2 or later | None |
+| Unity 2019.1 or earlier | .NET 4.x Equivalent |
+| .NET Project | [System.Memory](https://www.nuget.org/packages/System.Memory/) from NuGet |
+
+## Download
+
+Download zip or unitypackage from [**Releases**](https://github.com/yutokun/CSV-Parser/releases).
+
+## Usage
+
+### Methods
+
+This returns CSV data as `List<List<string>>`.
+
+```c#
+CSVParser.LoadFromString(string data)
+```
+
+or
+
+```c#
+CSVParser.LoadFromPath(string path, Encoding encoding = null)
+```
+
+### Examples
+
+```c#
+var sheet = CSVParser.LoadFromString(csvString);
+
+var styled = new StringBuilder();
+foreach (var row in sheet)
+{
+ styled.Append("| ");
+
+ foreach (var cell in row)
+ {
+ styled.Append(cell);
+ styled.Append(" | ");
+ }
+
+ styled.AppendLine();
+}
+
+Debug.Log(styled.ToString()); // Unity
+Console.WriteLine(styled.ToString()); // C#
+```
+
+## Specs
+
+Compliant with [RFC 4180](http://www.ietf.org/rfc/rfc4180.txt).
+
+- Correctly parse new lines, commas, quotation marks inside cell.
+- Escaped double quotes.
+- Some encoding types. (default UTF-8)
+
+## Beta
+
+- Tab delimiter support
+
+- Async loading
+
+## Development
+
+The repository contains multiple types of newline code. Run `git config core.autocrlf false` in your local repository.
+
+## Why this repo has multiple Unity Examples?
+
+One of the reasons is to check operation in different Unity versions. Another one is to build .unitypackage with CI.
+
+Unity changes a lot between their Tech Streams. It leads different requisites / dependency to the parser. Affected changes below.
+
+| Versions | Difference |
+| ----------------- | ---------------------------------------------- |
+| 2019.1 and 2019.2 | Has Scripting Runtime Version selector or not. |
+| 2021.1 and 2021.2 | Requires additional DLLs or not. |
+
+## License
+
+### Unique part of the repository
+
+[CC0](https://creativecommons.org/publicdomain/zero/1.0/) or [Public Domain](LICENSE)
+
+### .NET Runtimes (included in the .unitypackage for old Unity)
+
+[The MIT License](https://github.com/dotnet/runtime/blob/main/LICENSE.TXT)
+
+Copyright (c) .NET Foundation and Contributors
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md.meta
new file mode 100644
index 0000000..97d3fa3
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 369bbbb3341b6ec4583dce723dc805f4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md
new file mode 100644
index 0000000..99ec2e9
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md
@@ -0,0 +1,14 @@
+# Change
+
+- Updated project to .NET 6. It because deprecation of .NET 5 by GitHub Actions.
+ - CSV Parser itself has same prerequisites as before.
+
+# Fix
+
+- Fixed a bug that last cell will be ignored when single cell rows not ending with CRLF. (Thank you so much @gmichaudAniki !)
+
+# Misc. Changes
+
+- Fixed some errors in README.
+
+- Updated CI to compliant with Node.js 16. \ No newline at end of file
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta
new file mode 100644
index 0000000..cc47df1
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: baea5598d0dce0441a1b60a3364f3cc7
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Tests.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Tests.meta
new file mode 100644
index 0000000..c219211
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 229bb474319e02440b7fde15814d354e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Unity Examples.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Unity Examples.meta
new file mode 100644
index 0000000..eb2f7be
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/Unity Examples.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6e45f679bb3e6f54a8ae2adea95ddc1e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json
new file mode 100644
index 0000000..1bcf6c0
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json
@@ -0,0 +1,7 @@
+{
+ "sdk": {
+ "version": "6.0.0",
+ "rollForward": "latestMinor",
+ "allowPrerelease": false
+ }
+} \ No newline at end of file
diff --git a/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json.meta b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json.meta
new file mode 100644
index 0000000..b2d9917
--- /dev/null
+++ b/WorldlineKeepers/Assets/ThirdParty/CSV-Parser/global.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d4150b58aa163dc4d8a2aa3241ae51ea
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: