| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
Great performance win on large documents.
|
|
|
|
|
|
|
| |
* properly wrap inline internal table boxes in inline-table (instead
of block-level table)
* fix missing baseline in table wrapper boxes
* fix wrong wrapping of misparented table/row/row group children
|
|
|
|
|
|
|
|
|
|
| |
* support position: absolute on flex items
* proper top/bottom/left/right calculation for position: relative
* push positioned flex box sizes to positioned stack
Still not perfect: position: absolute should always resolve percentage
sizes and top/bottom/left/right, meaning absolute layout needs to be
delayed until its containing box is fully layouted.
|
|
|
|
| |
It was broken for parent boxes with indefinite sizes.
|
|
|
|
|
|
|
| |
* fix max size trumping min size
* respect min-width/max-width/min-height/max-height for images
* fix xminwidth calculation for percentage-sized images with an
indefinite containing size
|
|
|
|
|
|
| |
* fix flex column item width not being stretched
* set minimum flex column height to the layouted item's height (to avoid
overlap)
|
|
|
|
|
| |
Text data is no longer stored separately in InlineFragments; instead,
we now include refs to StyledNodes.
|
| |
|
|
|
|
| |
reduces images spilling out of their containers
|
|
|
|
| |
I doubt this is correct, but at least it's less broken than previously
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* resize images with stb_image_resize
* use tee for output handle redirection (redirectToFile blocks)
* cache original image files
* accept lseek in sandbox
* misc stbi fixes
For now, I just pulled in stb_image_resize v1. v2 is an extra 150K in
size, not sure if it's worth the cost. (Either way, we can always switch
later if needed, since the API is almost the same.)
Next step: move sixel/kitty encoders to CGI, and cache their output in
memory instead of the intermediate RGBA representation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* fix text-align breaking down in the presence of floats
* improve (and simplify) background color area painting
This greatly simplifies inline layout by removing the additional
text-align atom movement code and replacing it with a full re-layout
when needed. That re-layout only occurs in (rare) cases where the text
is likely to be relatively short anyway, so it's probably a win in any
remotely realistic layout.
This has also made it possible to at last merge the last three passes
(horizontal/vertical alignment and background painting) and drop that
weird synchronized tree + vector traversal.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Not very useful yet; partial layouting and/or a new renderer is probably
necessary to replace the current FormatCell-based node placement,
otherwise it will be unbearably slow.
|
|
|
|
|
| |
* get rid of BlockGroup
* unify BlockBox construction for flex, block, table
|
|
|
|
|
|
|
| |
Much cleaner than the previous solution.
Should also be somewhat less wasteful, as we no longer constantly
rebuild the same tree with new branches.
|
| |
|
|
|
|
| |
get rid of percHeight, unify min/max sizing, etc.
|
|
|
|
|
| |
* do not use inline block computed values for wrapper fragment
* fix minimum line box height calculation
|
|
|
|
|
|
|
| |
As expected, the mystery line was just hiding another bug. (In
particular, indefinite containing size constraints were not denied in
resolveContentWidth, so it only (accidentally) worked with stretched
sizes.)
|
|
|
|
| |
seems like this line is necessary after all
|
| |
|
|
|
|
|
|
| |
* merge caption sizing code path with layoutRootBlock
* fix caption margins being disregarded
* fix incorrect positioning of `caption-side: bottom'
|
|
|
|
|
| |
* use current fragment's line height for percentage baselines
* get rid of baseline calculating pass in verticalAlignLine
|
|
|
|
|
|
|
|
|
|
|
| |
As per standard:
> Adjoining vertical margins collapse, except:
> [...]
> If the top and bottom margins of an element with clearance are
> adjoining, its margins collapse with the adjoining margins of
> following siblings but that resulting margin does not collapse with
> the bottom margin of the parent block.
|
| |
|
|
|
|
| |
just merge it with InlineFragment
|
| |
|
|
|
|
| |
This avoids some unnecessary string copying.
|
|
|
|
|
|
|
|
|
|
| |
Instead of allocating a separate object for each box, just re-use
a single BlockBox on re-layouts.
This means that now the (block-level) tree is built in its final form in
the first pass.
(Inline boxes remain the same as before for now.)
|
|
|
|
|
| |
* fix list-style-position: inside
* get rid of ListItemBoxBuilder
|
|
|
|
|
|
|
|
|
| |
Captions are no longer positioned inside tables, yay.
Also, misc:
* rename some things for consistency
* clamp out of bounds rgb() values
* remove inherited property lookup table
|
|
|
|
|
| |
I wish we didn't need any, but fixing this for integers would be too
involved and the float64 one was causing problems now.
|
|
|
|
| |
removes elaborate table box type hierarchy that does nothing
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, the following printed "2" instead of "12":
<div style=float:left>1</div><div style=display:flow-root>2</div>
This fixes the above problem in the laziest possible way: we relayout once
in the smallest possible space the BFC fits in when floats exist. See the
comment in the code for details.
As a nice bonus, this also fixes tables overlapping with floated boxes,
by pretending that they establish a BFC.
|
|
|
|
|
| |
The renderer cannot handle it yet, but at least this fixes pages that
expect overflow: hidden (etc.) to establish a new BFC.
|
|
|
|
|
| |
Including our own position is a mistake, since the BFC starts from the
inner box.
|
| |
|
|
|
|
| |
Fix percentage-based left/right etc.
|
| |
|
|
|
|
| |
for consistency
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of using the built-in (and outdated, and buggy) tables, we now
use libunicode from QJS. This shaves some bytes off the executable,
though far less than I had imagined it would.
Also, a surprising effect of this change: because libunicode's tables
aren't glitched out, kanji properly gets classified as alpha. I found
this greatly annoying because `w' in Japanese text would now jump
through whole sentences. As a band-aid solution I added an extra
Han category, but I wish we had a more robust solution that could
differentiate between *all* scripts.
TODO: I suspect that separately loading the tables for every rune in
breaksViWordCat is rather inefficient. Using some context object (at
least per operation) would probably be beneficial.
|
|
|
|
|
|
|
| |
Turn Offset, Size, etc. into arrays indexed by a DimensionType enum,
and use it to unify code that only differs in the dimension it is
computing for. (e.g. this lets us use the same code for flex row &
column layouts.)
|
|
|
|
|
|
| |
Turns out we also have to *expand* column width, if the specified column
width is too small *and* no unspecified column exists to take the rest
of the place.
|