public TagTree(int tagValue) { this.id = Guid.NewGuid().ToString(); this.tagValue = tagValue; this.keyValueStore = new AttributeKVs(); this.hiddenDefault = false; this.treeType = TreeType.Content_CRLF; }
public TagTree() { this.id = Guid.NewGuid().ToString(); this.tagValue = (int)HTMLTag._ROOT; this.keyValueStore = new AttributeKVs(); this.hiddenDefault = false; this.treeType = TreeType.Container; }
public TagTree(string textContent, int baseTagValue) {// as text_content. this.id = Guid.NewGuid().ToString(); this.tagValue = baseTagValue; this.keyValueStore = new AttributeKVs(); keyValueStore[HTMLAttribute._CONTENT] = textContent; this.hiddenDefault = false; this.treeType = TreeType.Content_Text; }
public TagTree(string baseId, string textContent, int baseTagValue) {// as inserted text_content. this.id = baseId + "."; this.tagValue = baseTagValue; this.keyValueStore = new AttributeKVs(); keyValueStore[HTMLAttribute._CONTENT] = textContent; this.hiddenDefault = false; this.treeType = TreeType.Content_Text; }
public TagTree(int parsedTag, AttributeKVs kv, TreeType treeType) { this.id = Guid.NewGuid().ToString(); this.tagValue = parsedTag; this.keyValueStore = kv; this.treeType = treeType; if (kv.ContainsKey(HTMLAttribute.HIDDEN) && kv[HTMLAttribute.HIDDEN] as string == "true") { hidden = true; this.hiddenDefault = hidden; } else { this.hiddenDefault = false; } }
private AttributeKVs GetAttr(int tagIndex, string originalAttrSource) { // [src='https://github.com/sassembla/Autoya/blob/master/doc/scr.png?raw=true2' width='100' height='200' /] var source = originalAttrSource.TrimEnd('/'); // Debug.LogError("source:" + source); var kvDict = new AttributeKVs(); // k1="v1" k2='v2' // k1="v1%" k2='v2%' var index = 0; while (true) { if (source.Length <= index) { break; } var eqIndex = source.IndexOf('=', index); if (eqIndex == -1) { // no "=" found. break; } // = is found. var keyStr = source.Substring(index, eqIndex - index); HTMLAttribute keyEnum = HTMLAttribute._UNKNOWN; try { keyEnum = (HTMLAttribute)Enum.Parse(typeof(HTMLAttribute), keyStr, true); } catch (Exception e) { parseFailed((int)ParseErrors.UNSUPPORTED_ATTR_FOUND, "at tag:" + resLoader.GetTagFromValue(tagIndex) + ", found attribute:" + keyStr + " is not supported yet, e:" + e); return(null); } var valStartIndex = eqIndex + 1; var delim = source[valStartIndex]; var valEndIndex = source.IndexOf(delim, valStartIndex + 1); if (valEndIndex == -1) { // no delim end found. parseFailed((int)ParseErrors.UNEXPECTED_ATTR_DESCRIPTION, "attribute at tag:" + resLoader.GetTagFromValue(tagIndex) + " contains illigal description. source:" + originalAttrSource); return(null); } var val = source.Substring(valStartIndex + 1, valEndIndex - (valStartIndex + 1)); // align check. if (keyEnum == HTMLAttribute.ALIGN) { try { Enum.Parse(typeof(AlignMode), val, true); } catch { parseFailed((int)ParseErrors.UNEXPECTED_ATTR_DESCRIPTION, "attribute align at tag:" + resLoader.GetTagFromValue(tagIndex) + " contains illigal align description. legals are:'center','left','right'. source:" + originalAttrSource); return(null); } } kvDict[keyEnum] = val; var spaceIndex = source.IndexOf(" ", valEndIndex); if (spaceIndex == -1) { break; } index = spaceIndex + 1; } // foreach (var dict in kvDict) { // Debug.LogError("kv:" + dict.Key + " val:" + dict.Value); // } return(kvDict); }
private void ExpandCustomTagToLayer(TagTree layerBaseTree) { var adoptedConstaints = resLoader.GetConstraints(layerBaseTree.tagValue); var children = layerBaseTree.GetChildren(); /* * これで、 * layer/child * -> * layer/box/child x N * になる。boxの数だけ増える。 */ foreach (var box in adoptedConstaints) { var boxName = box.boxName; var boxingChildren = children.Where(c => resLoader.GetLayerBoxName(layerBaseTree.tagValue, c.tagValue) == boxName).ToArray(); foreach (var boxingChild in boxingChildren) { var boxingChildChildren = boxingChild.GetChildren(); foreach (var boxingChildChild in boxingChildChildren) { if (!resLoader.IsDefaultTag(boxingChildChild.tagValue)) { switch (boxingChildChild.treeType) { case TreeType.Content_CRLF: case TreeType.Content_Text: { parseFailed((int)ParseErrors.CANNOT_CONTAIN_TEXT_IN_BOX_DIRECTLY, "tag:" + resLoader.GetTagFromValue(boxingChildChild.tagValue) + " could not contain text value directly. please wrap text content with some tag."); return; } } } } } if (boxingChildren.Any()) { var boxTag = resLoader.FindOrCreateTag(boxName); // 新規に中間box treeを作成する。 var newBoxTreeAttr = new AttributeKVs() { { HTMLAttribute._BOX, box.rect }, { HTMLAttribute._COLLISION, box.collisionGroupId } }; var boxTree = new TagTree(boxTag, newBoxTreeAttr, TreeType.CustomBox); // すでに入っているchildrenを取り除いて、boxを投入 layerBaseTree.ReplaceChildrenToBox(boxingChildren, boxTree); // boxTreeにchildを追加 boxTree.AddChildren(boxingChildren); // boxingChildがlayerな場合、parentがboxであるというマークをつける。 foreach (var child in boxingChildren) { switch (child.treeType) { case TreeType.CustomLayer: { child.keyValueStore[HTMLAttribute._LAYER_PARENT_TYPE] = "box"; break; } case TreeType.CustomBox: { child.keyValueStore[HTMLAttribute._LAYER_PARENT_TYPE] = "box"; break; } } } } } var errorTrees = layerBaseTree.GetChildren().Where(c => c.treeType != TreeType.CustomBox); if (errorTrees.Any()) { parseFailed((int)ParseErrors.NOT_RESERVED_TAG_IN_LAYER, "unexpected tag:" + string.Join(", ", errorTrees.Select(t => resLoader.GetTagFromValue(t.tagValue)).ToArray()) + " found at customLayer:" + resLoader.GetTagFromValue(layerBaseTree.tagValue) + ". please exclude not defined tags in this layer, or define it on this layer."); } }