예제 #1
0
        /// <summary>
        /// Get the abstract of the article
        /// </summary>
        /// <returns></returns>
        internal string GetAbstract()
        {
            PropertyTemplate ptm = NonParameterizedTemplate.Spawn(GetPropertyTemplate(pageAbstractProperty), Parent, this.Context) as PropertyTemplate;

            if (ptm == null)
            {
                return(base.GetContextPropertyValue(pageAbstractProperty).ToString());
            }
            else
            {
                return(ptm.FillTemplate());
            }
        }
예제 #2
0
        /// <summary>
        /// Get the page path
        /// </summary>
        internal string GetPath()
        {
            PropertyTemplate ptm = NonParameterizedTemplate.Spawn(GetPropertyTemplate(pagePathTemplate), Parent, this.Context) as PropertyTemplate;

            if (ptm == null)
            {
                return(pagePathTemplate);
            }
            else
            {
                return(ptm.FillTemplate());
            }
        }
예제 #3
0
        public static NonParameterizedTemplate Spawn(NonParameterizedTemplate Clonee, DocTemplate Parent, object Context)
        {

            if (Clonee == null) return null;

            // Use a serialize / deserialize
            MemoryStream ms = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, Clonee);
            ms.Seek(0, SeekOrigin.Begin);
            NonParameterizedTemplate retVal = bf.Deserialize(ms) as NonParameterizedTemplate;
            retVal.Parent = Parent;
            retVal.Context = Context;
            return retVal;
        }
        public static NonParameterizedTemplate Spawn(NonParameterizedTemplate Clonee, DocTemplate Parent, object Context)
        {
            if (Clonee == null)
            {
                return(null);
            }

            // Use a serialize / deserialize
            MemoryStream    ms = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();

            bf.Serialize(ms, Clonee);
            ms.Seek(0, SeekOrigin.Begin);
            NonParameterizedTemplate retVal = bf.Deserialize(ms) as NonParameterizedTemplate;

            retVal.Parent  = Parent;
            retVal.Context = Context;
            return(retVal);
        }
예제 #5
0
        /// <summary>
        /// Generate the TOC
        /// </summary>
        private void PrepareTOC(Article.Article artc)
        {
            // Create a TOC Article
            Article.Article tocArticle = artc;

            FeatureTemplate tocTemplate = NonParameterizedTemplate.Spawn(FindTemplate(tocArticle.GetType().FullName, tocArticle), this, tocArticle) as FeatureTemplate;

            tocArticle.Title = tocArticle.Title ?? tocTemplate.GetTitle();

            // Populate Toc Article
            tocArticle.Content = globalTemplate.FillTemplate(tocTemplate);

            // Create child TOC if they are empty
            if (tocArticle.Children != null)
            {
                for (int i = 0; i < tocArticle.Children.Count; i++)
                {
                    PrepareTOC(tocArticle.Children.Data[i]);
                }
            }
        }
예제 #6
0
        /// <summary>
        /// Fill in template details
        /// </summary>
        public override string FillTemplate()
        {
            // Get the value of this item
            object value = ExecuteMethod(this.Context);

            if (value == null)
            {
                return("");
            }

            FeatureTemplate ftpl = NonParameterizedTemplate.Spawn(Parent.FindTemplate(value.GetType().FullName, value) as NonParameterizedTemplate, Parent, value) as FeatureTemplate;

            // Current template fields
            string[][] templateFields = new string[][]
            {
                new string[] { "$feature$", ftpl == null ? "" : ftpl.FillTemplate() },
                new string[] { "$date$", DateTime.Now.ToString("yyyy-MM-dd") },
                new string[] { "$time$", DateTime.Now.ToString("HH:mm:ss") },
                new string[] { "$user$", SystemInformation.UserName },
                new string[] { "$value$", this.Escaped ? value.ToString().Replace(">", "&gt;").Replace("<", "&lt;").Replace("$", "&#036;").Replace("@", "&#064;").Replace("^", "&#094;") : value.ToString().Replace("$", "&#036;").Replace("@", "&#064;").Replace("^", "&#094;").Replace("\\", "\\\\") }, // Clean Template parameters from TOSTRING()
                new string[] { "$$", "&#036;" },
                new string[] { "@@", "&#064;" },
                new string[] { "^^", "&#094;" },
                new string[] { "$version$", Assembly.GetEntryAssembly().GetName().Version.ToString() },
                new string[] { "$typeName$", Context == null ? "" : Context.GetType().Name }
            };

            // Output
            string output = Content.Clone() as string;

            foreach (string[] kv in templateFields)
            {
                output = output.Replace(kv[0], kv[1]);
            }

            return(output);
        }
