public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _classid, _classname; exp = tag.AttributeValue("classid"); if (exp == null) throw new Exception("没有classid标签"); _classid = manager.EvalExpression(exp).ToString(); // _classname = (new JumboTCMS.DAL.Normal_ClassDAL().GetClassName(_classid)); manager.WriteValue(""); }
public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _channelid, _channelishtml, _classid, _classlink; exp = tag.AttributeValue("channelid"); if (exp == null) throw new Exception("没有channelid标签"); _channelid = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("channelishtml"); if (exp == null) _channelishtml = "0"; _channelishtml = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("classid"); if (exp == null) throw new Exception("没有classid标签"); _classid = manager.EvalExpression(exp).ToString(); // _classlink = (new Normal_ClassDAL()).GetClassLink(1, _channelishtml == "1", _channelid, _classid, false); manager.WriteValue(""); }
protected void ProcessTemplate(string name, Tag tag) { if (customTags != null && customTags.ContainsKey(name)) { ExecuteCustomTag(tag); return; } Template useTemplate = currentTemplate.FindTemplate(name); if (useTemplate == null) { string msg = string.Format("Template '{0}' not found", name); throw new TemplateRuntimeException(msg, tag.Line, tag.Col); } // process inner elements and save content TextWriter saveWriter = writer; writer = new StringWriter(); string content = string.Empty; try { ProcessElements(tag.InnerElements); content = writer.ToString(); } finally { writer = saveWriter; } Template saveTemplate = currentTemplate; variables = new VariableScope(variables); variables["innerText"] = content; try { foreach (TagAttribute attrib in tag.Attributes) { object val = EvalExpression(attrib.Expression); variables[attrib.Name] = val; } currentTemplate = useTemplate; ProcessElements(currentTemplate.Elements); } finally { variables = variables.Parent; currentTemplate = saveTemplate; } }
protected void ProcessTagSet(Tag tag) { Expression expName = tag.AttributeValue("name"); if (expName == null) { throw new TemplateRuntimeException("Set is missing required attribute: name", tag.Line, tag.Col); } Expression expValue = tag.AttributeValue("value"); if (expValue == null) { throw new TemplateRuntimeException("Set is missing required attribute: value", tag.Line, tag.Col); } string name = EvalExpression(expName).ToString(); if (!Util.IsValidVariableName(name)) throw new TemplateRuntimeException("'" + name + "' is not valid variable name.", expName.Line, expName.Col); object value = EvalExpression(expValue); this.SetValue(name, value); }
protected void ProcessTag(Tag tag) { string name = tag.Name.ToLowerInvariant(); try { switch (name) { case "template": // skip those, because those are processed first break; case "else": ProcessElements(tag.InnerElements); break; case "apply": object val = EvalExpression(tag.AttributeValue("template")); ProcessTemplate(val.ToString(), tag); break; case "foreach": ProcessForEach(tag); break; case "for": ProcessFor(tag); break; case "set": ProcessTagSet(tag); break; default: ProcessTemplate(tag.Name, tag); break; } } catch (TemplateRuntimeException ex) { DisplayError(ex); } catch (Exception ex) { DisplayError("Error executing tag '" + name + "': " + ex.Message, tag.Line, tag.Col); } }
protected void ProcessForEach(Tag tag) { Expression expCollection = tag.AttributeValue("collection"); if (expCollection == null) { throw new TemplateRuntimeException("Foreach is missing required attribute: collection", tag.Line, tag.Col); } object collection = EvalExpression(expCollection); if (!(collection is IEnumerable)) { throw new TemplateRuntimeException("Collection used in foreach has to be enumerable", tag.Line, tag.Col); } Expression expVar = tag.AttributeValue("var"); if (expCollection == null) { throw new TemplateRuntimeException("Foreach is missing required attribute: var", tag.Line, tag.Col); } object varObject = EvalExpression(expVar); if (varObject == null) varObject = "foreach"; string varname = varObject.ToString(); Expression expIndex = tag.AttributeValue("index"); string indexname = null; if (expIndex != null) { object obj = EvalExpression(expIndex); if (obj != null) indexname = obj.ToString(); } IEnumerator ienum = ((IEnumerable)collection).GetEnumerator(); int index = 0; while (ienum.MoveNext()) { index++; object value = ienum.Current; variables[varname] = value; if (indexname != null) variables[indexname] = index; ProcessElements(tag.InnerElements); } }
protected void ProcessFor(Tag tag) { Expression expFrom = tag.AttributeValue("from"); if (expFrom == null) { throw new TemplateRuntimeException("For is missing required attribute: start", tag.Line, tag.Col); } Expression expTo = tag.AttributeValue("to"); if (expTo == null) { throw new TemplateRuntimeException("For is missing required attribute: to", tag.Line, tag.Col); } Expression expIndex = tag.AttributeValue("index"); if (expIndex == null) { throw new TemplateRuntimeException("For is missing required attribute: index", tag.Line, tag.Col); } object obj = EvalExpression(expIndex); string indexName = obj.ToString(); int start = Convert.ToInt32(EvalExpression(expFrom)); int end = Convert.ToInt32(EvalExpression(expTo)); for (int index = start; index <= end; index++) { SetValue(indexName, index); //variables[indexName] = index; ProcessElements(tag.InnerElements); } }
protected void ExecuteCustomTag(Tag tag) { ITagHandler tagHandler = customTags[tag.Name]; bool processInnerElements = true; bool captureInnerContent = false; tagHandler.TagBeginProcess(this, tag, ref processInnerElements, ref captureInnerContent); string innerContent = null; if (processInnerElements) { TextWriter saveWriter = writer; if (captureInnerContent) writer = new StringWriter(); try { ProcessElements(tag.InnerElements); innerContent = writer.ToString(); } finally { writer = saveWriter; } } tagHandler.TagEndProcess(this, tag, innerContent); }
private Tag CollectForTag(Tag tag, ref int index) { if (tag.IsClosed) // if self-closing tag, do not collect inner elements { return tag; } if (string.Compare(tag.Name, "if", true) == 0) { tag = new TagIf(tag.Line, tag.Col, tag.AttributeValue("test")); } Tag collectTag = tag; for (index++; index < elements.Count; index++) { Element elem = elements[index]; if (elem is Text) collectTag.InnerElements.Add(elem); else if (elem is Expression) collectTag.InnerElements.Add(elem); else if (elem is Tag) { Tag innerTag = (Tag)elem; if (string.Compare(innerTag.Name, "else", true) == 0) { if (collectTag is TagIf) { ((TagIf)collectTag).FalseBranch = innerTag; collectTag = innerTag; } else throw new ParseException("else tag has to be positioned inside of if or elseif tag", innerTag.Line, innerTag.Col); } else if (string.Compare(innerTag.Name, "elseif", true) == 0) { if (collectTag is TagIf) { Tag newTag = new TagIf(innerTag.Line, innerTag.Col, innerTag.AttributeValue("test")); ((TagIf)collectTag).FalseBranch = newTag; collectTag = newTag; } else throw new ParseException("elseif tag is not positioned properly", innerTag.Line, innerTag.Col); } else collectTag.InnerElements.Add(CollectForTag(innerTag, ref index)); } else if (elem is TagClose) { TagClose tagClose = (TagClose)elem; if (string.Compare(tag.Name, tagClose.Name, true) == 0) return tag; throw new ParseException("Close tag for " + tagClose.Name + " doesn't have matching start tag.", elem.Line, elem.Col); } else throw new ParseException("Invalid element: " + elem.GetType().ToString(), elem.Line, elem.Col); } throw new ParseException("Start tag: " + tag.Name + " does not have matching end tag.", tag.Line, tag.Col); }
public void TagBeginProcess(TemplateManager manager, Tag tag, ref bool processInnerElements, ref bool captureInnerContent) { processInnerElements = true; captureInnerContent = true; }
public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _sitedir, _channelid, _channeltype, _contentid, _viewnum; exp = tag.AttributeValue("sitedir"); if (exp == null) throw new Exception("没有sitedir标签"); _sitedir = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("channelid"); if (exp == null) throw new Exception("没有channelid标签"); _channelid = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("channeltype"); if (exp == null) throw new Exception("没有channeltype标签"); _channeltype = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("contentid"); if (exp == null) throw new Exception("没有contentid标签"); _contentid = manager.EvalExpression(exp).ToString(); _viewnum = "<script src=\"" + _sitedir + "plus/viewcount.aspx?ccid=" + _channelid + "&cType=" + _channeltype + "&id=" + _contentid + "&addit=0\"></script>"; manager.WriteValue(_viewnum); }
public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _sitedir, _isimg, _img, _imgurl; exp = tag.AttributeValue("sitedir"); if (exp == null) throw new Exception("没有sitedir标签"); _sitedir = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("isimg"); if (exp == null) _isimg = "0"; else _isimg = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("img"); if (exp == null) _img = ""; else _img = manager.EvalExpression(exp).ToString(); if (_isimg == "0" && _img.Length == 0) _imgurl = _sitedir + "no.png"; else _imgurl = _img; manager.WriteValue(_imgurl); }
public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _title, _formattitle; exp = tag.AttributeValue("title"); if (exp == null) throw new Exception("没有title标签"); _title = manager.EvalExpression(exp).ToString(); _formattitle = WeiXin.Core.Strings.HtmlEncode(_title); manager.WriteValue(_formattitle); }
public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _len, _cutstring; exp = tag.AttributeValue("len"); if (exp == null) throw new Exception("没有len标签"); _len = manager.EvalExpression(exp).ToString(); //_cutstring = JumboTCMS.Utils.Strings.CutString(JumboTCMS.Utils.Strings.NoHTML(innerContent), Convert.ToInt32(_len)); // manager.WriteValue(_cutstring); }
public void TagEndProcess(TemplateManager manager, Tag tag, string innerContent) { Expression exp; string _channelid, _contentid, _contenturl, _contentlink; exp = tag.AttributeValue("channelid"); if (exp == null) throw new Exception("没有channelid标签"); _channelid = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("contentid"); if (exp == null) throw new Exception("没有contentid标签"); _contentid = manager.EvalExpression(exp).ToString(); exp = tag.AttributeValue("contenturl"); if (exp == null) throw new Exception("没有contenturl标签"); _contenturl = manager.EvalExpression(exp).ToString(); //查询频道信息,获取频道模型, normal_channelService channelBll = new normal_channelService(); DataSet ds = channelBll.GetChannelBySql("select eid,Type from [normal_channel] where id=" + _channelid); string eid = ds.Tables[0].Rows[0]["eid"].ToString(); string Type = ds.Tables[0].Rows[0]["Type"].ToString(); _contentlink = "/Enterprise/Web/" + Type + "/" + _contentid + "?sessionid=" + WeiXin.Core.SecurityEncryption.DESEncrypt(eid); manager.WriteValue(_contentlink); }
Tag ReadTag() { Consume(TokenKind.TagStart); Token name = Consume(TokenKind.ID); Tag tag = new Tag(name.Line, name.Col, name.Data); while (true) { if (Current.TokenKind == TokenKind.ID) tag.Attributes.Add(ReadAttribute()); else if (Current.TokenKind == TokenKind.TagEnd) { Consume(); break; } else if (Current.TokenKind == TokenKind.TagEndClose) { Consume(); tag.IsClosed = true; break; } else throw new ParseException("Invalid token in tag: " + Current.TokenKind, Current.Line, Current.Col); } return tag; }