Example #1
0
 public static XmlWriter <XmlWriterNode <TInput> > Content <TInput>(this XmlWriterNode <TInput> writerNode, Func <TInput, string> func, bool asCData = false)
 {
     return(state => {
         var content = new Content {
             Text = state.GetValue(func), AsCData = asCData
         };
         writerNode.Node.Add(content);
         return new Result <XmlWriterNode <TInput> >(writerNode, state);
     });
 }
Example #2
0
 public static XmlWriter <XmlWriterNode <TInput> > Content <TInput>(this XmlWriterNode <TInput> writerNode, string text, bool asCData = false)
 {
     return(state => {
         var content = new Content {
             Text = text, AsCData = asCData
         };
         writerNode.Node.Add(content);
         return new Result <XmlWriterNode <TInput> >(writerNode, state);
     });
 }
Example #3
0
 public static XmlWriter <XmlWriterNode <TInput> > Apply <TInput>(this XmlWriterNode <TInput> writerNode, XmlWriter <XmlWriterNode <TInput> > innerWriter)
 {
     return(state =>
     {
         var oldNode = state.Current;
         innerWriter(state);
         state.Current = oldNode;
         return Result <TInput> .WriterNodeResultFromState(state);
     });
 }
Example #4
0
 public static XmlWriter <XmlWriterNode <TInput> > If <TInput>(this XmlWriterNode <TInput> writerNode, Func <TInput, bool> predicate)
 {
     return(state =>
     {
         var condition = predicate((TInput)state.CurrentInput);
         if (condition)
         {
             return new Result <XmlWriterNode <TInput> >(new XmlWriterNode <TInput>(state.Current), state);
         }
         return new Result <XmlWriterNode <TInput> >(new XmlWriterNode <TInput>(new Node()), state);
     });
 }
Example #5
0
        public static XmlWriter <XmlWriterNode <TInput> > Apply <TInput>(this XmlWriterNode <TInput> writerNode, XmlWriterAction <TInput> innerWriterAction)
        {
            return(state =>
            {
                var oldInput = state.CurrentInput;
                var oldNode = state.Current;
                IResult <XmlWriterNode <TInput> > InnerWriter(State innerState) => new Result <XmlWriterNode <TInput> >(new XmlWriterNode <TInput>(innerState.Current), innerState);

                var appliedWriter = innerWriterAction(InnerWriter);
                appliedWriter(state);
                state.Current = oldNode;
                state.CurrentInput = oldInput;
                return Result <TInput> .WriterNodeResultFromState(state);
            });
        }
Example #6
0
 public static XmlWriter <XmlWriterNode <TInput> > Many <TInput, TOut>(
     this XmlWriterNode <TInput> writerNode,
     Func <TInput, IEnumerable <TOut> > func,
     XmlWriter <XmlWriterNode <TOut> > innerWriter)
 {
     return
         (state =>
     {
         var oldInput = state.CurrentInput;
         var oldNode = state.Current;
         foreach (var element in (IEnumerable)func((TInput)state.CurrentInput))
         {
             state.Current = writerNode.Node;
             state.CurrentInput = element;
             innerWriter(state);
             state.Current = oldNode;
         }
         state.CurrentInput = oldInput;
         return Result <TInput> .WriterNodeResultFromState(state);
     });
 }
Example #7
0
        public static XmlWriter <XmlWriterNode <TInput> > Many <TInput, TOut>(
            this XmlWriterNode <TInput> writerNode,
            Func <TInput, IEnumerable <TOut> > func,
            XmlWriterAction <TOut> innerWriterAction)
        {
            return
                (state =>
            {
                var oldInput = state.CurrentInput;
                var oldNode = state.Current;
                foreach (var element in (IEnumerable)func((TInput)state.CurrentInput))
                {
                    state.Current = writerNode.Node;
                    state.CurrentInput = element;
                    IResult <XmlWriterNode <TOut> > InnerWriter(State innerState) => new Result <XmlWriterNode <TOut> >(new XmlWriterNode <TOut>(innerState.Current), innerState);

                    var appliedWriter = innerWriterAction(InnerWriter);
                    appliedWriter(state);
                    state.Current = oldNode;
                }
                state.CurrentInput = oldInput;
                return Result <TInput> .WriterNodeResultFromState(state);
            });
        }
Example #8
0
 public static XmlWriter <XmlWriterNode <TInput> > Attribute <TInput>(this XmlWriterNode <TInput> writerNode, string name, string value)
 {
     return(state => Attribute(state, writerNode, name, value));
 }
Example #9
0
 private static IResult <XmlWriterNode <TInput> > Attribute <TInput>(State state, XmlWriterNode <TInput> writerNode, string name, string value)
 {
     writerNode.Node.Attributes.Add(name, value);
     return(new Result <XmlWriterNode <TInput> >(writerNode, state));
 }
Example #10
0
 public static XmlWriter <XmlWriterNode <TInput> > Attribute <TInput>(this XmlWriterNode <TInput> writerNode, string name, Func <TInput, string> func)
 {
     return(state => Attribute(state, writerNode, name, state.GetValue(func)));
 }
Example #11
0
 public static XmlWriter <XmlWriterNode <TInput> > Tag <TInput>(this XmlWriterNode <TInput> writerNode, string tag)
 {
     return(state => AppendTag(state, writerNode, tag));
 }
Example #12
0
        private static IResult <XmlWriterNode <TInput> > AppendTag <TInput>(State state, XmlWriterNode <TInput> writerNode, string tag)
        {
            if (writerNode.Node == null)
            {
                AppendTag(state, tag);
                return(Result <TInput> .WriterNodeResultFromState(state));
            }
            var newnode = new Node {
                Name = tag
            };

            writerNode.Node.Add(newnode);
            state.Current = newnode;
            return(new Result <XmlWriterNode <TInput> >(new XmlWriterNode <TInput>(newnode), state));
        }
Example #13
0
 public static XmlWriter <XmlWriterNode <TInput> > Tag <TInput>(this XmlWriterNode <TInput> writerNode, Func <TInput, string> func)
 {
     return(state => AppendTag(state, writerNode, state.GetValue(func)));
 }