예제 #7
0
        public override string FillTemplate()
        {
            //// Current template fields
            string[][] templateFields = new string[][]
            {
                new string[] { "$feature$", "Invalid Operation" },
                new string[] { "01-09-2009", DateTime.Now.ToString("yyyy-MM-dd") },
                new string[] { "$date$", DateTime.Now.ToString("yyyy-MM-dd") },
                new string[] { "$time$", DateTime.Now.ToString("HH:mm:ss") },
                new string[] { "$user$", SystemInformation.UserName },
                new string[] { "$value$", Context.ToString().Replace("<", "&lt;").Replace(">", "&gt;").Replace("$", "&#036;").Replace("@", "&#64;").Replace("^", "&#094;") },
                new string[] { "$$", "&#036;" },
                new string[] { "@@", "&#064;" },
                new string[] { "^^", "&#094;;" },
                new string[] { "$version$", Assembly.GetEntryAssembly().GetName().Version.ToString() },
                new string[] { "$typeName$", Context == null ? "" : Context.GetType().Name },
                new string[] { "$guid$", Guid.NewGuid().ToString() },
                new string[] { "$guid2$", Guid.NewGuid().ToString() }
            };

            if (this.Context is Feature && (this.Context as Feature).Annotations.Exists(o => o is SuppressBrowseAnnotation))
            {
                System.Diagnostics.Trace.WriteLine(String.Format("Feature '{0}' won't be published as a SuppressBrowse annotation was found", (this.Context as Feature).Name), "warn");
                return("");
            }

            string output = Content;

            foreach (string[] kv in templateFields)
            {
                output = output.Replace(kv[0], kv[1]);
            }

            // Process output for literals
            #region Literals
            while (output.Contains("$"))
            {
                int litPos = output.IndexOf('$');
                int ePos   = output.IndexOf('$', litPos + 1);

                System.Diagnostics.Debug.Assert(ePos >= litPos, String.Format("Unfinished template variable in HTML template '{0}'", output));

                string parmName = "";
                if (ePos > litPos)
                {
                    parmName = output.Substring(litPos + 1, ePos - litPos - 1);
                }

                PropertyTemplate pt  = NonParameterizedTemplate.Spawn(GetPropertyTemplate(parmName) as NonParameterizedTemplate, Parent, GetContextPropertyValue(parmName)) as PropertyTemplate;
                var ctxPropertyValue = GetContextPropertyValue(parmName);

                if (pt == null && !string.IsNullOrEmpty(parmName)) // None found ... use value
                {
                    output = output.Replace(string.Format("${0}$", parmName), string.Format("{0}", ctxPropertyValue).Replace("$", "&#36;").Replace("@", "&#64;").Replace("^", "&#094;"));
                }
                else if (pt.Property == null)
                {
                    System.Diagnostics.Trace.WriteLine(String.Format("Invalid property name for parameter '{0}' propertyTemplate name '{1}'", parmName, pt.Name), "error");
                    output = output.Replace(String.Format("${0}$", parmName), "<span style=\"color:red\">Invalid property name</span>");
                }
                else if (!string.IsNullOrEmpty(parmName))// Found, so use
                {
                    pt.Context = GetContextPropertyValue(pt.Property);
                    output     = output.Replace(string.Format("${0}$", parmName), pt.FillTemplate().Replace("$", "&#36;").Replace("@", "&#64;").Replace("^", "&#094;"));
                }
            }
            #endregion

            #region Arrays
            while (output.Contains("@"))
            {
                int    litPos   = output.IndexOf('@');
                int    ePos     = output.IndexOf('@', litPos + 1);
                string parmName = output.Substring(litPos + 1, ePos - litPos - 1);

                object[]         value = null;
                PropertyTemplate pt    = NonParameterizedTemplate.Spawn(GetPropertyTemplate(parmName) as NonParameterizedTemplate, Parent, null) as PropertyTemplate;

                if (parmName == "this")
                {
                    value = ConvertToObjectArray(this.Context);
                }
                else
                {
                    value = ConvertToObjectArray(GetContextPropertyValue(pt != null ? pt.Property : parmName));
                }

                // First, we'll look for a property template that has the specific name
                //value = ConvertToObjectArray(GetContextPropertyValue(pt != null ? pt.Property : parmName));

                if (value != null && pt == null)
                {
                    foreach (object o in value)
                    {
                        output = output.Replace(string.Format("@{0}@", parmName), string.Format("{0}@{1}@", o, parmName));
                    }
                    output = output.Replace(string.Format("@{0}@", parmName), "");
                }
                else if (value != null && pt != null) // Apply template
                {
                    foreach (object o in value)
                    {
                        PropertyTemplate cpt = NonParameterizedTemplate.Spawn(pt, Parent, o) as PropertyTemplate;
                        output = output.Replace(string.Format("@{0}@", parmName), string.Format("{0}@{1}@", cpt.FillTemplate().Replace("$", "&#36;").Replace("@", "&#64;").Replace("^", "&#094;"), parmName));
                    }
                    output = output.Replace(string.Format("@{0}@", parmName), "");
                }
                else
                {
                    output = output.Replace(string.Format("@{0}@", parmName), "");
                }
            }
            #endregion

            #region Functoids
            while (output.Contains("^"))
            {
                int litPos = output.IndexOf('^');
                int ePos   = output.IndexOf('^', litPos + 1);

                System.Diagnostics.Debug.Assert(ePos != -1, String.Format("Template field not closed at '{0}'", this.Name));

                string funcName = output.Substring(litPos + 1, ePos - litPos - 1);

                // First, we'll look for a property template that has the specific name
                var    funcTemplate = NonParameterizedTemplate.Spawn(this.SubTemplates.Find(o => o.Name == funcName && o is FunctoidTemplate), this.Parent, this.Context) as FunctoidTemplate;
                object content      = null;
                if (funcTemplate == null)
                {
                    content = String.Format("<span style=\"color:red\">Could not find function template '{0}'</span>", funcName);
                }
                else
                {
                    content = funcTemplate.FillTemplate();
                }
                if (content is IEnumerable && !(content is String))
                {
                    foreach (object o in content as IEnumerable)
                    {
                        string ovalue = o == null ? "" : o.ToString().Replace("$", "&#36;").Replace("@", "&#64;").Replace("^", "&#094;");
                        output = output.Replace(string.Format("^{0}^", funcName), string.Format("{0}^{1}^", ovalue, funcName));
                    }
                    output = output.Replace(string.Format("^{0}^", funcName), "");
                }
                else
                {
                    output = output.Replace(string.Format("^{0}^", funcName), string.Format("{0}", content.ToString().Replace("$", "&#36;").Replace("@", "&#64;").Replace("^", "&#094;")));
                }
            }
            #endregion

            // Apply XmlElement Templates
            output = ApplyXmlElementTemplates(output);

            return(output);
        }
