Commit Graph

1849 Commits

Author SHA1 Message Date
David Wendt 3b80ff8d23 Clippy compliance 2020-06-20 19:26:42 -04:00
David Wendt fde5e13358 Expose `replaceText` to AVM1 code. 2020-06-20 19:26:42 -04:00
David Wendt a8a1b985a3 Expose `getTextFormat` and `setTextFormat` to AVM1. 2020-06-20 19:26:41 -04:00
David Wendt 74912525ed Add ancestor iteration to XML nodes. 2020-06-20 19:26:41 -04:00
David Wendt a2836a0b92 Tie `EditText` into the new layout system, which is currently unfinished.
This should *significantly* regress `EditText` layout.
2020-06-20 19:26:37 -04:00
David Wendt 8622cb97a9 Add a system of layout boxes to store text layout decisions made at update time. 2020-06-20 19:16:17 -04:00
David Wendt 4a2fac28d1 Add iterator for text spans 2020-06-20 19:16:17 -04:00
David Wendt ec72ac518c Allow HTML text nodes to populate text.
This will need to be updated to handle line breaks, spaces, and so on correctly - the way whitespace works in HTML differs from plain text.
2020-06-20 19:16:17 -04:00
David Wendt 816644c497 Add an internal implementation of `replaceText`. 2020-06-20 19:16:17 -04:00
David Wendt a1f548f744 Add a routine to generate `TextFormat`s from presentational markup, and another lowering process which tracks the text formats generated by this process. 2020-06-20 19:16:16 -04:00
David Wendt 62a13cd7a6 Add the ability to `walk` through an XML tree.
This yields nodes as `Step`s. This allows keeping track of the structure of the tree as you walk through descendents, as each element will be yielded twice: both as a `Step::In` *and* as a `Step::Out`. Non-element nodes will be yielded once as a `Step::Around`.

I'm adding `walk` iteration specifically to avoid having to write certain methods recursively. Existing recursive callers of `children` should probably be updated to `walk` the tree and maintain a separate `Vec` stack.
2020-06-20 19:16:16 -04:00
David Wendt 4eca2d4bdd Replace the existing default format on `EditText` with our brand-new `FormatSpans`.
This also includes code to automatically populate the default format with data from the SWF tag.
2020-06-20 19:16:16 -04:00
David Wendt efdecdea64 Store the default text format, and use it when generating new spans during normalization.
I'm sure this will wind up having further uses eventually.
2020-06-20 19:16:15 -04:00
David Wendt 153571c0c4 Implement `FormatSpans::set_text_format`.
This also necessitated the addition of code to:

 * Ensure span breaks exist at both sides of the text boundary, without creating degenerate (length-0) spans
  * Consolidate spans with matching text formats
  * Shorten or lengthen the total list of text spans to match the backing string
  * Ensure at least one text span exists at all times

This still has some minor to-dos: for example, it relies on the default `TextSpan` formatting, which probably should be replaced with actually accepting or storing a default format to be used when constructing new text spans.
2020-06-20 19:16:15 -04:00
David Wendt 102c494de4 Add a type to hold text with some text spans, and some tests for that type. 2020-06-20 19:16:14 -04:00
David Wendt 1671fc6eba Add an internal representation of text spans.
Despite having HTML and CSS rendering capabilities, the Flash text field actually does not use HTML as it's internal representation. Instead, the text-span format implied by `getTextFormat` and `setTextFormat` is used to drive layout. You can see this by watching what happens to `htmlText`, *especially* when you add and remove stylesheets.

The `LayoutBox` machinery will be adapted to consume text spans in a future commit. This would make the entire rendering pipeline: HTML/CSS -> Text Spans -> Layout Boxes -> Render commands.
2020-06-20 19:16:14 -04:00
David Wendt 850831181c Add tests for all non-trivial methods of `Position`, `Size`, and `BoxBounds`. 2020-06-20 19:16:13 -04:00
David Wendt ef035c5283 Add `Size.max`, conversions between `Position` and `Size`, `BoxBounds.extent`, and `BoxBounds.with_size`. 2020-06-20 19:16:13 -04:00
David Wendt e7c34d9745 Switch `BoxBounds` from a position-and-size representation to an offset-and-extent representation.
This makes the implementation of rectangle union (`Add`/`AddAssign`) far easier as we just compute the min and max of the offset and extent coordinates. It also makes the conversion into and from `swf::Rectangle` easier as it's now effectively a generic version of that datatype.

