about summary refs log tree commit diff stats
path: root/src/render/renderdocument.nim
Commit message (Collapse)AuthorAgeFilesLines
* Separate ANSI text decoding from main binarybptato2024-02-251-437/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handling text/plain as ANSI colored text was problematic for two reasons: * You couldn't actually look at the real source of HTML pages or text files that used ANSI colors in the source. In general, I only want ANSI colors when piping something into my pager, not when viewing any random file. * More importantly, it introduced a separate rendering mode for plaintext documents, which resulted in the problem that only some buffers had DOMs. This made it impossible to add functionality that would operate on the buffer's DOM, to e.g. implement w3m's MARK_URL. Also, it locked us into the horribly inefficient line-based rendering model of entire documents. Now we solve the problem in two separate parts: * text/x-ansi is used automatically for documents received through stdin. A text/x-ansi handler ansi2html converts ANSI formatting to HTML. text/x-ansi is also used for .ans, .asc file extensions. * text/plain is a separate input mode in buffer, which places all text in a single <plaintext> tag. Crucially, this does not invoke the HTML parser; that would eat NUL characters, which we should avoid. One blind spot still remains: copiousoutput used to display ANSI colors, and now it doesn't. To solve this, users can put the x-ansioutput extension field to their mailcap entries, which behaves like x-htmloutput except it first pipes the output into ansi2html.
* Allow non-RGB colors in CSSbptato2024-02-241-16/+16
| | | | | | | | | | | The -cha-ansi color type now sets ANSI colors in CSS. Also, color correction etc. has been improved a bit: * don't completely reset output state in processFormat for new colors * defaultColor is now separated from ANSI color type 0 * bright ANSI colors are no longer replaced with bold + dark variant * replaced ANSI color map to match xterm defaults
* More bgcolor fixesbptato2024-02-171-10/+7
| | | | | | * fix accidental dependency on previously chosen bgcolor (ouch) * also draw empty background boxes for bgcolor-is-canvas boxes * remove unused variable
* layout: use html/body bgcolor as canvas bgcolorbptato2024-02-171-12/+21
| | | | | | This is required by the standard. (Without this, lots of websites have incorrect background colors, because they set the body height to 100% of the viewport.)
* layout: consider inline positioning for absolute blocksbptato2024-01-291-59/+87
| | | | | When an absolute block is a descendant of an inline box, its positioned ancestor must be set to that box.
* Remove newFormatbptato2024-01-231-4/+4
| | | | Pointless; it just returned a default zero-initialized object.
* Use std/* imports everywherebptato2024-01-071-2/+2
|
* break up twtstr somewhatbptato2023-12-131-1/+1
| | | | | Avoid computing e.g. charwidth data for http which does not need it at all.
* layout: rewrite inline box handlingbptato2023-11-271-159/+179
| | | | | | | | | | | We now have real inline boxes. * Fix nesting of inline boxes * Represent inline boxes with a hierarchical RootInlineFragment -> InlineFragment tree * Get rid of inline padding hack * Get rid of ComputedFormat * Paint inline box backgrounds properly
* renderdocument: avoid setText with zero-width stringbptato2023-11-211-9/+10
| | | | This can happen e.g. if the word is fully outside the canvas.
* renderdocument: fix regression in d20fc30bptato2023-11-201-12/+0
| | | | | The reasoning for using early returns was wrong, and they should be unnecessary anyway.
* renderdocument, cell: fix FormatCell bugsbptato2023-11-201-17/+31
| | | | | | | * No more zero width FormatCells messing up buffer display (yay!) * Assert on setText width a zero-length string * Remove unnecessary FormatCell added to every line on paintBackground start
* layout: refactor flow margin propagation, sizingbptato2023-11-121-5/+5
| | | | | | | | | * Blocks are now positioned before their text contents would be layouted * Untangle calcAvailableSpaceSizes's results from BlockBox * Move a couple of objects from box -> engine * Use Size in a few more places * Set display to block if float is not none
* buffer: remove viewport referencebptato2023-10-281-3/+3
| | | | | Viewport at this point is basically just the layout state, so it makes no sense to store it in buffer.
* renderdocument: slightly refactor, optimize addLinesbptato2023-10-261-35/+12
|
* layout/engine: refactor inline atoms etc.bptato2023-10-261-21/+16
|
* WindowAttributes: refactorbptato2023-10-191-1/+1
| | | | | | * rename module (window -> winattrs, to avoid conflict with env/window) * do not use result * remove unused cell_ratio
* move around more modulesbptato2023-09-141-2/+2
| | | | | | | | | | * ips -> io/ * loader related stuff -> loader/ * tempfile -> extern/ * buffer, forkserver -> server/ * lineedit, window -> display/ * cell -> types/ * opt -> types/
* Move HTML parsing into Chamebptato2023-08-151-1/+2
| | | | Operation "modularize Chawan somewhat" part 2
* htmlparser: decouple from DOMbptato2023-07-091-0/+1
| | | | | Instead of directly appending nodes to the DOM, use a DOMBuilder interface.
* Add popup menu for select elementbptato2023-07-051-1/+1
| | | | | | | Replaces the weird CSS implementation we have had until now with a searchable popup menu similar to that of w3m. (The previous implementation broke on websites that do not expect <select> to expand on click, had no separate search, and was ugly.)
* calculateErrorY: fix regression by using intbptato2023-07-041-2/+2
| | | | Obviously we can't calculate rounding error without rounding.
* Use LayoutUnit in layoutbptato2023-07-041-18/+36
| | | | Reduces ugly rendering caused by rounding errors.
* Revert "renderdocument: bgcolor blending"bptato2023-06-151-13/+16
| | | | | This reverts commit c13a4cf4e144f7ab36167ebbb1333f7faeed11b3. Clearly it's broken. Needs a fix.
* renderdocument: bgcolor blendingbptato2023-06-131-16/+13
|
* Fix various layout bugs, prepare for image supportbptato2023-06-121-9/+17
|
* Add support for visibilitybptato2023-06-071-21/+23
|
* Working position: absolute, some other fixesbptato2023-05-131-8/+17
| | | | | | | | Fix margin-top being used instead of margin-bottom. Content width resolving makes somewhat more sense now. min-width, max-width doesn't completely break width calculation anymore. Finally, position: absolute is no longer implemented as a horribly broken hack.
* renderdocument: fix img positionbptato2023-04-121-5/+5
|
* renderdocument: fix failing assertionbptato2023-01-071-0/+8
| | | | | I'm not sure if it was actually causing other issues, but better safe than sorry: formatting is no longer inserted for negative x coordinates.
* css/values, parser, ...: fix background-imagebptato2023-01-061-24/+24
|
* layout/engine: fix non-inheritable values for inline boxbptato2023-01-061-4/+14
| | | | | Also, a hack for inline box background-color. It doesn't work very well, but good enough for now.
* renderdocument: add StyledNodes to backgroundsbptato2023-01-031-10/+17
| | | | | | This makes it possible to e.g. click on this: <a href=x style="display: inline-block; width: 5em; height: 5em; background-color: red"></a>
* renderdocument: fix crash for image textbptato2023-01-031-1/+2
| | | | We need to check if y >= 0, or it fails.
* layout/engine: table layout improvements, fix pre-wrap whitespacebptato2022-12-281-1/+1
| | | | | | | | Table layout: weight calculation is no longer broken. We use maxContentWidth for this, which the first pass of a non-specified table cell layout overrides. pre-wrap: just a minor fix - include it in whitespacepre, now that we have a distinction between pre and wrapping white-space
* layout/engine: get rid of dom dependencybptato2022-12-271-1/+1
| | | | Layout should only depend on cascading.
* Proper support for tabsbptato2022-12-271-4/+4
|
* Display text for img tag, background-imagebptato2022-12-161-0/+12
|
* renderdocument: fix another formatting bugbptato2022-12-121-3/+5
|
* renderdocument: fix overwriting formatcellsbptato2022-12-121-3/+10
| | | | Gets rid of weird underline effects. Also fixes nx calculation, I think.
* Add multiple text-decoration, overline emulationbptato2022-12-071-5/+4
|
* Do not center error-corrected linesbptato2022-11-301-1/+1
| | | | It sounds like a good idea, but in fact looks terrible in lists.
* renderdocument: fix bug negative padwidth bugbptato2022-11-291-1/+8
| | | | padwidth could be negative because we didn't ensure cx <= x.
* Add missing iflush call, add experimental line height error correctionbptato2022-11-291-1/+14
| | | | It kind of works, I guess?
* Add position css property, inline block fixesbptato2022-11-281-2/+3
| | | | | More specifically, inline block white-space is no longer incorrectly determined by its computed values, but rather by its parent's values.
* Fix some table layout issuesbptato2022-11-251-1/+1
|
* Add some quirks mode rules + presentational hintsbptato2022-11-251-1/+6
| | | | Only as a POC for now.
* Table fixes wipbptato2022-11-221-11/+0
|
* Terminal refactoringsbptato2022-11-201-28/+28
|
* Rewrite buffer/pager for multi-processingbptato2022-11-191-1/+1
|