예제 #8
0
        public override string FillTemplate()
        {
            // First... see if there is a feature that could process this item
            if (Context == null)
            {
                return("");
            }

            FeatureTemplate ftpl = Content.Contains("$feature$") ? NonParameterizedTemplate.Spawn(Parent.FindTemplate(Context.GetType().FullName, Context) as NonParameterizedTemplate, Parent, Context) as FeatureTemplate : null;

            // Current template fields
            string[][] templateFields = new string[][]
            {
                new string[] { "$feature$", ftpl == null ? "" : ftpl.FillTemplate() },
                new string[] { "$date$", DateTime.Now.ToString("yyyy-MM-dd") },
                new string[] { "$time$", DateTime.Now.ToString("HH:mm:ss") },
                new string[] { "$user$", SystemInformation.UserName },
                new string[] { "$guid$", Guid.NewGuid().ToString() },
                new string[] { "$value$", escaped ? Context.ToString().Replace(">", "&gt;").Replace("<", "&lt;").Replace("$", "&#036;").Replace("@", "&#64;").Replace("^", "&#094;") : Context.ToString().Replace("$", "&#036;").Replace("@", "&#64;").Replace("^", "&#094;").Replace("\\", "\\\\") },             // Clean Template parameters from TOSTRING()
                new string[] { "$$", "&#036;" },
                new string[] { "@@", "&#064;" },
                new string[] { "^^", "&#094;" },
                new string[] { "$version$", Assembly.GetEntryAssembly().GetName().Version.ToString() },
                new string[] { "$typeName$", Context == null ? "" : Context.GetType().Name }
            };

            if (this.Context is Feature && (this.Context as Feature).Annotations.Exists(o => o is SuppressBrowseAnnotation))
            {
                System.Diagnostics.Trace.WriteLine(String.Format("Feature '{0}' won't be published as a SuppressBrowse annotation was found", (this.Context as Feature).Name), "warn");
                return("");
            }

            string output = Content.Clone() as string;

            foreach (string[] kv in templateFields)
            {
                output = output.Replace(kv[0], kv[1]);
            }

            // Process output for literals
            #region Literals
            while (output.Contains("$"))
            {
                int litPos = output.IndexOf('$');
                int ePos   = output.IndexOf('$', litPos + 1);

                System.Diagnostics.Debug.Assert(ePos != -1, String.Format("Template field not closed at '{0}'", this.Name));

                string parmName = output.Substring(litPos + 1, ePos - litPos - 1);

                // First, we'll look for a property template that has the specific name
                object content = GetContextPropertyValue(parmName);
                string value   = content == null ? "" : content.ToString().Replace("$", "&#036;").Replace("@", "&#064;").Replace("^", "&#094;");
                output = output.Replace(string.Format("${0}$", parmName), string.Format("{0}", value));
            }
            #endregion

            #region Arrays
            while (output.Contains("@"))
            {
                int    litPos   = output.IndexOf('@');
                int    ePos     = output.IndexOf('@', litPos + 1);
                string parmName = output.Substring(litPos + 1, ePos - litPos - 1);

                // First, we'll look for a property template that has the specific name
                object[] value = ConvertToObjectArray(GetContextPropertyValue(parmName));

                if (value != null)
                {
                    foreach (object o in value)
                    {
                        string ovalue = o == null ? "" : o.ToString().Replace("$", "&#36;").Replace("@", "&#64;").Replace("^", "&#094;");
                        output = output.Replace(string.Format("@{0}@", parmName), string.Format("{0}@{1}@", ovalue, parmName));
                    }
                    output = output.Replace(string.Format("@{0}@", parmName), "");
                }
                else
                {
                    output = output.Replace(string.Format("@{0}@", parmName), "");
                }
            }
            #endregion

            return(output);
        }
