@@ -5,6 +5,8 @@ This Source Code Form is subject to the terms of the
55at http://mozilla.org/MPL/2.0/.
66----------------------------------------------------------*/
77using System ;
8+ using System . IO ;
9+ using ScriptEngine . HostedScript . Library . Binary ;
810using ScriptEngine . Machine ;
911using ScriptEngine . Machine . Contexts ;
1012
@@ -168,6 +170,24 @@ public IValue InputEncoding
168170 Console . InputEncoding = TextEncodingEnum . GetEncoding ( value ) ;
169171 }
170172 }
173+
174+ /// <summary>
175+ /// Возвращает или задает кодировку консоли, используемую при чтении входных данных.
176+ /// </summary>
177+ /// <returns>КодировкаТекста</returns>
178+ [ ContextProperty ( "КодировкаВыходногоПотока" , "InputEncoding" ) ]
179+ public IValue OutputEncoding
180+ {
181+ get
182+ {
183+ var encodingEnum = GlobalsManager . GetEnum < TextEncodingEnum > ( ) ;
184+ return encodingEnum . GetValue ( Console . OutputEncoding ) ;
185+ }
186+ set
187+ {
188+ Console . OutputEncoding = TextEncodingEnum . GetEncoding ( value ) ;
189+ }
190+ }
171191
172192 /// <summary>
173193 /// Воспроизводит звуковой сигнал.
@@ -178,10 +198,77 @@ public void Beep()
178198 Console . Beep ( ) ;
179199 }
180200
201+ /// <summary>
202+ /// Получает системный поток ввода stdin
203+ /// </summary>
204+ /// <returns>Поток</returns>
205+ [ ContextMethod ( "ОткрытьСтандартныйПотокВвода" , "OpenStandardInput" ) ]
206+ public GenericStream OpenStandardInput ( )
207+ {
208+ var stream = Console . OpenStandardInput ( ) ;
209+ return new GenericStream ( stream , true ) ;
210+ }
211+
212+ /// <summary>
213+ /// Получает системный поток вывода ошибок stderr
214+ /// </summary>
215+ /// <returns>Поток</returns>
216+ [ ContextMethod ( "ОткрытьСтандартныйПотокОшибок" , "OpenStandardError" ) ]
217+ public GenericStream OpenStandardError ( )
218+ {
219+ var stream = Console . OpenStandardError ( ) ;
220+ return new GenericStream ( stream ) ;
221+ }
222+
223+ /// <summary>
224+ /// Получает системный поток вывода stdout
225+ /// </summary>
226+ /// <returns>Поток</returns>
227+ [ ContextMethod ( "ОткрытьСтандартныйПотокВывода" , "OpenStandardOutput" ) ]
228+ public GenericStream OpenStandardOutput ( )
229+ {
230+ var stream = Console . OpenStandardOutput ( ) ;
231+ return new GenericStream ( stream ) ;
232+ }
233+
234+ /// <summary>
235+ /// Глобально переопределяет стандартный вывод и направляет в другой поток
236+ /// </summary>
237+ /// <param name="target">Поток назначения</param>
238+ [ ContextMethod ( "УстановитьПотокВывода" , "SetOutput" ) ]
239+ public void SetOutput ( IValue target )
240+ {
241+ if ( ! ( target . AsObject ( ) is IStreamWrapper stream ) )
242+ throw RuntimeException . InvalidArgumentType ( nameof ( target ) ) ;
243+
244+ var writer = new StreamWriter ( stream . GetUnderlyingStream ( ) , Console . OutputEncoding )
245+ {
246+ AutoFlush = true ,
247+ } ;
248+ Console . SetOut ( writer ) ;
249+ }
250+
251+ /// <summary>
252+ /// Глобально переопределяет стандартный поток ошибок и направляет в другой поток
253+ /// </summary>
254+ /// <param name="target">Поток назначения</param>
255+ [ ContextMethod ( "УстановитьПотокОшибок" , "SetError" ) ]
256+ public void SetError ( IValue target )
257+ {
258+ if ( ! ( target . AsObject ( ) is IStreamWrapper stream ) )
259+ throw RuntimeException . InvalidArgumentType ( nameof ( target ) ) ;
260+
261+ var writer = new StreamWriter ( stream . GetUnderlyingStream ( ) ) ;
262+ Console . SetError ( writer ) ;
263+ }
264+
181265 [ ScriptConstructor ]
182266 public static ConsoleContext Constructor ( )
183267 {
184- return new ConsoleContext ( ) ;
268+ var provider = GlobalsManager . GetGlobalContext < ConsoleProvider > ( ) ;
269+ SystemLogger . Write ( "WARNING: Constructor of Console is obsolete. Use global property Консоль/Console" ) ;
270+
271+ return provider . Console ;
185272 }
186273 }
187274
0 commit comments