Nathan Adams
f85684fec0
avm1: Move current_swf_version and is_case_sensitive from avm1 to stackframe
2020-06-29 10:10:11 +02:00
Nathan Adams
da8ca1379f
avm1: Change from 'avm, context' to 'activation, context' and restructured to support this
2020-06-29 10:09:38 +02:00
Nathan Adams
70e4a40f01
avm1: Allow for user errors inside avm1::error::Error
2020-06-25 02:03:15 -07:00
David Wendt
74af7b345c
Adjust `BoxBounds` to use `Copy` instead of `Clone`.
2020-06-24 23:40:27 -04:00
David Wendt
d7a257f93f
Adjust `LayoutContext` and `LayoutBox` to construct a `Vec` of boxes rather than an intrusive, garbage-collected linked list.
2020-06-24 23:34:38 -04:00
David Wendt
453cf6c0f1
Remove *extremely* out of date documentation on `BoxBounds`.
2020-06-24 22:36:36 -04:00
David Wendt
2723c3f6d9
Rename `Collec` to `CollectWrapper`
2020-06-24 22:34:04 -04:00
David Wendt
5b36522258
Remove out-of-date doccomment on `LayoutBox`.
2020-06-24 22:19:16 -04:00
David Wendt
e4d4d996f9
Don't push each line of text down with the leading adjustment.
...
We already adjust the cursor with the same adjustment, so we don't need to move the text down.
2020-06-24 21:32:59 -04:00
Mike Welsh
0f794489a4
text: Don't create underline drawing if no underline exists
2020-06-24 12:53:51 -07:00
Mike Welsh
3558e42c34
text: Always fallback to Noto Sans if text field is set to use device fonts
2020-06-24 12:19:06 -07:00
Mike Welsh
f591e1dafc
text: process_html_entity returns a Cow
2020-06-24 11:56:20 -07:00
Mike Welsh
b47e84b131
text: Derive Default for TextFormat
2020-06-24 10:44:34 -07:00
David Wendt
12495de91e
Generate `LI`s when newlines are encountered with bullets on.
2020-06-22 19:45:39 -04:00
David Wendt
ed5f3cdd0e
Don't attempt to use non-embedded fonts. Instead, replace all of them with Noto (like EditText used to do).
2020-06-22 19:02:32 -04:00
David Wendt
7a9796a2f9
Restore BR parsing.
...
Note that this won't actually work since we're behind an XML parser that chokes on implicitly self-closing HTML tags.
2020-06-20 20:15:00 -04:00
David Wendt
c1ad37a0f6
Implement text span raising, sans list items.
...
During the raising process, we maintain a list of pointers to the lowest-most `textformat`, `p`, `font`, `a`, `b`, `i`, and `u` in the document that we are appending to. When we get a new one of any of those elements, we clear the rest off the stack. This forces us to add HTML in the same order Flash does.
LIs are not yet supported because they require us to process text line-by-line which doesn't mesh with this model.
There's also a test but the XML DOM generates HTML strings with the wrong attribute order, so the test fails spuriously.
2020-06-20 20:14:57 -04:00
David Wendt
e036d6594b
Add some entity support to HTML parsing.
2020-06-20 20:08:22 -04:00
David Wendt
88fcb98913
Allow disabling entity processing when parsing XML.
...
This necessitated a change to edittext_bullet, which turns out is accidentally an entity test, too. It now no longer uses entities so that it won't spuriously fail due to an entity related problem.
2020-06-20 20:06:21 -04:00
David Wendt
f097a6584e
Implement underlines.
2020-06-20 19:56:01 -04:00
David Wendt
d63b3f23e9
Add support for inserting arbitrary drawings into the layout.
2020-06-20 19:56:00 -04:00
David Wendt
1c371c3a95
Render bullets.
...
Bullets are implemented by rendering U+2022 as if it were normal text, but always placed 18px from the left of the line. This appears to be sort of what Flash does.
2020-06-20 19:55:59 -04:00
David Wendt
a3dfa8c21f
Bulleted lists get 35px of additional left-margin and do not respect alignment at all.
2020-06-20 19:55:59 -04:00
David Wendt
8628261dc8
Add a bunch of necessary fixes to default text formatting and HTML format extraction.
...
This also replaces the `edittext_html_defaults` test with a more robust test that checks the default format and global format of SWF-based, text, and HTML test vectors.
2020-06-20 19:55:57 -04:00
David Wendt
4f3d4c82fb
For some reason, Flash does not respect `<br>` at all, so we won't, either.
...
It *does*, however, respect `<sbr>` (which does the exact same thing), as well as `\n` (which makes absolutely no sense in HTML, normally that would get stripped out).
2020-06-20 19:55:57 -04:00
David Wendt
efc6236cb5
Treat the end of each paragraph as a newline.
2020-06-20 19:55:56 -04:00
David Wendt
d8a38d06bb
Collect font height, letter spacing and the kerning flag into a single `EvalParameters` structure.
2020-06-20 19:55:55 -04:00
David Wendt
1f6d6018dc
Use a char pattern here for clippy's sake
2020-06-20 19:55:55 -04:00
David Wendt
1966ec5cb1
Implement `sbr` tags.
...
No, I don't know what they are either, but at least one movie exists which treats them like `br`, so we'll treat them like that, too.
2020-06-20 19:55:54 -04:00
David Wendt
f746ac5539
Implement `justify`, mostly.
...
This implementation has a few bugs which appear to have something to do with alignment. It's not only justify, but justify is the only test that's flagged as failing.
If you look at the margins test, you'll see what I mean: right-aligned and justified text doesn't quite make it to the right edge of the box even though it should. I'm not sure why.
This also restricts text rounding further: `measure` now only rounds when wrapping text, since Flash Player appears to account for fractional pixels in all other cases.
2020-06-20 19:55:54 -04:00
David Wendt
670c4723e3
Add support for the `kerning` flag, which turns on and off the kerning information on fonts.
2020-06-20 19:55:53 -04:00
David Wendt
180ef3b423
Recognize `<br>` as a line break.
...
This code is currently unreachable as `<br>` will actually trigger an AVM1 error due to our overly-strict XML parser.
2020-06-20 19:55:52 -04:00
David Wendt
2452124631
Break individual words at the start of lines that are too big to fit on the line.
2020-06-20 19:55:51 -04:00
David Wendt
2ad216cab4
Don't continue comparing tab stops after we find one that fits.
2020-06-20 19:55:50 -04:00
David Wendt
b6c12b1e23
Use current font height times 2.7 as the natural tab stop, as that seems to match Flash... for now.
2020-06-20 19:55:50 -04:00
David Wendt
2caaa6875d
Add support for explicit tabs and newlines.
2020-06-20 19:55:49 -04:00
David Wendt
153ab675e9
When aligning a line, actually consider all the boxes within the line.
2020-06-20 19:55:49 -04:00
David Wendt
db0398d2ee
Left and right margins and indents should not be included in `textWidth`.
2020-06-20 19:55:48 -04:00
David Wendt
6ce7ecee78
Implement `letterSpacing`.
2020-06-20 19:55:47 -04:00
David Wendt
16da6d827c
Line-leading is always applied at least once, even if there are no line breaks in the text field.
2020-06-20 19:55:46 -04:00
David Wendt
410fb3ab86
Don't round each line's leading. Instead, round at the end of the operation.
...
This was verified by visual comparison with Flash Player; lines of text appear to be shifted by half-pixels, while the script output is always still rounded down.
2020-06-20 19:55:45 -04:00
David Wendt
2858c09b6e
Only apply leading adjustment on newlines.
...
This results in ALL height adjustments being off by 2px, regardless of leading or font size. Tantalizing!
2020-06-20 19:55:45 -04:00
David Wendt
09c91d191a
Round-trip tab stops between `EditText` and AVM1
2020-06-20 19:55:43 -04:00
David Wendt
00217072e6
After the previous set of fixes our tests are now consistent with a layout engine that always rounds down to the nearest pixel and never up. Adjust code to match.
2020-06-20 19:55:43 -04:00
David Wendt
06c66533c7
Don't apply leading twice.
2020-06-20 19:55:42 -04:00
David Wendt
82c6269cf6
Ensure that presentational markup styles cascade from parent tag to child, and from the default format to the first tag.
2020-06-20 19:55:42 -04:00
David Wendt
9981148482
Add a test for `BoxBounds.with_size`, since we're using it now
2020-06-20 19:55:41 -04:00
David Wendt
aae1f0ba7a
Skip fixups on empty lines.
2020-06-20 19:55:41 -04:00
David Wendt
bd40295076
Ensure that the font-provided leading is accounted for when moving the cursor for a newline.
2020-06-20 19:55:41 -04:00
David Wendt
0e0b2fb85d
All layout boxes on the line should have trailing whitespace trimmed off of their measurements.
...
Flash has a weird bug where it will NOT trim trailing spaces off of the metrics reported to users if the text is left-aligned. We replicate this here so that tests pass.
2020-06-20 19:55:40 -04:00