diff --git a/README.md b/README.md index 187ed33..b5c69b9 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ Console.WriteLine(example); In production, CST files were used in The Sims Online to provide translations. Each translation was split into their respective directories: -- ``en/hints/toolbar.cst`` -- ``sv/hints/toolbar.cst`` +- ``uitext/english.dir/hints/toolbar.cst`` +- ``uitext/swedish.dir/hints/toolbar.cst`` As long as the key remained the same, it didn't matter what directory the file was located in. diff --git a/notebooks/cst.ipynb b/notebooks/cst.ipynb index db164e1..5ce3b54 100644 --- a/notebooks/cst.ipynb +++ b/notebooks/cst.ipynb @@ -18,7 +18,8 @@ "execution_count": 1, "metadata": {}, "source": [ - "using System.IO;" + "using System.IO;\n", + "using System.Text;" ], "outputs": [] }, @@ -60,8 +61,32 @@ "\n", " }\n", "\n", - " // TODO: support argument parameters\n", - " static string GetEntry(IEnumerable entries, string key, params string[] args)\n", + " static string ArgumentParser(string content, string[] args)\n", + " {\n", + " var sb = new StringBuilder();\n", + "\n", + " for (var i = 0; i < content.Length; i++)\n", + " {\n", + " var curArgs = content.Substring(i, 1);\n", + " var argsCounter = 0;\n", + "\n", + " if (curArgs.Contains(\"%\"))\n", + " {\n", + " if (argsCounter < args.Length)\n", + " {\n", + " sb.Append(curArgs.Replace(\"%\", args[argsCounter]));\n", + " i++;\n", + " }\n", + " }\n", + " else\n", + " sb.Append(curArgs);\n", + " }\n", + "\n", + " return sb.ToString();\n", + " }\n", + "\n", + " static string GetEntry(IEnumerable entries, string key,\n", + " params string[] args)\n", " {\n", " var translation = \"[ENTRY NOT FOUND]\";\n", "\n", @@ -73,17 +98,18 @@ " continue;\n", " \n", " const char caret = '^';\n", - " // const char token = '%';\n", "\n", " var startIndex = entry.IndexOf(caret.ToString(),\n", " StringComparison.OrdinalIgnoreCase);\n", "\n", " var line = entry.Substring(startIndex);\n", "\n", - " /*foreach (var arg in args)\n", - " Regex.Replace(line, $\"%[1-100]\", arg);*/\n", + " var content = line.TrimStart(caret).TrimEnd(caret);\n", "\n", - " translation = line.Trim(caret);\n", + " if (args.Length > 0)\n", + " translation = ArgumentParser(content, args);\n", + " else\n", + " translation = content;\n", " }\n", "\n", " return translation;\n", @@ -99,8 +125,8 @@ "source": [ "var v1Path = Path.Combine(Environment.CurrentDirectory, \"data\", \"v1.cst\");\n", "var v1File = File.ReadAllText(v1Path);\n", - "var multiLine = CST.Parse(v1File, 1);\n", - "var singleLine = CST.Parse(v1File, 2);\n", + "var singleLine = CST.Parse(v1File, 1, \"FENNEC\");\n", + "var multiLine = CST.Parse(v1File, 2);\n", "Console.WriteLine($\"Single line:{Environment.NewLine}{singleLine}\");\n", "Console.WriteLine($\"Multiline:{Environment.NewLine}{multiLine}\");" ], @@ -108,7 +134,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Single line:\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pharetra nunc nec erat finibus efficitur. Duis non ullamcorper purus. Donec sit amet ultricies sapien. Sed lacinia sem eu nunc gravida, vitae tincidunt eros tempus. Quisque nibh est, tempus sit amet purus at, facilisis cursus ante. Nam nisi purus, vehicula sed magna ac, lobortis aliquam urna. Sed condimentum, felis a placerat tincidunt, est augue pulvinar turpis, eu dictum leo diam quis mi. Nulla non efficitur neque, sed efficitur orci. Aliquam quis libero consequat, convallis tortor sit amet, varius orci.\n\nOrci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc vel dictum eros, vitae mattis risus. Curabitur eget nisi interdum, euismod nisl in, fermentum turpis. Morbi a feugiat lacus. Duis ligula felis, commodo quis sodales ac, congue sit amet tortor. Sed vulputate, velit id interdum convallis, purus nisl interdum lorem, sit amet aliquam lacus sapien ac neque. Proin sit amet ultricies mi.\r\n" + "text/plain": "Single line:\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac dictum orci, at tincidunt nulla. Donec aliquet, FENNEC eros non interdum posuere, ipsum sapien molestie nunc, nec facilisis libero ipsum et risus. In sed lorem vel ipsum placerat viverra.\r\n" }, "execution_count": 1, "metadata": {} @@ -116,7 +142,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Multiline:\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac dictum orci, at tincidunt nulla. Donec aliquet, eros non interdum posuere, ipsum sapien molestie nunc, nec facilisis libero ipsum et risus. In sed lorem vel ipsum placerat viverra.\r\n" + "text/plain": "Multiline:\r\n[ENTRY NOT FOUND]\r\n" }, "execution_count": 1, "metadata": {} @@ -130,8 +156,8 @@ "source": [ "var v2Path = Path.Combine(Environment.CurrentDirectory, \"data\", \"v2.cst\");\n", "var v2File = File.ReadAllText(v2Path);\n", - "var multiLineV2 = CST.Parse(v2File, \"Multiline\");\n", "var singleLineV2 = CST.Parse(v2File, \"Singleline\");\n", + "var multiLineV2 = CST.Parse(v2File, \"Multiline\", \"DOG\", \"CAT\");;\n", "Console.WriteLine($\"Single line v2:{Environment.NewLine}{singleLineV2}\");\n", "Console.WriteLine($\"Multiline v2:{Environment.NewLine}{multiLineV2}\");" ], @@ -147,7 +173,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Multiline v2:\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc gravida nunc non justo pretium consectetur. Sed tempus libero ac ligula aliquam elementum. Duis vitae interdum leo. Sed semper nulla %1 a lectus dictum dictum. Ut mattis eu tortor in bibendum. Integer mattis tincidunt aliquet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce quis orci nisl.\n\nQuisque vehicula, nisi ut scelerisque sodales, nisi ipsum sodales ipsum, in rutrum tellus lacus sed nibh. Etiam mauris velit, elementum sed placerat et, elementum et tellus. Duis vitae elit fermentum, viverra lorem in, lobortis elit. Maecenas eget nibh et lectus auctor dignissim.\r\n" + "text/plain": "Multiline v2:\r\n[ENTRY NOT FOUND]\r\n" }, "execution_count": 1, "metadata": {} diff --git a/notebooks/data/v1.cst b/notebooks/data/v1.cst index 23de77a..8b800ec 100644 --- a/notebooks/data/v1.cst +++ b/notebooks/data/v1.cst @@ -1,4 +1,4 @@ -1 ^Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac dictum orci, at tincidunt nulla. Donec aliquet, eros non interdum posuere, ipsum sapien molestie nunc, nec facilisis libero ipsum et risus. In sed lorem vel ipsum placerat viverra.^ +1 ^Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac dictum orci, at tincidunt nulla. Donec aliquet, %1 eros non interdum posuere, ipsum sapien molestie nunc, nec facilisis libero ipsum et risus. In sed lorem vel ipsum placerat viverra.^ 2 ^Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc pharetra nunc nec erat finibus efficitur. Duis non ullamcorper purus. Donec sit amet ultricies sapien. Sed lacinia sem eu nunc gravida, vitae tincidunt eros tempus. Quisque nibh est, tempus sit amet purus at, facilisis cursus ante. Nam nisi purus, vehicula sed magna ac, lobortis aliquam urna. Sed condimentum, felis a placerat tincidunt, est augue pulvinar turpis, eu dictum leo diam quis mi. Nulla non efficitur neque, sed efficitur orci. Aliquam quis libero consequat, convallis tortor sit amet, varius orci. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc vel dictum eros, vitae mattis risus. Curabitur eget nisi interdum, euismod nisl in, fermentum turpis. Morbi a feugiat lacus. Duis ligula felis, commodo quis sodales ac, congue sit amet tortor. Sed vulputate, velit id interdum convallis, purus nisl interdum lorem, sit amet aliquam lacus sapien ac neque. Proin sit amet ultricies mi.^ diff --git a/notebooks/data/v2.cst b/notebooks/data/v2.cst index 440d3a3..842d506 100644 --- a/notebooks/data/v2.cst +++ b/notebooks/data/v2.cst @@ -1,4 +1,4 @@ Singleline^Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ultricies nulla eu tortor mattis, dictum posuere lacus ornare. Maecenas a massa in ligula finibus luctus eu vitae nibh. Proin imperdiet dapibus mauris quis placerat.^ -Multiline ^Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc gravida nunc non justo pretium consectetur. Sed tempus libero ac ligula aliquam elementum. Duis vitae interdum leo. Sed semper nulla %1 a lectus dictum dictum. Ut mattis eu tortor in bibendum. Integer mattis tincidunt aliquet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce quis orci nisl. +Multiline ^Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc gravida nunc non justo pretium consectetur. Sed tempus libero ac ligula aliquam elementum. Duis vitae interdum leo. Sed semper nulla %1 a lectus dictum dictum. Ut mattis eu tortor in bibendum. Integer mattis tincidunt aliquet. Vestibulum ante ipsum primis in faucibus orci %2 luctus et ultrices posuere cubilia Curae; Fusce quis orci nisl. Quisque vehicula, nisi ut scelerisque sodales, nisi ipsum sodales ipsum, in rutrum tellus lacus sed nibh. Etiam mauris velit, elementum sed placerat et, elementum et tellus. Duis vitae elit fermentum, viverra lorem in, lobortis elit. Maecenas eget nibh et lectus auctor dignissim.^ \ No newline at end of file