/// <summary> /// Loads a Monkeyspeak script from a file into a <see cref="Monkeyspeak.Page"/>. /// </summary> /// <param name="filePath">the file path to the script</param> /// <returns></returns> /// <exception cref="System.IO.IOException"></exception> public Page LoadFromFile(string filePath) { if (!File.Exists(filePath)) { // small fix for NUnit cases where the path is a temp location, also useful when passing simple file names to this method var path = Path.GetDirectoryName(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly()?.CodeBase).Path)); path = Path.Combine(path, filePath); if (File.Exists(path)) { filePath = path; } else { throw new IOException($"{path} does not exist"); } } using (var reader = new SStreamReader(filePath)) { Page page = new Page(this); using (var lexer = new Lexer(this, reader)) { page.VisitingToken = VisitTokens; page.GenerateBlocks(lexer); page.VisitingToken = null; } return(page); } }
/// <summary> /// Loads a Monkeyspeak script from a string into a <see cref="Monkeyspeak.Page"/>. /// </summary> /// <param name="chunk">String that contains the Monkeyspeak script source.</param> /// <returns></returns> public Page LoadFromString(string chunk) { if (string.IsNullOrWhiteSpace(chunk)) { throw new NullReferenceException("chunk"); } try { var stream = new MemoryStream(Encoding.UTF8.GetBytes(chunk)); using (var reader = new SStreamReader(stream, Encoding.UTF8)) { Page page = new Page(this); using (var lexer = new Lexer(this, reader)) { page.VisitingToken = VisitTokens; page.GenerateBlocks(lexer); page.VisitingToken = null; } return(page); } } catch (Exception ex) { Logger.Debug <MonkeyspeakEngine>(ex); throw; } }
/// <summary> /// Initializes a new instance of the <see cref="Lexer"/> class. /// </summary> /// <param name="engine">The engine.</param> /// <param name="reader">The reader.</param> public Lexer(MonkeyspeakEngine engine, SStreamReader reader) : base(engine, reader) { varDeclSym = engine.Options.VariableDeclarationSymbol; stringBeginSym = engine.Options.StringBeginSymbol; stringEndSym = engine.Options.StringEndSymbol; lineCommentSym = engine.Options.LineCommentSymbol; }
/// <summary> /// Loads a Monkeyspeak script from a Stream into <paramref name="existingPage"/>. /// </summary> /// <param name="existingPage">Reference to an existing Page</param> /// <param name="stream">Stream that contains the Monkeyspeak script. Closes the stream.</param> public void LoadFromStream(Page existingPage, Stream stream) { try { using (var reader = new SStreamReader(stream, true)) { using (var lexer = new Lexer(this, reader)) { existingPage.VisitingToken = VisitTokens; existingPage.GenerateBlocks(lexer); existingPage.VisitingToken = null; } } } catch (Exception ex) { Logger.Debug <MonkeyspeakEngine>(ex); } }
/// <summary> /// Loads a Monkeyspeak script from a string into <paramref name="existingPage"/>. and /// clears the old page /// </summary> /// <param name="existingPage">Reference to an existing Page</param> /// <param name="chunk">String that contains the Monkeyspeak script source.</param> /// <returns></returns> public void LoadFromString(Page existingPage, string chunk) { try { var stream = new MemoryStream(Encoding.UTF8.GetBytes(chunk)); using (var reader = new SStreamReader(stream, Encoding.UTF8)) { using (var lexer = new Lexer(this, reader)) { existingPage.VisitingToken = VisitTokens; existingPage.GenerateBlocks(lexer); existingPage.VisitingToken = null; } } } catch (Exception ex) { Logger.Debug <MonkeyspeakEngine>(ex); } }
/// <summary> /// Loads a Monkeyspeak script from a Stream into a <see cref="Monkeyspeak.Page"/>. /// </summary> /// <param name="stream">Stream that contains the Monkeyspeak script. Closes the stream.</param> /// <returns><see cref="Monkeyspeak.Page"/></returns> public Page LoadFromStream(Stream stream) { try { using (var reader = new SStreamReader(stream, true)) { Page page = new Page(this); using (var lexer = new Lexer(this, reader)) { page.VisitingToken = VisitTokens; page.GenerateBlocks(lexer); page.VisitingToken = null; } return(page); } } catch (Exception ex) { Logger.Debug <MonkeyspeakEngine>(ex); } return(new Page(this)); // return a empty page so that the top level caller is not destroyed by nullreference exceptions :) }
protected AbstractLexer(MonkeyspeakEngine engine, SStreamReader reader) { this.reader = reader; Engine = engine; }