mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
LibWeb: Add the default user agent MathML stylesheet
We now apply MathML's default user agent style sheet along with other default styles. This sheet is not mixed in with the other styles in CSS/Default.css because it is a namespaced stylesheet and so has to be its own sheet.
This commit is contained in:
parent
fd0ee8ae7b
commit
0b2da4f8c6
Notes:
sideshowbarker
2024-07-17 06:35:23 +09:00
Author: https://github.com/Epigenetic Commit: https://github.com/SerenityOS/serenity/commit/0b2da4f8c6 Pull-request: https://github.com/SerenityOS/serenity/pull/20269 Reviewed-by: https://github.com/AtkinsSJ
7 changed files with 171 additions and 19 deletions
|
@ -89,6 +89,19 @@ function (generate_css_implementation)
|
|||
add_custom_target(generate_QuirksModeStyleSheetSource.cpp DEPENDS CSS/QuirksModeStyleSheetSource.cpp)
|
||||
add_dependencies(all_generated generate_QuirksModeStyleSheetSource.cpp)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT MathML/MathMLStyleSheetSource.cpp
|
||||
COMMAND "${CMAKE_COMMAND}" -E make_directory CSS
|
||||
COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" mathml_stylesheet_source "${LIBWEB_INPUT_FOLDER}/MathML/Default.css" > MathML/MathMLStyleSheetSource.cpp.tmp
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different MathML/MathMLStyleSheetSource.cpp.tmp MathML/MathMLStyleSheetSource.cpp
|
||||
COMMAND "${CMAKE_COMMAND}" -E remove MathML/MathMLStyleSheetSource.cpp.tmp
|
||||
VERBATIM
|
||||
DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh"
|
||||
MAIN_DEPENDENCY "${LIBWEB_INPUT_FOLDER}/MathML/Default.css"
|
||||
)
|
||||
add_custom_target(generate_MathMLStyleSheetSource.cpp DEPENDS MathML/MathMLStyleSheetSource.cpp)
|
||||
add_dependencies(all_generated generate_MathMLStyleSheetSource.cpp)
|
||||
|
||||
set(CSS_GENERATED_TO_INSTALL
|
||||
"CSS/EasingFunctions.h"
|
||||
"CSS/Enums.h"
|
||||
|
|
|
@ -213,6 +213,13 @@ embed_as_string_view("generate_quirks_mode_stylesheet_source") {
|
|||
namespace = "Web::CSS"
|
||||
}
|
||||
|
||||
embed_as_string_view("generate_mathml_stylesheet_source") {
|
||||
input = "MathML/Default.css"
|
||||
output = "$target_gen_dir/MathML/MathMLStyleSheetSource.cpp"
|
||||
variable_name = "mathml_stylesheet_source"
|
||||
namespace = "Web::MathML"
|
||||
}
|
||||
|
||||
source_set("all_generated") {
|
||||
generated_deps = [
|
||||
":generate_aria_roles",
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
BlockContainer <html> at (0,0) content-size 800x600 [BFC] children: not-inline
|
||||
BlockContainer <body> at (8,8) content-size 784x207.3125 children: not-inline
|
||||
BlockContainer <(anonymous)> at (8,8) content-size 784x161.65625 children: inline
|
||||
line 0 width: 413.453125, height: 161.65625, bottom: 161.65625, baseline: 152
|
||||
BlockContainer <body> at (8,8) content-size 784x299.65625 children: not-inline
|
||||
BlockContainer <(anonymous)> at (8,8) content-size 784x152 children: inline
|
||||
line 0 width: 302, height: 152, bottom: 152, baseline: 152
|
||||
frag 0 from SVGSVGBox start: 0, length: 0, rect: [9,9 300x150]
|
||||
frag 1 from TextNode start: 0, length: 1, rect: [310,146 8x17.46875]
|
||||
" "
|
||||
frag 2 from TextNode start: 0, length: 5, rect: [320,126 99.453125x43.671875]
|
||||
"Hello"
|
||||
SVGSVGBox <svg> at (9,9) content-size 300x150 [SVG] children: inline
|
||||
InlineNode <a>
|
||||
SVGTextBox <text> at (9,9) content-size 0x0 children: inline
|
||||
TextNode <#text>
|
||||
TextNode <#text>
|
||||
InlineNode <math>
|
||||
InlineNode <a>
|
||||
TextNode <#text>
|
||||
BlockContainer <a> at (9,161) content-size 100x100 children: inline
|
||||
line 0 width: 99.453125, height: 43.671875, bottom: 43.671875, baseline: 33.828125
|
||||
frag 0 from TextNode start: 0, length: 5, rect: [9,161 99.453125x43.671875]
|
||||
"Hello"
|
||||
TextNode <#text>
|
||||
BlockContainer <div> at (9,170.65625) content-size 782x43.65625 children: inline
|
||||
BlockContainer <(anonymous)> at (8,262) content-size 784x0 children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <div> at (9,263) content-size 782x43.65625 children: inline
|
||||
line 0 width: 101.453125, height: 43.65625, bottom: 43.65625, baseline: 33.828125
|
||||
frag 0 from TextNode start: 0, length: 5, rect: [10,170.65625 99.453125x43.671875]
|
||||
frag 0 from TextNode start: 0, length: 5, rect: [10,263 99.453125x43.671875]
|
||||
"Hello"
|
||||
InlineNode <a>
|
||||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> at (8,215.3125) content-size 784x0 children: inline
|
||||
BlockContainer <(anonymous)> at (8,307.65625) content-size 784x0 children: inline
|
||||
TextNode <#text>
|
||||
|
||||
PaintableWithLines (Viewport<#document>) [0,0 800x600]
|
||||
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
|
||||
PaintableWithLines (BlockContainer<BODY>) [8,8 784x207.3125]
|
||||
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x161.65625] overflow: [8,8 784x161.671875]
|
||||
PaintableWithLines (BlockContainer<BODY>) [8,8 784x299.65625]
|
||||
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x152]
|
||||
SVGSVGPaintable (SVGSVGBox<svg>) [8,8 302x152]
|
||||
TextPaintable (TextNode<#text>)
|
||||
InlinePaintable (InlineNode<math>)
|
||||
InlinePaintable (InlineNode<a>)
|
||||
TextPaintable (TextNode<#text>)
|
||||
PaintableWithLines (BlockContainer<DIV>) [8,169.65625 784x45.65625] overflow: [9,170.65625 782x43.671875]
|
||||
PaintableWithLines (BlockContainer<a>) [8,160 102x102]
|
||||
TextPaintable (TextNode<#text>)
|
||||
PaintableWithLines (BlockContainer(anonymous)) [8,262 784x0]
|
||||
PaintableWithLines (BlockContainer<DIV>) [8,262 784x45.65625] overflow: [9,263 782x43.671875]
|
||||
InlinePaintable (InlineNode<A>)
|
||||
TextPaintable (TextNode<#text>)
|
||||
PaintableWithLines (BlockContainer(anonymous)) [8,215.3125 784x0]
|
||||
PaintableWithLines (BlockContainer(anonymous)) [8,307.65625 784x0]
|
||||
|
|
|
@ -633,6 +633,7 @@ set(GENERATED_SOURCES
|
|||
CSS/QuirksModeStyleSheetSource.cpp
|
||||
CSS/TransformFunctions.cpp
|
||||
CSS/ValueID.cpp
|
||||
MathML/MathMLStyleSheetSource.cpp
|
||||
)
|
||||
|
||||
serenity_lib(LibWeb web)
|
||||
|
|
|
@ -195,6 +195,16 @@ static CSSStyleSheet& quirks_mode_stylesheet(DOM::Document const& document)
|
|||
return *sheet;
|
||||
}
|
||||
|
||||
static CSSStyleSheet& mathml_stylesheet(DOM::Document const& document)
|
||||
{
|
||||
static JS::Handle<CSSStyleSheet> sheet;
|
||||
if (!sheet.cell()) {
|
||||
extern StringView mathml_stylesheet_source;
|
||||
sheet = JS::make_handle(parse_css_stylesheet(CSS::Parser::ParsingContext(document), mathml_stylesheet_source));
|
||||
}
|
||||
return *sheet;
|
||||
}
|
||||
|
||||
template<typename Callback>
|
||||
void StyleComputer::for_each_stylesheet(CascadeOrigin cascade_origin, Callback callback) const
|
||||
{
|
||||
|
@ -202,6 +212,7 @@ void StyleComputer::for_each_stylesheet(CascadeOrigin cascade_origin, Callback c
|
|||
callback(default_stylesheet(document()));
|
||||
if (document().in_quirks_mode())
|
||||
callback(quirks_mode_stylesheet(document()));
|
||||
callback(mathml_stylesheet(document()));
|
||||
}
|
||||
if (cascade_origin == CascadeOrigin::Author) {
|
||||
for (auto const& sheet : document().style_sheets().sheets())
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <LibWeb/HighResolutionTime/TimeOrigin.h>
|
||||
#include <LibWeb/Infra/CharacterTypes.h>
|
||||
#include <LibWeb/Infra/Strings.h>
|
||||
#include <LibWeb/MathML/TagNames.h>
|
||||
#include <LibWeb/Namespace.h>
|
||||
#include <LibWeb/SVG/TagNames.h>
|
||||
|
||||
|
|
119
Userland/Libraries/LibWeb/MathML/Default.css
Normal file
119
Userland/Libraries/LibWeb/MathML/Default.css
Normal file
|
@ -0,0 +1,119 @@
|
|||
/* https://w3c.github.io/mathml-core/#user-agent-stylesheet */
|
||||
@namespace url(http://www.w3.org/1998/Math/MathML);
|
||||
|
||||
/* Universal rules */
|
||||
* {
|
||||
font-size: math;
|
||||
display: block math;
|
||||
writing-mode: horizontal-tb !important;
|
||||
}
|
||||
|
||||
/* The <math> element */
|
||||
math {
|
||||
direction: ltr;
|
||||
text-indent: 0;
|
||||
letter-spacing: normal;
|
||||
line-height: normal;
|
||||
word-spacing: normal;
|
||||
font-family: math;
|
||||
font-size: inherit;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
display: inline math;
|
||||
math-shift: normal;
|
||||
math-style: compact;
|
||||
math-depth: 0;
|
||||
}
|
||||
math[display="block" i] {
|
||||
display: block math;
|
||||
math-style: normal;
|
||||
}
|
||||
math[display="inline" i] {
|
||||
display: inline math;
|
||||
math-style: compact;
|
||||
}
|
||||
|
||||
/* <mrow>-like elements */
|
||||
semantics > :not(:first-child) {
|
||||
display: none;
|
||||
}
|
||||
maction > :not(:first-child) {
|
||||
display: none;
|
||||
}
|
||||
merror {
|
||||
border: 1px solid red;
|
||||
background-color: lightYellow;
|
||||
}
|
||||
mphantom {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/* Token elements */
|
||||
mi {
|
||||
text-transform: math-auto;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
mtable {
|
||||
display: inline-table;
|
||||
math-style: compact;
|
||||
}
|
||||
mtr {
|
||||
display: table-row;
|
||||
}
|
||||
mtd {
|
||||
display: table-cell;
|
||||
/* Centering inside table cells should rely on box alignment properties.
|
||||
See https://github.com/w3c/mathml-core/issues/156 */
|
||||
text-align: center;
|
||||
padding: 0.5ex 0.4em;
|
||||
}
|
||||
|
||||
/* Fractions */
|
||||
mfrac {
|
||||
padding-inline-start: 1px;
|
||||
padding-inline-end: 1px;
|
||||
}
|
||||
mfrac > * {
|
||||
math-depth: auto-add;
|
||||
math-style: compact;
|
||||
}
|
||||
mfrac > :nth-child(2) {
|
||||
math-shift: compact;
|
||||
}
|
||||
|
||||
/* Other rules for scriptlevel, displaystyle and math-shift */
|
||||
mroot > :not(:first-child) {
|
||||
math-depth: add(2);
|
||||
math-style: compact;
|
||||
}
|
||||
mroot, msqrt {
|
||||
math-shift: compact;
|
||||
}
|
||||
msub > :not(:first-child),
|
||||
msup > :not(:first-child),
|
||||
msubsup > :not(:first-child),
|
||||
mmultiscripts > :not(:first-child),
|
||||
munder > :not(:first-child),
|
||||
mover > :not(:first-child),
|
||||
munderover > :not(:first-child) {
|
||||
math-depth: add(1);
|
||||
math-style: compact;
|
||||
}
|
||||
munder[accentunder="true" i] > :nth-child(2),
|
||||
mover[accent="true" i] > :nth-child(2),
|
||||
munderover[accentunder="true" i] > :nth-child(2),
|
||||
munderover[accent="true" i] > :nth-child(3) {
|
||||
font-size: inherit;
|
||||
}
|
||||
msub > :nth-child(2),
|
||||
msubsup > :nth-child(2),
|
||||
mmultiscripts > :nth-child(even),
|
||||
mmultiscripts > mprescripts ~ :nth-child(odd),
|
||||
mover[accent="true" i] > :first-child,
|
||||
munderover[accent="true" i] > :first-child {
|
||||
math-shift: compact;
|
||||
}
|
||||
mmultiscripts > mprescripts ~ :nth-child(even) {
|
||||
math-shift: inherit;
|
||||
}
|
Loading…
Reference in a new issue