Add translator source generator
This commit is contained in:
Binary file not shown.
@@ -1,19 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="60000 Most Frequent Words in American English - Corpus of Contemporary American English.xlsx" />
|
||||
<EmbeddedResource Include="60000 Most Frequent Words in American English - Corpus of Contemporary American English.xlsx" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ClosedXML" Version="0.104.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,105 +0,0 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
// Load up the file
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text.Json;
|
||||
using ClosedXML.Excel;
|
||||
|
||||
Console.WriteLine("Reading Excel file...");
|
||||
|
||||
// Load Excel data file
|
||||
const string ExcelFilePath = "PoyoLang.Analysis.NGrams.60000 Most Frequent Words in American English - Corpus of Contemporary American English.xlsx";
|
||||
|
||||
using var excelFileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ExcelFilePath);
|
||||
|
||||
using var workBook = new XLWorkbook(excelFileStream);
|
||||
var worksheet = workBook.Worksheet("List");
|
||||
|
||||
Console.WriteLine("Reading word frequencies");
|
||||
|
||||
// Read word frequencies
|
||||
var wordColumn = "C";
|
||||
var frequencyColumn = "D";
|
||||
|
||||
var wordFrequencies = new List<(string word, long frequency)>();
|
||||
|
||||
var row = 2;
|
||||
|
||||
while (true)
|
||||
{
|
||||
var wordValue = worksheet.Cell(row, wordColumn).Value;
|
||||
|
||||
if (wordValue.IsBlank)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
var word = $"{wordValue.GetText().Trim().ToLowerInvariant()} ";
|
||||
var frequency = (long)worksheet.Cell(row, frequencyColumn).GetDouble();
|
||||
|
||||
if (!word.Contains('('))
|
||||
{
|
||||
wordFrequencies.Add((word, frequency));
|
||||
}
|
||||
|
||||
row++;
|
||||
}
|
||||
|
||||
Console.WriteLine("Computing ngrams");
|
||||
|
||||
// Compute n-grams
|
||||
var ngrams = new Dictionary<string, long>();
|
||||
|
||||
const int MaxLength = 5;
|
||||
const int MinLength = 1;
|
||||
|
||||
foreach (var (word, frequency) in wordFrequencies)
|
||||
{
|
||||
var span = word.AsSpan();
|
||||
|
||||
while (span.Length >= MinLength)
|
||||
{
|
||||
for (int length = MinLength; length <= MaxLength; length++)
|
||||
{
|
||||
if (length > span.Length)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
Increment(span[..length]);
|
||||
}
|
||||
|
||||
span = span[1..];
|
||||
}
|
||||
|
||||
continue;
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
void Increment(ReadOnlySpan<char> span)
|
||||
{
|
||||
var ngram = span.ToString();
|
||||
|
||||
if (ngrams.TryGetValue(ngram, out var count))
|
||||
{
|
||||
ngrams[ngram] = count + frequency;
|
||||
}
|
||||
else
|
||||
{
|
||||
ngrams[ngram] = frequency;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Order frequencies
|
||||
var orderedNgrams = ngrams
|
||||
.OrderByDescending(n => n.Value)
|
||||
.ToList();
|
||||
|
||||
Console.WriteLine($"Found {orderedNgrams.Count} n-grams");
|
||||
|
||||
var serializedNgrams = JsonSerializer.Serialize(orderedNgrams, new JsonSerializerOptions() { WriteIndented = true});
|
||||
|
||||
await File.WriteAllTextAsync("n-grams.json", serializedNgrams);
|
||||
|
||||
@@ -1,9 +1,63 @@
|
||||
// See https://aka.ms/new-console-template for more information
|
||||
|
||||
using System.Text;
|
||||
using PoyoLang.Dictionary;
|
||||
|
||||
Console.OutputEncoding = System.Text.Encoding.UTF8;
|
||||
var dictionary = new Dictionary<string, string>();
|
||||
|
||||
var text = "Lorem ipsum dolor sit amet";
|
||||
|
||||
var output = new StringBuilder(text.Length);
|
||||
var span = text.AsSpan();
|
||||
|
||||
NextLetter(ref span, output);
|
||||
|
||||
Console.Write(output.ToString());
|
||||
|
||||
void NextLetter(ref ReadOnlySpan<char> text, StringBuilder output)
|
||||
{
|
||||
|
||||
if (text.Length > 0)
|
||||
{
|
||||
var isCaps = char.IsUpper(text[0]);
|
||||
|
||||
switch (text[0])
|
||||
{
|
||||
case 'a' or 'A':
|
||||
|
||||
if (text.Length > 1)
|
||||
{
|
||||
switch (text[1])
|
||||
{
|
||||
case 'm':
|
||||
|
||||
text = text[2..];
|
||||
|
||||
output.Append(isCaps ? "Payo" : "payo");
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
text = text[1..];
|
||||
|
||||
output.Append(isCaps ? "Piyo" : "piyo");
|
||||
|
||||
return;
|
||||
|
||||
case 'b' or 'B':
|
||||
|
||||
text = text[1..];
|
||||
|
||||
output.Append(isCaps ? "Pïyo" : "pïyo");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
text = text[1..];
|
||||
|
||||
output.Append(text[0]);
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine(string.Join(Environment.NewLine, Alphabet.BaseAlphabet));
|
||||
|
||||
Console.WriteLine(Alphabet.BaseAlphabet.Length);
|
||||
15
PoyoLang.Translator.SourceGenerator/Node.cs
Normal file
15
PoyoLang.Translator.SourceGenerator/Node.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace PoyoLang.Translator.SourceGenerator;
|
||||
|
||||
public class Node
|
||||
{
|
||||
public char Letter { get; }
|
||||
public string Target { get; }
|
||||
|
||||
public List<Node> Nodes { get; } = [];
|
||||
|
||||
public Node(char letter, string target)
|
||||
{
|
||||
Letter = letter;
|
||||
Target = target;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>default</LangVersion>
|
||||
|
||||
<IncludeBuildOutput>false</IncludeBuildOutput>
|
||||
<IsRoslynComponent>true</IsRoslynComponent>
|
||||
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.13.0" />
|
||||
<PackageReference Include="PolySharp" Version="1.15.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Text.Json" Version="9.0.5" PrivateAssets="all" GeneratePathProperty="true" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="dictionary.json" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,225 @@
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using Microsoft.CodeAnalysis;
|
||||
|
||||
namespace PoyoLang.Translator.SourceGenerator;
|
||||
|
||||
[Generator]
|
||||
public class PoyoLangTranslatorGenerator : IIncrementalGenerator
|
||||
{
|
||||
private const char IndentChar = '\t';
|
||||
|
||||
public void Initialize(IncrementalGeneratorInitializationContext context)
|
||||
{
|
||||
var texts = context.AdditionalTextsProvider;
|
||||
|
||||
// There will be only one of those but incremental generators work as pipelines
|
||||
var dictionaries = texts
|
||||
.Where(static text => text.Path.EndsWith("dictionary.json"))
|
||||
.Select(static (text, _) => text.GetText());
|
||||
|
||||
var parsedDictionaries = dictionaries
|
||||
.Select(static (dictionary, _) =>
|
||||
JsonSerializer.Deserialize<Dictionary<string, string>>(dictionary!.ToString())
|
||||
);
|
||||
|
||||
var formattedDictionaries = parsedDictionaries
|
||||
.Select(static (dictionary, _) =>
|
||||
{
|
||||
// Reverse dictionary order to have ngrams first
|
||||
return dictionary!.OrderBy(p => p.Value).ToDictionary(p => p.Value, p => p.Key);
|
||||
});
|
||||
|
||||
var prefixTrees = formattedDictionaries
|
||||
.Select(static (formattedDictionary, _) => BuildPrefixTree(formattedDictionary));
|
||||
|
||||
context.RegisterSourceOutput(prefixTrees, static (sourceProductionContext, prefixTree) =>
|
||||
{
|
||||
sourceProductionContext.AddSource("PoyoLangTranslator.g.cs", GenerateSource(prefixTree));
|
||||
});
|
||||
}
|
||||
|
||||
private static List<Node> BuildPrefixTree(Dictionary<string, string> dictionary)
|
||||
{
|
||||
var rootNodes = new List<Node>();
|
||||
|
||||
var firstNodes = dictionary.Where(p => p.Key.Length is 1);
|
||||
|
||||
foreach (var firstNode in firstNodes)
|
||||
{
|
||||
var letter = firstNode.Key[0];
|
||||
var target = firstNode.Value;
|
||||
|
||||
var node = new Node(letter, target);
|
||||
rootNodes.Add(node);
|
||||
|
||||
// Add sub-nodes
|
||||
ParseNodes(node, letter.ToString());
|
||||
}
|
||||
|
||||
return rootNodes;
|
||||
|
||||
void ParseNodes(Node node, string prefix)
|
||||
{
|
||||
// Find nodes that have previous node as prefixed
|
||||
var subNodes = dictionary
|
||||
.Where(p => p.Key.StartsWith(prefix) && p.Key.Length == prefix.Length + 1);
|
||||
|
||||
foreach (var subNode in subNodes)
|
||||
{
|
||||
var letter = subNode.Key[prefix.Length];
|
||||
var target = subNode.Value;
|
||||
|
||||
var newPrefix = $"{prefix}{letter}";
|
||||
|
||||
var newNode = new Node(letter, target);
|
||||
node.Nodes.Add(newNode);
|
||||
|
||||
// Recursively add sub-nodes
|
||||
ParseNodes(newNode, newPrefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string GenerateSource(List<Node> rootNodes)
|
||||
{
|
||||
var source = new StringBuilder();
|
||||
|
||||
// Usings and namespace
|
||||
source.Append(
|
||||
"""
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace PoyoLang.Translator;
|
||||
|
||||
"""
|
||||
);
|
||||
|
||||
// Partial class definition
|
||||
source.Append(
|
||||
"""
|
||||
public partial class PoyoLangTranslator
|
||||
{
|
||||
|
||||
"""
|
||||
);
|
||||
|
||||
// Next letter method definition
|
||||
source.Append(
|
||||
"""
|
||||
public void NextLetter(ref ReadOnlySpan<char> text, StringBuilder output)
|
||||
{
|
||||
"""
|
||||
);
|
||||
|
||||
// 0 length case and caps
|
||||
source.Append(
|
||||
"""
|
||||
if (text.Length < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var isCaps = char.IsUpper(text[0]);
|
||||
|
||||
"""
|
||||
);
|
||||
|
||||
GenerateSwitchCases(rootNodes, depth: 0, source: source);
|
||||
|
||||
// Next letter method end
|
||||
source.Append(
|
||||
"""
|
||||
// Punctuation/Unknown characters case
|
||||
text = text[1..];
|
||||
|
||||
output.Append(text[0]);
|
||||
}
|
||||
"""
|
||||
);
|
||||
|
||||
// Partial class end
|
||||
source.Append(
|
||||
"""
|
||||
}
|
||||
"""
|
||||
);
|
||||
|
||||
return source.ToString();
|
||||
}
|
||||
|
||||
private static void GenerateSwitchCases(List<Node> nodes, int depth, StringBuilder source)
|
||||
{
|
||||
var indent = Indent(depth * 3);
|
||||
|
||||
// Switch-case start
|
||||
source.Append(
|
||||
$$"""
|
||||
{{indent}}switch (text[{{depth}}])
|
||||
{{indent}}{
|
||||
"""
|
||||
);
|
||||
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
var targetLower = node.Target;
|
||||
var targetUpper = ToTitleCase(targetLower);
|
||||
|
||||
// Case start
|
||||
source.Append(
|
||||
$$"""
|
||||
{{indent}} case '{{node.Letter}}' or '{{char.ToUpper(node.Letter)}}':
|
||||
{{indent}}
|
||||
"""
|
||||
);
|
||||
|
||||
// Sub nodes handling
|
||||
if (node.Nodes.Count > 0)
|
||||
{
|
||||
source.Append(
|
||||
$$"""
|
||||
{{indent}} if (text.Length > {{depth + 1}})
|
||||
{{indent}} {
|
||||
"""
|
||||
);
|
||||
|
||||
// Sub nodes
|
||||
GenerateSwitchCases(node.Nodes, depth + 1, source);
|
||||
|
||||
source.Append(
|
||||
$$"""
|
||||
{{indent}} }
|
||||
"""
|
||||
);
|
||||
}
|
||||
|
||||
// Current node handling fallback
|
||||
source.Append(
|
||||
$$"""
|
||||
{{indent}}
|
||||
{{indent}} text = text[{{depth + 1}}..];
|
||||
{{indent}}
|
||||
{{indent}} output.Append(isCaps ? "{{targetUpper}}" : "{{targetLower}}");
|
||||
{{indent}}
|
||||
{{indent}} return;
|
||||
"""
|
||||
);
|
||||
}
|
||||
|
||||
// Switch-case end
|
||||
source.Append(
|
||||
$$"""
|
||||
|
||||
{{indent}}}
|
||||
"""
|
||||
);
|
||||
}
|
||||
|
||||
private static string ToTitleCase(string text)
|
||||
{
|
||||
return $"{char.ToUpper(text[0])}{text[1..]}";
|
||||
}
|
||||
|
||||
private static string Indent(int depth) => new(IndentChar, depth);
|
||||
}
|
||||
18
PoyoLang.Translator/PoyoLang.Translator.csproj
Normal file
18
PoyoLang.Translator/PoyoLang.Translator.csproj
Normal file
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\PoyoLang.Translator.SourceGenerator\PoyoLang.Translator.SourceGenerator.csproj" ReferenceOutputAssembly="false" OutputItemType="Analyzer" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="dictionary.json" />
|
||||
<AdditionalFiles Include="dictionary.json" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
6
PoyoLang.Translator/PoyoLangTranslator.cs
Normal file
6
PoyoLang.Translator/PoyoLangTranslator.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace PoyoLang.Translator;
|
||||
|
||||
public partial class PoyoLangTranslator
|
||||
{
|
||||
|
||||
}
|
||||
322
PoyoLang.Translator/dictionary.json
Normal file
322
PoyoLang.Translator/dictionary.json
Normal file
@@ -0,0 +1,322 @@
|
||||
{
|
||||
"poyo": " ",
|
||||
"poy\u00F3": "e",
|
||||
"poy\u00F2": "t",
|
||||
"poy\u00F4": "a",
|
||||
"poy\u00F6": "o",
|
||||
"poy\u00F5": "i",
|
||||
"poy\u014D": "n",
|
||||
"poy\u01D2": "e ",
|
||||
"p\u00F3yo": "r",
|
||||
"p\u00F3y\u00F3": "h",
|
||||
"p\u00F3y\u00F2": "s",
|
||||
"p\u00F3y\u00F4": "l",
|
||||
"p\u00F3y\u00F6": "d",
|
||||
"p\u00F3y\u00F5": "c",
|
||||
"p\u00F3y\u014D": "th",
|
||||
"p\u00F3y\u01D2": "u",
|
||||
"p\u00F2yo": "t ",
|
||||
"p\u00F2y\u00F3": "he",
|
||||
"p\u00F2y\u00F2": "m",
|
||||
"p\u00F2y\u00F4": "b",
|
||||
"p\u00F2y\u00F6": "f",
|
||||
"p\u00F2y\u00F5": "y",
|
||||
"p\u00F2y\u014D": "p",
|
||||
"p\u00F2y\u01D2": "the",
|
||||
"p\u00F4yo": "n ",
|
||||
"p\u00F4y\u00F3": "w",
|
||||
"p\u00F4y\u00F2": "g",
|
||||
"p\u00F4y\u00F4": "he ",
|
||||
"p\u00F4y\u00F6": "in",
|
||||
"p\u00F4y\u00F5": "y ",
|
||||
"p\u00F4y\u014D": "d ",
|
||||
"p\u00F4y\u01D2": "r ",
|
||||
"p\u00F6yo": "an",
|
||||
"p\u00F6y\u00F3": "er",
|
||||
"p\u00F6y\u00F2": "the ",
|
||||
"p\u00F6y\u00F4": "be",
|
||||
"p\u00F6y\u00F6": "at",
|
||||
"p\u00F6y\u00F5": "re",
|
||||
"p\u00F6y\u014D": "v",
|
||||
"p\u00F6y\u01D2": "on",
|
||||
"p\u00F5yo": "o ",
|
||||
"p\u00F5y\u00F3": "nd",
|
||||
"p\u00F5y\u00F2": "or",
|
||||
"p\u00F5y\u00F4": "be ",
|
||||
"p\u00F5y\u00F6": "ha",
|
||||
"p\u00F5y\u00F5": "en",
|
||||
"p\u00F5y\u014D": "to",
|
||||
"p\u00F5y\u01D2": "ve",
|
||||
"p\u014Dyo": "ou",
|
||||
"p\u014Dy\u00F3": "nd ",
|
||||
"p\u014Dy\u00F2": "it",
|
||||
"p\u014Dy\u00F4": "st",
|
||||
"p\u014Dy\u00F6": "l ",
|
||||
"p\u014Dy\u00F5": "k",
|
||||
"p\u014Dy\u014D": "te",
|
||||
"p\u014Dy\u01D2": "al",
|
||||
"p\u01D2yo": "ti",
|
||||
"p\u01D2y\u00F3": "f ",
|
||||
"p\u01D2y\u00F2": "and",
|
||||
"p\u01D2y\u00F4": "s ",
|
||||
"p\u01D2y\u00F6": "er ",
|
||||
"p\u01D2y\u00F5": "nt",
|
||||
"p\u01D2y\u014D": "and ",
|
||||
"p\u01D2y\u01D2": "of",
|
||||
"payo": "ar",
|
||||
"pay\u00F3": "a ",
|
||||
"pay\u00F2": "se",
|
||||
"pay\u00F4": "to ",
|
||||
"pay\u00F6": "ea",
|
||||
"pay\u00F5": "hi",
|
||||
"pay\u014D": "of ",
|
||||
"pay\u01D2": "me",
|
||||
"p\u00E1yo": "le",
|
||||
"p\u00E1y\u00F3": "on ",
|
||||
"p\u00E1y\u00F2": "h ",
|
||||
"p\u00E1y\u00F4": "co",
|
||||
"p\u00E1y\u00F6": "is",
|
||||
"p\u00E1y\u00F5": "in ",
|
||||
"p\u00E1y\u014D": "at ",
|
||||
"p\u00E1y\u01D2": "ro",
|
||||
"p\u00E0yo": "ll",
|
||||
"p\u00E0y\u00F3": "ve ",
|
||||
"p\u00E0y\u00F2": "de",
|
||||
"p\u00E0y\u00F4": "es",
|
||||
"p\u00E0y\u00F6": "ng",
|
||||
"p\u00E0y\u00F5": "io",
|
||||
"p\u00E0y\u014D": "om",
|
||||
"p\u00E0y\u01D2": "ne",
|
||||
"p\u00E2yo": "ic",
|
||||
"p\u00E2y\u00F3": "li",
|
||||
"p\u00E2y\u00F2": "ri",
|
||||
"p\u00E2y\u00F4": "ra",
|
||||
"p\u00E2y\u00F6": "as",
|
||||
"p\u00E2y\u00F5": "ce",
|
||||
"p\u00E2y\u014D": "g ",
|
||||
"p\u00E2y\u01D2": "ho",
|
||||
"p\u00E4yo": "ion",
|
||||
"p\u00E4y\u00F3": "ca",
|
||||
"p\u00E4y\u00F2": "or ",
|
||||
"p\u00E4y\u00F4": "ta",
|
||||
"p\u00E4y\u00F6": "ut",
|
||||
"p\u00E4y\u00F5": "el",
|
||||
"p\u00E4y\u014D": "ch",
|
||||
"p\u00E4y\u01D2": "m ",
|
||||
"p\u00E3yo": "hat",
|
||||
"p\u00E3y\u00F3": "ma",
|
||||
"p\u00E3y\u00F2": "hat ",
|
||||
"p\u00E3y\u00F4": "ur",
|
||||
"p\u00E3y\u00F6": "k ",
|
||||
"p\u00E3y\u00F5": "ng ",
|
||||
"p\u00E3y\u014D": "fo",
|
||||
"p\u00E3y\u01D2": "re ",
|
||||
"p\u0101yo": "no",
|
||||
"p\u0101y\u00F3": "si",
|
||||
"p\u0101y\u00F2": "her",
|
||||
"p\u0101y\u00F4": "av",
|
||||
"p\u0101y\u00F6": "nt ",
|
||||
"p\u0101y\u00F5": "tha",
|
||||
"p\u0101y\u014D": "ion ",
|
||||
"p\u0101y\u01D2": "il",
|
||||
"p\u01CEyo": "ent",
|
||||
"p\u01CEy\u00F3": "et",
|
||||
"p\u01CEy\u00F2": "la",
|
||||
"p\u01CEy\u00F4": "us",
|
||||
"p\u01CEy\u00F6": "ac",
|
||||
"p\u01CEy\u00F5": "ly",
|
||||
"p\u01CEy\u014D": "ing",
|
||||
"p\u01CEy\u01D2": "wh",
|
||||
"piyo": "ow",
|
||||
"piy\u00F3": "ave",
|
||||
"piy\u00F2": "pe",
|
||||
"piy\u00F4": "ec",
|
||||
"piy\u00F6": "ly ",
|
||||
"piy\u00F5": "ot",
|
||||
"piy\u014D": "tio",
|
||||
"piy\u01D2": "ll ",
|
||||
"p\u00EDyo": "tion",
|
||||
"p\u00EDy\u00F3": "wi",
|
||||
"p\u00EDy\u00F2": "ave ",
|
||||
"p\u00EDy\u00F4": "se ",
|
||||
"p\u00EDy\u00F6": "al ",
|
||||
"p\u00EDy\u00F5": "ing ",
|
||||
"p\u00EDy\u014D": "ge",
|
||||
"p\u00EDy\u01D2": "it ",
|
||||
"p\u00ECyo": "so",
|
||||
"p\u00ECy\u00F3": "that",
|
||||
"p\u00ECy\u00F2": "that ",
|
||||
"p\u00ECy\u00F4": "for",
|
||||
"p\u00ECy\u00F6": "ay",
|
||||
"p\u00ECy\u00F5": "st ",
|
||||
"p\u00ECy\u014D": "lo",
|
||||
"p\u00ECy\u01D2": "pr",
|
||||
"p\u00EEyo": "ee",
|
||||
"p\u00EEy\u00F3": "hav",
|
||||
"p\u00EEy\u00F2": "have",
|
||||
"p\u00EEy\u00F4": "have ",
|
||||
"p\u00EEy\u00F6": "tr",
|
||||
"p\u00EEy\u00F5": "sh",
|
||||
"p\u00EEy\u014D": "le ",
|
||||
"p\u00EEy\u01D2": "w ",
|
||||
"p\u00EFyo": "mo",
|
||||
"p\u00EFy\u00F3": "an ",
|
||||
"p\u00EFy\u00F2": "tion ",
|
||||
"p\u00EFy\u00F4": "ut ",
|
||||
"p\u00EFy\u00F6": "un",
|
||||
"p\u00EFy\u00F5": "ce ",
|
||||
"p\u00EFy\u014D": "ct",
|
||||
"p\u00EFy\u01D2": "ay ",
|
||||
"p\u0129yo": "me ",
|
||||
"p\u0129y\u00F3": "di",
|
||||
"p\u0129y\u00F2": "ss",
|
||||
"p\u0129y\u00F4": "ed",
|
||||
"p\u0129y\u00F6": "i ",
|
||||
"p\u0129y\u00F5": "we",
|
||||
"p\u0129y\u014D": "ol",
|
||||
"p\u0129y\u01D2": "yo",
|
||||
"p\u012Byo": "ul",
|
||||
"p\u012By\u00F3": "rt",
|
||||
"p\u012By\u00F2": "te ",
|
||||
"p\u012By\u00F4": "em",
|
||||
"p\u012By\u00F6": "th ",
|
||||
"p\u012By\u00F5": "ter",
|
||||
"p\u012By\u014D": "do",
|
||||
"p\u012By\u01D2": "ke",
|
||||
"p\u01D0yo": "po",
|
||||
"p\u01D0y\u00F3": "ir",
|
||||
"p\u01D0y\u00F2": "thi",
|
||||
"p\u01D0y\u00F4": "nc",
|
||||
"p\u01D0y\u00F6": "you",
|
||||
"p\u01D0y\u00F5": "his",
|
||||
"p\u01D0y\u014D": "im",
|
||||
"p\u01D0y\u01D2": "is ",
|
||||
"puyo": "oo",
|
||||
"puy\u00F3": "all",
|
||||
"puy\u00F2": "ent ",
|
||||
"puy\u00F4": "ig",
|
||||
"puy\u00F6": "pa",
|
||||
"puy\u00F5": "ate",
|
||||
"puy\u014D": "p ",
|
||||
"puy\u01D2": "ati",
|
||||
"p\u00FAyo": "ld",
|
||||
"p\u00FAy\u00F3": "fi",
|
||||
"p\u00FAy\u00F2": "his ",
|
||||
"p\u00FAy\u00F4": "en ",
|
||||
"p\u00FAy\u00F6": "ver",
|
||||
"p\u00FAy\u00F5": "na",
|
||||
"p\u00FAy\u014D": "mi",
|
||||
"p\u00FAy\u01D2": "ry",
|
||||
"p\u00F9yo": "ai",
|
||||
"p\u00F9y\u00F3": "pl",
|
||||
"p\u00F9y\u00F2": "ow ",
|
||||
"p\u00F9y\u00F4": "gh",
|
||||
"p\u00F9y\u00F6": "wo",
|
||||
"p\u00F9y\u00F5": "sa",
|
||||
"p\u00F9y\u014D": "ad",
|
||||
"p\u00F9y\u01D2": "her ",
|
||||
"p\u00FByo": "ld ",
|
||||
"p\u00FBy\u00F3": "ev",
|
||||
"p\u00FBy\u00F2": "su",
|
||||
"p\u00FBy\u00F4": "os",
|
||||
"p\u00FBy\u00F6": "iv",
|
||||
"p\u00FBy\u00F5": "for ",
|
||||
"p\u00FBy\u014D": "ther",
|
||||
"p\u00FBy\u01D2": "wa",
|
||||
"p\u00FCyo": "ni",
|
||||
"p\u00FCy\u00F3": "ry ",
|
||||
"p\u00FCy\u00F2": "ith",
|
||||
"p\u00FCy\u00F4": "am",
|
||||
"p\u00FCy\u00F6": "bo",
|
||||
"p\u00FCy\u00F5": "u ",
|
||||
"p\u00FCy\u014D": "ch ",
|
||||
"p\u00FCy\u01D2": "ab",
|
||||
"p\u0169yo": "ou ",
|
||||
"p\u0169y\u00F3": "you ",
|
||||
"p\u0169y\u00F2": "op",
|
||||
"p\u0169y\u00F4": "id",
|
||||
"p\u0169y\u00F6": "wit",
|
||||
"p\u0169y\u00F5": "ne ",
|
||||
"p\u0169y\u014D": "bu",
|
||||
"p\u0169y\u01D2": "with",
|
||||
"p\u016Byo": "fe",
|
||||
"p\u016By\u00F3": "tu",
|
||||
"p\u016By\u00F2": "bl",
|
||||
"p\u016By\u00F4": "ere",
|
||||
"p\u016By\u00F6": "atio",
|
||||
"p\u016By\u00F5": "x",
|
||||
"p\u016By\u014D": "ed ",
|
||||
"p\u016By\u01D2": "ation",
|
||||
"p\u01D4yo": "ome",
|
||||
"p\u01D4y\u00F3": "out",
|
||||
"p\u01D4y\u00F2": "con",
|
||||
"p\u01D4y\u00F4": "ke ",
|
||||
"p\u01D4y\u00F6": "ns",
|
||||
"p\u01D4y\u00F5": "rea",
|
||||
"p\u01D4y\u014D": "eve",
|
||||
"p\u01D4y\u01D2": "ci",
|
||||
"peyo": "ie",
|
||||
"pey\u00F3": "com",
|
||||
"pey\u00F2": "ar ",
|
||||
"pey\u00F4": "et ",
|
||||
"pey\u00F6": "ith ",
|
||||
"pey\u00F5": "vi",
|
||||
"pey\u014D": "ty",
|
||||
"pey\u01D2": "with ",
|
||||
"p\u00E9yo": "ear",
|
||||
"p\u00E9y\u00F3": "fr",
|
||||
"p\u00E9y\u00F2": "if",
|
||||
"p\u00E9y\u00F4": "ag",
|
||||
"p\u00E9y\u00F6": "res",
|
||||
"p\u00E9y\u00F5": "ate ",
|
||||
"p\u00E9y\u014D": "do ",
|
||||
"p\u00E9y\u01D2": "mp",
|
||||
"p\u00E8yo": "ey",
|
||||
"p\u00E8y\u00F3": "ive",
|
||||
"p\u00E8y\u00F2": "ia",
|
||||
"p\u00E8y\u00F4": "pro",
|
||||
"p\u00E8y\u00F6": "ba",
|
||||
"p\u00E8y\u00F5": "ov",
|
||||
"p\u00E8y\u014D": "nce",
|
||||
"p\u00E8y\u01D2": "as ",
|
||||
"p\u00EAyo": "ck",
|
||||
"p\u00EAy\u00F3": "sta",
|
||||
"p\u00EAy\u00F2": "sp",
|
||||
"p\u00EAy\u00F4": "ty ",
|
||||
"p\u00EAy\u00F6": "gr",
|
||||
"p\u00EAy\u00F5": "ter ",
|
||||
"p\u00EAy\u014D": "ation ",
|
||||
"p\u00EAy\u01D2": "hin",
|
||||
"p\u00EByo": "ess",
|
||||
"p\u00EBy\u00F3": "ak",
|
||||
"p\u00EBy\u00F2": "ge ",
|
||||
"p\u00EBy\u00F4": "ill",
|
||||
"p\u00EBy\u00F6": "go",
|
||||
"p\u00EBy\u00F5": "out ",
|
||||
"p\u00EBy\u014D": "our",
|
||||
"p\u00EBy\u01D2": "ot ",
|
||||
"p\u1EBDyo": "ey ",
|
||||
"p\u1EBDy\u00F3": "fa",
|
||||
"p\u1EBDy\u00F2": "ss ",
|
||||
"p\u1EBDy\u00F4": "igh",
|
||||
"p\u1EBDy\u00F6": "not",
|
||||
"p\u1EBDy\u00F5": "int",
|
||||
"p\u1EBDy\u014D": "ex",
|
||||
"p\u1EBDy\u01D2": "j",
|
||||
"p\u0113yo": "om ",
|
||||
"p\u0113y\u00F3": "one",
|
||||
"p\u0113y\u00F2": "ap",
|
||||
"p\u0113y\u00F4": "men",
|
||||
"p\u0113y\u00F6": "all ",
|
||||
"p\u0113y\u00F5": "od",
|
||||
"p\u0113y\u014D": "here",
|
||||
"p\u0113y\u01D2": "est",
|
||||
"p\u011Byo": "up",
|
||||
"p\u011By\u00F3": "ive ",
|
||||
"p\u011By\u00F2": "rs",
|
||||
"p\u011By\u00F4": "ere ",
|
||||
"p\u011By\u00F6": "ove",
|
||||
"p\u011By\u00F5": "nce ",
|
||||
"p\u011By\u014D": "ide",
|
||||
"p\u011By\u01D2": "uc"
|
||||
}
|
||||
12
PoyoLang.sln
12
PoyoLang.sln
@@ -6,6 +6,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoyoLang.Test", "PoyoLang.T
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoyoLang.Dictionary.Generation", "PoyoLang.Dictionary.Generation\PoyoLang.Dictionary.Generation.csproj", "{43FFCEF2-A4AA-49A1-9731-CB6DAD9863F2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoyoLang.Translator.SourceGenerator", "PoyoLang.Translator.SourceGenerator\PoyoLang.Translator.SourceGenerator.csproj", "{0411CE3E-B80E-4AC3-839F-307AD0A16774}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoyoLang.Translator", "PoyoLang.Translator\PoyoLang.Translator.csproj", "{079808D0-16FB-4D01-A502-5366018312CB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -24,5 +28,13 @@ Global
|
||||
{43FFCEF2-A4AA-49A1-9731-CB6DAD9863F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{43FFCEF2-A4AA-49A1-9731-CB6DAD9863F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{43FFCEF2-A4AA-49A1-9731-CB6DAD9863F2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0411CE3E-B80E-4AC3-839F-307AD0A16774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0411CE3E-B80E-4AC3-839F-307AD0A16774}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0411CE3E-B80E-4AC3-839F-307AD0A16774}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0411CE3E-B80E-4AC3-839F-307AD0A16774}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{079808D0-16FB-4D01-A502-5366018312CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{079808D0-16FB-4D01-A502-5366018312CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{079808D0-16FB-4D01-A502-5366018312CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{079808D0-16FB-4D01-A502-5366018312CB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Reference in New Issue
Block a user