On the other hand, `width`, `height`, and `size` now have to be calculated, and require `T` to be self-`Sub`. I'm not sure if this is that much of a problem or not.
2020-06-20 19:16:12 -04:00
David Wendt 0a1de3276f Add extra types for indicating moving a position and resizing a box. 2020-06-20 19:16:12 -04:00
David Wendt a4c8cd4711 Add a set of types for tracking CSS attributes, positions, sizes, and bounds on layout boxes. 2020-06-20 19:16:12 -04:00
David Wendt 4739e08c11 Add the ability to split lines from the middle of an already-existing flow operation 2020-06-20 19:16:12 -04:00
David Wendt 7e7ca88c3d `post_instantiate` is morally equivalent to duplicating the display object it's called on, so we should also duplicate the XML document attached to it.
We don't have to do this for `object` because we don't actually construct the script object until instantiation time.
2020-06-20 19:16:11 -04:00
David Wendt a3f4509d63 Store all text internally as an HTML tree, alongside the existing strings.
We're reusing the XML machinery to handle HTML - this is probably not 100% correct, but writing a new HTML parser to cover just `EditText` will be rather complicated.
2020-06-20 19:16:11 -04:00
David Wendt cc854db9b3 Derive `Collect` on `EditTextData`. 2020-06-20 19:16:10 -04:00
David Wendt ac9cd0cf87 Move `TextFormat` over to a new `html` module, which will hold all the stuff necessary for rendering HTML in an `EditText`.
`TextFormat` is owned data and should be collectable as static.
2020-06-20 19:16:10 -04:00
Nathan Adams 2e7ebbf258 avm1: Fatal errors will halt the AVM and prevent further execution 2020-06-20 15:02:00 -07:00
Nathan Adams f5da954b32 avm1: Merge avm1::Error and avm1::ExecutionError for now. It's plausible that nested inside actions we can encounter an ExecutionError, so at that point it doesn't make sense to have a separation. 2020-06-20 15:02:00 -07:00
Nathan Adams e2c607c70f avm1: Avm1::retire_stack_frame can't error, so adjust its signature appropriately 2020-06-20 15:02:00 -07:00
Nathan Adams a36e2105a3 avm1: Made avm1::Error an actual error type, and removed all calls that throw incorrect errors in avm1 2020-06-20 15:02:00 -07:00
Nathan Adams ad07520af3 avm1: Add avm1::ExecutionError 2020-06-20 15:02:00 -07:00
Nathan Adams adb8ffbf9c core: Convert XML errors into an enum 2020-06-20 15:02:00 -07:00
Nathan Adams 59ccd75518 core: Rename loader::LoaderError to loader::Error 2020-06-20 15:02:00 -07:00
Nathan Adams b6f012cf7f core: Use thiserror to derive Loader errors 2020-06-20 15:02:00 -07:00
Nathan Adams 0f1eef9022 core: Introduce LoaderError to all Loader methods 2020-06-20 15:02:00 -07:00
dependabot-preview[bot] abeece7e78 build(deps): bump image from 0.23.5 to 0.23.6
Bumps [image](https://github.com/image-rs/image) from 0.23.5 to 0.23.6.
- [Release notes](https://github.com/image-rs/image/releases)
- [Changelog](https://github.com/image-rs/image/blob/master/CHANGES.md)
- [Commits](https://github.com/image-rs/image/compare/v0.23.5...v0.23.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-20 13:29:30 -07:00
dependabot-preview[bot] 05c02335fb build(deps): bump serde from 1.0.112 to 1.0.113
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.112 to 1.0.113.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.112...v1.0.113)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 21:22:21 +00:00
Nathan Adams c8f0753da4 core: Rename Value::as_number to Value::coerce_to_f64 2020-06-19 12:48:28 -07:00
Nathan Adams 67042b255c core: Replace Value::as_* numeric methods in favour of coerce_to_* or manual matching 2020-06-19 12:48:28 -07:00
Nathan Adams 270f63b2f3 core: Made Object::to_string return a Cow<str> 2020-06-19 12:48:28 -07:00
Nathan Adams f4b4d0ebb7 core: Replace Value::into_string in favour of coerce_to_string or manual matching 2020-06-19 12:48:28 -07:00
Nathan Adams 5662b2d4d9 core: Make Value::coerce_to_string return a Cow<str>` 2020-06-19 12:48:28 -07:00
Nathan Adams 9633dc71c3 core: Replace Value::as_string in favour of coerce_to_string or manual matching 2020-06-19 12:48:28 -07:00
Nathan Adams e44568c31c core: Remove Value::call_method, you must box the value first 2020-06-19 12:48:28 -07:00
Nathan Adams 5dd1a1e509 core: Remove Value::get, you must box the value first 2020-06-19 12:48:28 -07:00
Nathan Adams fc18c2fce5 core: Rename Value::as_object to Value::coerce_to_object 2020-06-19 12:48:28 -07:00
Nathan Adams b2b57c1540 core: Make Value::as_object always return a (possibly boxed) object 2020-06-19 12:48:28 -07:00
Nathan Adams 3695c3c9fa tests: Add test for default names of display objects 2020-06-18 16:26:36 -07:00
Mike Welsh 62cfeb3754 core: Assign default name to unnamed clips (fix #66) 2020-06-18 16:26:36 -07:00
dependabot-preview[bot] 3faa48e599 build(deps-dev): bump @wdio/local-runner from 6.1.17 to 6.1.19 in /web
Bumps [@wdio/local-runner](https://github.com/webdriverio/webdriverio) from 6.1.17 to 6.1.19.
- [Release notes](https://github.com/webdriverio/webdriverio/releases)
- [Changelog](https://github.com/webdriverio/webdriverio/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webdriverio/webdriverio/compare/v6.1.17...v6.1.19)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-18 11:59:13 -07:00