Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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("エクスポートに失敗しました…");
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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("ファイルの読み込みに失敗しました。");
                }
            }
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        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);
        }