private void TranslateTempFileContent(TranslationData data, TempFileFull fileData) { int tokenStart = data.CurrentToken; TranslationDataIterator iterator = data.GetIterator(); Token token; TempClass contentData = null; while (iterator.Next(out token)) { if (token.Term.Type != TermType.IdentifierKey && token.Term.Type != TermType.Key) { continue; } JavaTermKey key = this.GetTermKey(token); switch (key) { case JavaTermKey.Class: case JavaTermKey.Interface: case JavaTermKey.Enum: { contentData = new TempClass(); break; } case JavaTermKey.BraceRight: { return; } } if (contentData != null) { break; } } if (contentData != null) { data.CurrentToken = tokenStart; data.TranslationStack.Push(contentData); fileData.AddClass(contentData); return; } throw new InvalidDataException("Unexpected token list: "); }
private void TranslateTempFile(TranslationData data, TempFileFull fileData) { TranslationDataIterator iterator = data.GetIterator(); Token token; while (iterator.Next(out token)) { switch (token.Term.Type) { case TermType.IdentifierKey: { JavaTermKey key = this.GetTermKey(token); switch (key) { case JavaTermKey.Package: { this.TranslateTempFilePackage(data, fileData); continue; } case JavaTermKey.Import: { this.TranslateTempFileImport(data, fileData); continue; } default: { // Rewind to current token and read the possible section data.CurrentToken--; this.TranslateTempFileContent(data, fileData); return; } } } } throw new InvalidDataException("Unexpected token: " + token); } }
private void TranslateTempFilePackage(TranslationData data, TempFileFull fileData) { if (!string.IsNullOrEmpty(fileData.Namespace)) { throw new InvalidDataException("Possibly duplicate namespace!"); } var builder = new StringBuilder(); TranslationDataIterator iterator = data.GetIterator(); Token token; while (iterator.Next(out token)) { if (token.Term.Type == TermType.Key) { JavaTermKey key = this.GetTermKey(token); if (key == JavaTermKey.Semicolon) { fileData.Namespace = builder.ToString(); return; } } builder.Append(token.Contents); } }
private void TranslateTempFileImport(TranslationData data, TempFileFull fileData) { var builder = new StringBuilder(); TranslationDataIterator iterator = data.GetIterator(); Token token; while (iterator.Next(out token)) { if (token.Term.Type == TermType.Key) { JavaTermKey key = this.GetTermKey(token); if (key == JavaTermKey.Semicolon) { fileData.AddInclude(builder.ToString()); return; } } builder.Append(token.Contents); } }
private TempFileFull TranslateToTempFile(TranslationData data) { data.CurrentToken = 0; // Create the root data element var file = new TempFileFull { Name = data.TargetFile.FileName, StructureType = TempFileStructureType.Java }; data.TranslationStack.Push(file); while (data.CurrentToken < data.Tokens.Count) { TempData currentData = data.TranslationStack.Peek(); switch (currentData.Type) { case TempDataType.File: { this.TranslateTempFile(data, (TempFileFull)currentData); break; } case TempDataType.Class: { this.TranslateTempClass(data, (TempClass)currentData); break; } case TempDataType.Function: { this.TranslateTempFunction(data, (TempFunction)currentData); break; } case TempDataType.Member: { this.TranslateTempMember(data); break; } default: { throw new NotImplementedException("Unknown translation data type: " + currentData.Type); } } } return file; }
private void SaveTempFile(TranslationData data, TempFileFull file) { if (this.config.Current.CompressIntermediate) { JsonExtensions.SaveToFile(data.TargetFile, file); } else { JsonExtensions.SaveToFile(data.TargetFile, file, false, Formatting.Indented); } }