public void FromTreeText_行頭がピリオド() { string lineFeed = Environment.NewLine; var text = lineFeed + lineFeed + ". .ノード1のタイトル" + lineFeed + " .ノード1の本文" + lineFeed + "ノード1の本文" + lineFeed + " .ノード1の本文" + lineFeed + ".. .ノード1-1のタイトル" + lineFeed + " .ノード1-1の本文" + lineFeed + ". ..ノード2のタイトル" + lineFeed + " ..ノード2の本文"; QuartetEditorDescription result; NodeConverterUtility.FromTreeText(text, '.', out result); Assert.AreEqual(2, result.Node.Count); Assert.AreEqual(".ノード1のタイトル", result.Node[0].Name); Assert.AreEqual( ".ノード1の本文" + lineFeed + "ノード1の本文" + lineFeed + ".ノード1の本文", result.Node[0].Content); Assert.AreEqual(1, result.Node[0].Children.Count); Assert.AreEqual(".ノード1-1のタイトル", result.Node[0].Children[0].Name); Assert.AreEqual(".ノード1-1の本文", result.Node[0].Children[0].Content); Assert.AreEqual(0, result.Node[0].Children[0].Children.Count); Assert.AreEqual("..ノード2のタイトル", result.Node[1].Name); Assert.AreEqual("..ノード2の本文", result.Node[1].Content); Assert.AreEqual(0, result.Node[1].Children.Count); }
/// <summary> /// エクスポート /// </summary> public void Export(ExportSettingModel model) { bool fail = false; string ext = ""; string filter = ""; string exportstr = ""; try { switch (model.Kind) { case ExportKind.Text: exportstr = NodeConverterUtility.ToText(new QuartetEditorDescription(this.Content.Tree), model); ext = "txt"; filter = "テキストファイル(*.txt)|*.txt|全てのファイル(*.*)|*.*"; break; case ExportKind.HTML: exportstr = NodeConverterUtility.ToHTML(new QuartetEditorDescription(this.Content.Tree), Path.GetFileNameWithoutExtension(this.FilePath)); ext = "html"; filter = "HTMLファイル(*.html)|*.html|全てのファイル(*.*)|*.*"; break; case ExportKind.TreeText: var header = ConfigManager.Current.Config.TreeTextCharacters; exportstr = NodeConverterUtility.ToTreeText(new QuartetEditorDescription(this.Content.Tree), header.First()); ext = "txt"; filter = "テキストファイル(*.txt)|*.txt|全てのファイル(*.*)|*.*"; break; default: throw new NotImplementedException(); } // 保存する this._ExportSavePathRequest.OnNext(new Tuple <string, string, Action <string> >(filter, ext, (path) => { if (!string.IsNullOrWhiteSpace(path)) { fail = !FileUtility.SaveText(path, exportstr, Encoding.UTF8); } return; })); } catch (Exception) { fail = true; } if (fail) { this._ShowErrorMessageRequest.OnNext("エクスポートに失敗しました…"); } }
public void FromTreeText_タイトルだけで終わり改行がない() { string lineFeed = Environment.NewLine; var text = ".ノード1のタイトル"; QuartetEditorDescription result; NodeConverterUtility.FromTreeText(text, '.', out result); Assert.AreEqual(1, result.Node.Count); Assert.AreEqual("ノード1のタイトル", result.Node[0].Name); Assert.AreEqual("", result.Node[0].Content); Assert.AreEqual(0, result.Node[0].Children.Count); }
/// <summary> /// ファイルの読み込みを行います /// </summary> /// <param name="path"></param> public void Load(string path) { if (File.Exists(path)) { if (this.IsEdited) { this.OpenNewProcess(path); return; } FileType?fileType = null; try { QuartetEditorDescription model; if (FileUtility.LoadJsonObject(path, out model) == true) { // QEDファイルとして読み込み成功 fileType = FileType.QEDocument; } if (!fileType.HasValue) { string treeText; var header = ConfigManager.Current.Config.TreeTextCharacters; if (FileUtility.LoadTextByAnyEncoding(path, out treeText) == true && NodeConverterUtility.FromTreeText(treeText, header.First(), out model) == true) { // 階層付きテキストファイルとして読み込み成功 fileType = FileType.TreeText; } } if (fileType.HasValue) { // 失敗していない場合、QuartetEditorDescriptionをNodeとして設定 this.Content.Load(model); this.IsEdited = false; this.FilePath = path; this.Type = fileType.Value; } } catch { } if (!fileType.HasValue) { this._ShowErrorMessageRequest.OnNext("ファイルの読み込みに失敗しました。"); } } }
/// <summary> /// ファイルを保存する /// </summary> private bool Save(string path, FileType type) { try { bool overwrite = File.Exists(path); bool result = false; string overwiteSuffix = Path.GetRandomFileName().Substring(0, 5); if (overwrite) { File.Move(path, path + "." + overwiteSuffix); } switch (type) { case FileType.QEDocument: { var data = new QuartetEditorDescription(this.Content.Tree); result = FileUtility.SaveJsonObject(path, data); } break; case FileType.TreeText: { var header = ConfigManager.Current.Config.TreeTextCharacters; var data = NodeConverterUtility.ToTreeText(new QuartetEditorDescription(this.Content.Tree), header.First()); result = FileUtility.SaveText(path, data, Encoding.UTF8); } break; default: throw new NotImplementedException(); } if (result && overwrite) { File.Delete(path + "." + overwiteSuffix); } return(result); } catch { } return(false); }
public void FromTreeText_改行コードがLF() { string lineFeed = "\n"; var text = lineFeed + lineFeed + ".ノード1のタイトル" + lineFeed + "ノード1の本文" + lineFeed + "ノード1の本文" + lineFeed + lineFeed + ".ノード2のタイトル" + lineFeed + "ノード2の本文" + lineFeed + "ノード2の本文"; QuartetEditorDescription result; NodeConverterUtility.FromTreeText(text, '.', out result); Assert.AreEqual(2, result.Node.Count); Assert.AreEqual("ノード1のタイトル", result.Node[0].Name); Assert.AreEqual("ノード1の本文" + Environment.NewLine + "ノード1の本文" + Environment.NewLine, result.Node[0].Content); Assert.AreEqual(0, result.Node[0].Children.Count); Assert.AreEqual("ノード2のタイトル", result.Node[1].Name); Assert.AreEqual("ノード2の本文" + Environment.NewLine + "ノード2の本文", result.Node[1].Content); Assert.AreEqual(0, result.Node[1].Children.Count); }