public void TestIsModified()
        {
            var o1 = new OutputFormat();
            var o2 = new OutputFormat();
            Assert.IsTrue(!o1.IsModified(o1));
            Assert.IsTrue(!o1.IsModified(o2));
            Assert.IsTrue(!o2.IsModified(o1));

            o2.Name = "a";
            Assert.IsTrue(o1.IsModified(o2));
            Assert.IsTrue(o2.IsModified(o1));
            o2.Name = o1.Name;

            o2.Header = "aa";
            Assert.IsTrue(o1.IsModified(o2));
            Assert.IsTrue(o2.IsModified(o1));
            o2.Header = o1.Header;

            o2.Footer = "bb";
            Assert.IsTrue(o1.IsModified(o2));
            Assert.IsTrue(o2.IsModified(o1));
            o2.Footer = o1.Footer;

            o2.EachItem = "cc";
            Assert.IsTrue(o1.IsModified(o2));
            Assert.IsTrue(o2.IsModified(o1));
            o2.EachItem = o1.EachItem;

            o2.EachItemAlternate = "dd";
            Assert.IsTrue(o1.IsModified(o2));
            Assert.IsTrue(o2.IsModified(o1));
            o2.EachItemAlternate = o1.EachItemAlternate;
        }
        /// <summary>
        /// 指定した出力フォーマットが変更されているか判定する.
        /// 指定された名前のオリジナルの出力フォーマットとの差異を比較する.
        /// 指定された名前が、まだ保持されていない場合は変更ありとみなす.
        /// </summary>
        /// <param name="of">現在の出力フォーマット(名前による区別)</param>
        /// <returns>変更の有無</returns>
        public virtual bool IsModified(OutputFormat of)
        {
            if (of == null) return true;

            string name = of.Name;
            OutputFormatHolder holder;
            if (dict.TryGetValue(name, out holder))
            {
                return of.IsModified(holder.original);
            }
            return true;
        }