Exemple #1
0
        public UUebViewCore(IUUebView uuebView, IPluggable plugin = null, ResourceLoader.MyHttpRequestHeaderDelegate requestHeader = null, ResourceLoader.MyHttpResponseHandlingDelegate httpResponseHandlingDelegate = null, Action <List <ParseError> > onParseFailed = null)
        {
            if (plugin == null)
            {
                plugin = new DefaultBehaviour();
            }

            this.view = uuebView;

            resLoader = new ResourceLoader(this.LoadParallel, requestHeader, httpResponseHandlingDelegate);
            this.view.AddChild(resLoader.cacheBox.transform);

            layoutMachine      = new LayoutMachine(resLoader, plugin);
            materializeMachine = new MaterializeMachine(resLoader, plugin);

            if (onParseFailed != null)
            {
                this.onParseFailed = onParseFailed;
            }
            else
            {
                this.onParseFailed = errors =>
                {
                    Debug.LogError("parse errors:" + errors.Count);
                    foreach (var error in errors)
                    {
                        Debug.LogError("code:" + error.code + " reason:" + error.reason);
                    }
                };
            }
        }
    private IEnumerator CreateLayoutedTree(string sampleHtml, Action <TagTree> onLayouted, float width = 100)
    {
        ParsedTree parsedRoot = null;
        var        cor        = parser.ParseRoot(
            sampleHtml,
            parsed =>
        {
            parsedRoot = parsed;
        }
            );

        view.Core.Internal_CoroutineExecutor(cor);

        yield return(WaitUntil(
                         () => parsedRoot != null, () => { throw new TimeoutException("too late."); }, 1
                         ));

        if (parsedRoot.errors.Any())
        {
            foreach (var error in parsedRoot.errors)
            {
                Debug.LogError("error:" + error.code + " reason:" + error.reason);
            }
            throw new Exception("failed to create layouted tree.");
        }

        TagTree layouted = null;

        var layoutMachine = new LayoutMachine(core.resLoader, new TMProPlugin());

        var cor2 = layoutMachine.Layout(
            parsedRoot,
            new Vector2(width, 100),
            layoutedTree =>
        {
            layouted = layoutedTree;
        }
            );

        view.Core.Internal_CoroutineExecutor(cor2);

        yield return(WaitUntil(
                         () => layouted != null, () => { throw new TimeoutException("too late."); }, 5
                         ));

        onLayouted(layouted);
    }
    private IEnumerator CreateTagTree(string sampleHtml, Action <TagTree> onParsed, float width = 100)
    {
        ParsedTree parsedRoot   = null;
        TagTree    layoutedRoot = null;

        var cor = parser.ParseRoot(
            sampleHtml,
            parsed =>
        {
            parsedRoot = parsed;
        }
            );

        executor.Core.CoroutineExecutor(cor);

        yield return(WaitUntil(
                         () => parsedRoot != null, () => { throw new TimeoutException("too late."); }, 1
                         ));

        if (parsedRoot.errors.Any())
        {
            throw new Exception("failed to parse. error:" + parsedRoot.errors[0].reason);
        }


        var layoutMachine = new LayoutMachine(
            loader,
            new TMProPlugin()
            );

        var loaderCor = layoutMachine.Layout(
            parsedRoot,
            new Vector2(width, 100),
            layoutedTree =>
        {
            layoutedRoot = layoutedTree;
        }
            );

        executor.Core.CoroutineExecutor(loaderCor);

        yield return(WaitUntil(
                         () => layoutedRoot != null, () => { throw new TimeoutException("too late."); }, 5
                         ));

        onParsed(layoutedRoot);
    }
    public IEnumerator RevertLayoutHTMLWithSmallImageAndSmallTextAndBr()
    {
        var sample = @"
        <body><img src='https://dummyimage.com/10.png/09f/fff'/>over 100px string should be multi lined text with good separation.
        <br>need some length.</body>";

        ParsedTree parsedRoot = null;
        {
            var cor = parser.ParseRoot(
                sample,
                parsed =>
            {
                parsedRoot = parsed;
            }
                );

            executor.Core.CoroutineExecutor(cor);

            yield return(WaitUntil(
                             () => parsedRoot != null, () => { throw new TimeoutException("too late."); }, 1
                             ));
        }

        {
            var done = false;

            LayoutMachine layoutMachine = null;

            layoutMachine = new LayoutMachine(
                loader,
                new TMProPlugin()
                );

            var cor = layoutMachine.Layout(
                parsedRoot,
                new Vector2(100, 100),
                layoutedTree =>
            {
                done = true;
                True(layoutedTree.viewHeight == 112, "not match. layoutedTree.viewHeight:" + layoutedTree.viewHeight);
            }
                );
            executor.Core.CoroutineExecutor(cor);


            yield return(WaitUntil(
                             () => done, () => { throw new TimeoutException("too late."); }, 5
                             ));

            TagTree.CorrectTrees(parsedRoot);

            /*
             *  revert-layout.
             */
            var done2 = false;

            var cor2 = layoutMachine.Layout(
                parsedRoot,
                new Vector2(100, 100),
                layoutedTree =>
            {
                done2 = true;
                True(layoutedTree.viewHeight == 112, "not match. actual:" + layoutedTree.viewHeight);
            }
                );

            executor.Core.CoroutineExecutor(cor2);


            yield return(WaitUntil(
                             () => done2, () => { throw new TimeoutException("too late."); }, 5
                             ));
        }
    }