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 )); } }