public Font ParseFont(Stream stream, Font font = null) { var path = Serialization.GetCurrentSerializationPath(); this.textureSize = GetTextureSize(path); using (var reader = new StreamReader(stream)) { string text = reader.ReadToEnd(); lexer = new HotLexer("", text, true); } var type = lexer.ParseQuotedString(); if (type != "Hot::Font") { throw new Exception("Unknown type of object '{0}'", type); } if (font == null) { font = new Font(); } AddFontTextures(font, path); lexer.ParseToken('{'); while (lexer.PeekChar() != '}') { ParseFontProperty(font, lexer.ParseWord()); } lexer.ParseToken('}'); return(font); }
public Font ParseFont(string srcPath, string dstPath) { this.textureSize = GetTextureSize(srcPath); this.lexer = CreateLexer(srcPath); var type = lexer.ParseQuotedString(); if (type != "Hot::Font") { throw new Exception("Unknown type of object '{0}'", type); } var font = new Font(); AddFontTextures(font, srcPath, dstPath); lexer.ParseToken('{'); while (lexer.PeekChar() != '}') { ParseFontProperty(font, lexer.ParseWord()); } lexer.ParseToken('}'); return(font); }
public Node Import(Stream stream, Node node, INodeThumbnailProvider thumbnailProvider) { using (TextReader reader = new StreamReader(stream)) { string text = reader.ReadToEnd(); lexer = new HotLexer(sourcePath, text, isTangerine); var savedDefaultWidgetSize = Widget.DefaultWidgetSize; try { Widget.DefaultWidgetSize = new Vector2(100, 100); node = ParseNode(node); } finally { Widget.DefaultWidgetSize = savedDefaultWidgetSize; } lexer.ReadLine(); thumbnailProvider?.SetThumbnail(node, ReadThumbnail(lexer)); if (isTangerine) { ConvertFolderBeginEndToDescriptors(node); ReplaceAnimationEngine(node); } return(node); } }
string ReadThumbnail(HotLexer lexer) { var l = lexer.ReadLine(); if (l != ThumbnailMarker) { return(null); } var sb = new System.Text.StringBuilder(); var firstLine = true; while ((l = lexer.ReadLine()) != null) { if (!firstLine) { sb.Append('\r'); sb.Append('\n'); } firstLine = false; sb.Append(l); } return(sb.ToString()); }