diff --git a/PoyoLang.Analysis.NGrams/60000 Most Frequent Words in American English - Corpus of Contemporary American English.xlsx b/PoyoLang.Analysis.NGrams/60000 Most Frequent Words in American English - Corpus of Contemporary American English.xlsx deleted file mode 100644 index 3c3a0de..0000000 Binary files a/PoyoLang.Analysis.NGrams/60000 Most Frequent Words in American English - Corpus of Contemporary American English.xlsx and /dev/null differ diff --git a/PoyoLang.Analysis.NGrams/PoyoLang.Analysis.NGrams.csproj b/PoyoLang.Analysis.NGrams/PoyoLang.Analysis.NGrams.csproj deleted file mode 100644 index d618101..0000000 --- a/PoyoLang.Analysis.NGrams/PoyoLang.Analysis.NGrams.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - net9.0 - enable - enable - - - - - - - - - - - - diff --git a/PoyoLang.Analysis.NGrams/Program.cs b/PoyoLang.Analysis.NGrams/Program.cs deleted file mode 100644 index 577098b..0000000 --- a/PoyoLang.Analysis.NGrams/Program.cs +++ /dev/null @@ -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(); - -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 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); - diff --git a/PoyoLang.Test/Program.cs b/PoyoLang.Test/Program.cs index 6334d20..e8cd52a 100644 --- a/PoyoLang.Test/Program.cs +++ b/PoyoLang.Test/Program.cs @@ -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(); + +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 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); \ No newline at end of file diff --git a/PoyoLang.Translator.SourceGenerator/Node.cs b/PoyoLang.Translator.SourceGenerator/Node.cs new file mode 100644 index 0000000..a5118e5 --- /dev/null +++ b/PoyoLang.Translator.SourceGenerator/Node.cs @@ -0,0 +1,15 @@ +namespace PoyoLang.Translator.SourceGenerator; + +public class Node +{ + public char Letter { get; } + public string Target { get; } + + public List Nodes { get; } = []; + + public Node(char letter, string target) + { + Letter = letter; + Target = target; + } +} \ No newline at end of file diff --git a/PoyoLang.Translator.SourceGenerator/PoyoLang.Translator.SourceGenerator.csproj b/PoyoLang.Translator.SourceGenerator/PoyoLang.Translator.SourceGenerator.csproj new file mode 100644 index 0000000..13920ca --- /dev/null +++ b/PoyoLang.Translator.SourceGenerator/PoyoLang.Translator.SourceGenerator.csproj @@ -0,0 +1,31 @@ + + + + netstandard2.0 + enable + enable + default + + false + true + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/PoyoLang.Translator.SourceGenerator/PoyoLangTranslatorGenerator.cs b/PoyoLang.Translator.SourceGenerator/PoyoLangTranslatorGenerator.cs new file mode 100644 index 0000000..096774f --- /dev/null +++ b/PoyoLang.Translator.SourceGenerator/PoyoLangTranslatorGenerator.cs @@ -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!.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 BuildPrefixTree(Dictionary dictionary) + { + var rootNodes = new List(); + + 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 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 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 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); +} \ No newline at end of file diff --git a/PoyoLang.Translator/PoyoLang.Translator.csproj b/PoyoLang.Translator/PoyoLang.Translator.csproj new file mode 100644 index 0000000..c7c030c --- /dev/null +++ b/PoyoLang.Translator/PoyoLang.Translator.csproj @@ -0,0 +1,18 @@ + + + + net9.0 + enable + enable + + + + + + + + + + + + diff --git a/PoyoLang.Translator/PoyoLangTranslator.cs b/PoyoLang.Translator/PoyoLangTranslator.cs new file mode 100644 index 0000000..61fc82e --- /dev/null +++ b/PoyoLang.Translator/PoyoLangTranslator.cs @@ -0,0 +1,6 @@ +namespace PoyoLang.Translator; + +public partial class PoyoLangTranslator +{ + +} \ No newline at end of file diff --git a/PoyoLang.Translator/dictionary.json b/PoyoLang.Translator/dictionary.json new file mode 100644 index 0000000..9bc8a12 --- /dev/null +++ b/PoyoLang.Translator/dictionary.json @@ -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" +} \ No newline at end of file diff --git a/PoyoLang.sln b/PoyoLang.sln index 0e633e8..5d85d8e 100644 --- a/PoyoLang.sln +++ b/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