ExpressionMediator.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System;
  2. using System.Text;
  3. using Microsoft.VisualBasic;
  4. using NTERA.Core;
  5. using NTERA.EmuEra.Game.EraEmu.GameData.Variable;
  6. using NTERA.EmuEra.Game.EraEmu.GameProc;
  7. using NTERA.EmuEra.Game.EraEmu.GameProc.Function;
  8. using NTERA.EmuEra.Game.EraEmu.Sub;
  9. namespace NTERA.EmuEra.Game.EraEmu.GameData.Expression
  10. {
  11. //1756 元ExpressionEvaluator。GetValueの仕事はなくなったので改名。
  12. //IOperandTerm間での通信や共通の処理に使う。
  13. //変数が絡む仕事はVariableEvaluatorへ。
  14. internal sealed class ExpressionMediator
  15. {
  16. public ExpressionMediator(Process proc, VariableEvaluator vev, IConsole console)
  17. {
  18. VEvaluator = vev;
  19. Process = proc;
  20. Console = console;
  21. }
  22. public readonly VariableEvaluator VEvaluator;
  23. public readonly Process Process;
  24. public readonly IConsole Console;
  25. private bool forceHiragana;
  26. private bool forceKatakana;
  27. private bool halftoFull;
  28. public void ForceKana(Int64 flag)
  29. {
  30. if (flag < 0 || flag > 3)
  31. throw new CodeEE("命令FORCEKANAの引数が指定可能な範囲(0~3)を超えています");
  32. forceKatakana = (flag == 1) ? true : false;
  33. forceHiragana = (flag > 1) ? true : false;
  34. halftoFull = (flag == 3) ? true : false;
  35. }
  36. public bool ForceKana()
  37. {
  38. return (forceHiragana | forceKatakana | halftoFull);
  39. }
  40. public void OutputToConsole(string str, FunctionIdentifier func)
  41. {
  42. if (func.IsPrintSingle())
  43. Console.PrintSingleLine(str, false);
  44. else
  45. {
  46. Console.Write(str);
  47. if (func.IsNewLine() || func.IsWaitInput())
  48. {
  49. Console.NewLine();
  50. if (func.IsWaitInput())
  51. Console.ReadAnyKey();
  52. }
  53. }
  54. Console.UseSetColorStyle = true;
  55. }
  56. public string ConvertStringType(string str)
  57. {
  58. if (!(forceHiragana | forceKatakana | halftoFull))
  59. return str;
  60. if (forceKatakana)
  61. return Strings.StrConv(str, VbStrConv.Katakana, 0x0411);
  62. if (forceHiragana)
  63. {
  64. if (halftoFull)
  65. return Strings.StrConv(str, VbStrConv.Hiragana | VbStrConv.Wide, 0x0411);
  66. return Strings.StrConv(str, VbStrConv.Hiragana, 0x0411);
  67. }
  68. return str;
  69. }
  70. public string CheckEscape(string str)
  71. {
  72. StringStream st = new StringStream(str);
  73. StringBuilder buffer = new StringBuilder();
  74. while (!st.EOS)
  75. {
  76. //エスケープ文字の使用
  77. if (st.Current == '\\')
  78. {
  79. st.ShiftNext();
  80. switch (st.Current)
  81. {
  82. case '\\':
  83. buffer.Append('\\');
  84. buffer.Append('\\');
  85. break;
  86. case '{':
  87. case '}':
  88. case '%':
  89. case '@':
  90. buffer.Append('\\');
  91. buffer.Append(st.Current);
  92. break;
  93. default:
  94. buffer.Append("\\\\");
  95. buffer.Append(st.Current);
  96. break;
  97. }
  98. st.ShiftNext();
  99. continue;
  100. }
  101. buffer.Append(st.Current);
  102. st.ShiftNext();
  103. }
  104. return buffer.ToString();
  105. }
  106. public string CreateBar(Int64 var, Int64 max, Int64 length)
  107. {
  108. if (max <= 0)
  109. throw new CodeEE("BARの最大値が正の値ではありません");
  110. if (length <= 0)
  111. throw new CodeEE("BARの長さが正の値ではありません");
  112. if (length >= 100)//暴走を防ぐため。
  113. throw new CodeEE("BARが長すぎます");
  114. StringBuilder builder = new StringBuilder();
  115. builder.Append('[');
  116. int count;
  117. unchecked
  118. {
  119. count = (int)(var * length / max);
  120. }
  121. if (count < 0)
  122. count = 0;
  123. if (count > length)
  124. count = (int)length;
  125. builder.Append(Config.Config.BarChar1, count);
  126. builder.Append(Config.Config.BarChar2, (int)length - count);
  127. builder.Append(']');
  128. return builder.ToString();
  129. }
  130. }
  131. }