コード例 #1
0
        public TemplateElement GetElement(TemplateFragment fragment)
        {
            if (fragment == null)
            {
                throw new ArgumentNullException("fragment");
            }

            TemplateFragmentPlainText text = fragment as TemplateFragmentPlainText;

            if (text != null)
            {
                return(new TemplateElementText(text.Data));
            }

            TemplateElement       ret   = null;
            TemplateFragmentMacro macro = fragment as TemplateFragmentMacro;

            if (macro != null)
            {
                ret = ProcessMacro(macro);
            }

            if (ret == null)
            {
                throw new InvalidOperationException(
                          String.Format("Failed to generate a template element from fragment {0} at {1}:{2},{3}",
                                        fragment, fragment.InFile, fragment.LineStart, fragment.ColumnStart)
                          );
            }

            return(ret);
        }
コード例 #2
0
        void OnFragmentParsed(TemplateFragment fragment)
        {
            EventHandler <FragmentParsedEventArguments> eh = FragmentParsed;

            if (eh != null)
            {
                eh(this, new FragmentParsedEventArguments(fragment));
            }
        }
コード例 #3
0
            public T CastFragment <T> () where T : TemplateFragment
            {
                TemplateFragment fragment = Fragment;
                Type             t        = fragment.GetType();

                if (t != typeof(T))
                {
                    throw new InvalidOperationException(String.Format("Expected fragment of type '{0}', found type '{1}' at {2}:{3},{4}",
                                                                      typeof(T).FullName, t.FullName, fragment.LineStart, fragment.ColumnStart));
                }

                return(Fragment as T);
            }
コード例 #4
0
        public override void Append(char ch)
        {
            List <TemplateFragment> fragments = Fragments;
            int count = fragments.Count;
            TemplateFragment fragment = null;

            if (count != 0)
            {
                fragment = fragments [count - 1];
            }

            if (!(fragment is TemplateFragmentPlainText))
            {
                fragment = new TemplateFragmentPlainText(InFile);
                fragments.Add(fragment);
            }
            fragment.Append(ch);
        }
コード例 #5
0
        CurrentState ZapState(bool triggerOnFragmentParsed)
        {
            CurrentState top = stateStack.Peek();

            if (top.State == ParsingState.Start)
            {
                return(top);
            }

            top = stateStack.Pop();
            TemplateFragment fragment = top.Fragment;

            fragment.LineEnd   = currentLine;
            fragment.ColumnEnd = currentColumn;
            if (triggerOnFragmentParsed)
            {
                OnFragmentParsed(fragment);
            }

            return(top);
        }
コード例 #6
0
 public CurrentState(ParsingState state, TemplateFragment fragment)
     : this(state)
 {
     this.Fragment = fragment;
 }
コード例 #7
0
 public FragmentParsedEventArguments(TemplateFragment fragment)
 {
     this.Fragment = fragment;
 }
コード例 #8
0
		public FragmentParsedEventArguments (TemplateFragment fragment)
		{
			this.Fragment = fragment;
		}