예제 #9
0
        public ArticleCollection Process(ClassRepository rep)
        {
            ArticleCollection artc = new ArticleCollection();


            List <Feature> features = new List <Feature>();

            foreach (KeyValuePair <string, Feature> kv in rep)
            {
                features.Add(kv.Value);
            }
            // Sort so classes are processed first
            features.Sort(delegate(Feature a, Feature b)
            {
                if ((a is SubSystem) && !(b is SubSystem))
                {
                    return(-1);
                }
                else if ((b is SubSystem) && !(a is SubSystem))
                {
                    return(1);
                }
                else if ((a is Class) && !(b is Class))
                {
                    return(1);
                }
                else if ((b is Class) && !(a is Class))
                {
                    return(-1);
                }
                else
                {
                    return(a.GetType().Name.CompareTo(b.GetType().Name));
                }
            });

            //var vocabArticle = new MohawkCollege.EHR.gpmr.Pipeline.Renderer.Deki.Article.Article()
            //{
            //    Title = "Vocabulary",
            //    Children = new ArticleCollection()
            //};
            //vocabArticle.Children.Add(new Article.Article() { Title = "Code Systems" });
            //vocabArticle.Children.Add(new Article.Article() { Title = "Concept Domains" });
            //vocabArticle.Children.Add(new Article.Article() { Title = "Value Sets" });

            //artc.Add(vocabArticle);
            WaitThreadPool wtp = new WaitThreadPool();

            // A thread that does the doohickey thing
            Thread doohickeyThread = new Thread((ThreadStart) delegate()
            {
                string[] hickeythings = { "|", "/", "-", "\\" };
                int hickeyThingCount  = 0;
                try
                {
                    while (true)
                    {
                        int cPosX = Console.CursorLeft, cPosY = Console.CursorTop;
                        Console.SetCursorPosition(1, cPosY);
                        Console.Write(hickeythings[hickeyThingCount++ % hickeythings.Length]);
                        Console.SetCursorPosition(cPosX, cPosY);
                        Thread.Sleep(1000);
                    }
                }
                catch { }
            });

            doohickeyThread.Start();

            // Loop through each feature
            foreach (Feature f in features)
            {
                // Find the feature template
                FeatureTemplate ftpl = NonParameterizedTemplate.Spawn(FindTemplate(f.GetType().FullName, f) as NonParameterizedTemplate, this, f) as FeatureTemplate;

                if (ftpl == null)
                {
                    System.Diagnostics.Trace.WriteLine(string.Format("Feature '{0}' won't be published as no feature template could be located", f.Name), "warn");
                }
                else if (f.Annotations.Find(o => o is SuppressBrowseAnnotation) != null)
                {
                    System.Diagnostics.Trace.WriteLine(String.Format("Feature '{0}' won't be published as a SuppressBrowse annotation was found", f.Name), "warn");
                }
                else if (ftpl.NewPage)
                {
                    System.Diagnostics.Trace.WriteLine(string.Format("Queueing ({1}) '{0}'...", f.Name, f.GetType().Name), "debug");

                    // Create a new worker
                    Worker w = new Worker();
                    w.ArticleCollection = artc;
                    w.FeatureTemplate   = ftpl;
                    w.OnComplete       += delegate(object sender, EventArgs e)
                    {
                        Worker wrkr = sender as Worker;
                        System.Diagnostics.Trace.WriteLine(String.Format("Rendered ({1}) '{0}'...", (wrkr.FeatureTemplate.Context as Feature).Name, wrkr.FeatureTemplate.Context.GetType().Name), "debug");
                    };
                    wtp.QueueUserWorkItem(w.Start);
                }
            }

            System.Diagnostics.Trace.WriteLine("Waiting for work items to complete...", "debug");
            wtp.WaitOne();
            doohickeyThread.Abort();

            ArticleCollection retVal = new ArticleCollection();

            Article.Article MasterTOC = new MohawkCollege.EHR.gpmr.Pipeline.Renderer.Deki.Article.Article();
            MasterTOC.Children = artc;
            System.Diagnostics.Trace.WriteLine("Creating Table of Contents...", "information");
            PrepareTOC(MasterTOC);
            MasterTOC.Children = null;
            artc.Add(MasterTOC);


            return(artc);
        }