Exemple #1
0
        public TagTree(int tagValue)
        {
            this.id            = Guid.NewGuid().ToString();
            this.tagValue      = tagValue;
            this.keyValueStore = new AttributeKVs();

            this.hiddenDefault = false;

            this.treeType = TreeType.Content_CRLF;
        }
Exemple #2
0
        public TagTree()
        {
            this.id            = Guid.NewGuid().ToString();
            this.tagValue      = (int)HTMLTag._ROOT;
            this.keyValueStore = new AttributeKVs();

            this.hiddenDefault = false;

            this.treeType = TreeType.Container;
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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;
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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.");
            }
        }