Merge mozilla-inbound to mozilla-central. a=merge

This commit is contained in:
Daniel Varga 2018-12-31 23:24:52 +02:00
Родитель 63814207cb 664095fb28
Коммит f6510e6ac9
43 изменённых файлов: 706 добавлений и 80 удалений

Просмотреть файл

@ -56,7 +56,10 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMMutationRecord)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMMutationRecord)
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMMutationRecord)
// Break down the linked list so that cycle collector can delete the
// objects sooner.
NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_LAST_RELEASE(nsDOMMutationRecord,
mNext = nullptr)
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsDOMMutationRecord, mTarget,
mPreviousSibling, mNextSibling,

Просмотреть файл

@ -8,7 +8,6 @@
#include "DOMSVGStringList.h"
#include "nsIContent.h"
#include "nsIContentInlines.h"
#include "nsSVGFeatures.h"
#include "mozilla/dom/SVGSwitchElement.h"
#include "nsCharSeparatedTokenizer.h"
#include "nsStyleUtil.h"
@ -42,9 +41,17 @@ already_AddRefed<DOMSVGStringList> SVGTests::SystemLanguage() {
AsSVGElement(), true, LANGUAGE);
}
bool SVGTests::HasExtension(const nsAString& aExtension) {
return nsSVGFeatures::HasExtension(aExtension,
AsSVGElement()->IsInChromeDocument());
bool SVGTests::HasExtension(const nsAString& aExtension) const {
#define SVG_SUPPORTED_EXTENSION(str) \
if (aExtension.EqualsLiteral(str)) return true;
SVG_SUPPORTED_EXTENSION("http://www.w3.org/1999/xhtml")
nsNameSpaceManager* nameSpaceManager = nsNameSpaceManager::GetInstance();
if (AsSVGElement()->IsInChromeDocument() || !nameSpaceManager->mMathMLDisabled) {
SVG_SUPPORTED_EXTENSION("http://www.w3.org/1998/Math/MathML")
}
#undef SVG_SUPPORTED_EXTENSION
return false;
}
bool SVGTests::IsConditionalProcessingAttribute(
@ -109,8 +116,7 @@ bool SVGTests::PassesConditionalProcessingTests(
return false;
}
for (uint32_t i = 0; i < mStringListAttributes[EXTENSIONS].Length(); i++) {
if (!nsSVGFeatures::HasExtension(mStringListAttributes[EXTENSIONS][i],
AsSVGElement()->IsInChromeDocument())) {
if (!HasExtension(mStringListAttributes[EXTENSIONS][i])) {
return false;
}
}

Просмотреть файл

@ -96,7 +96,7 @@ class SVGTests : public nsISupports {
already_AddRefed<DOMSVGStringList> RequiredFeatures();
already_AddRefed<DOMSVGStringList> RequiredExtensions();
already_AddRefed<DOMSVGStringList> SystemLanguage();
bool HasExtension(const nsAString& aExtension);
bool HasExtension(const nsAString& aExtension) const;
virtual SVGElement* AsSVGElement() = 0;

Просмотреть файл

@ -11,7 +11,6 @@ MOCHITEST_MANIFESTS += ['test/mochitest.ini']
EXPORTS += [
'nsSVGClass.h',
'nsSVGFeatures.h',
]
EXPORTS.mozilla += [
@ -131,7 +130,6 @@ UNIFIED_SOURCES += [
'nsSVGBoolean.cpp',
'nsSVGClass.cpp',
'nsSVGEnum.cpp',
'nsSVGFeatures.cpp',
'nsSVGInteger.cpp',
'nsSVGIntegerPair.cpp',
'nsSVGLength2.cpp',

Просмотреть файл

@ -1,35 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* This file contains code to help implement the Conditional Processing
* section of the SVG specification (i.e. the <switch> element and the
* requiredFeatures, requiredExtensions and systemLanguage attributes).
*
* http://www.w3.org/TR/SVG11/struct.html#ConditionalProcessing
*/
#include "nsSVGFeatures.h"
#include "nsIContent.h"
#include "nsIDocument.h"
#include "nsNameSpaceManager.h"
#include "mozilla/Preferences.h"
using namespace mozilla;
/*static*/ bool nsSVGFeatures::HasExtension(const nsAString& aExtension,
const bool aIsInChrome) {
#define SVG_SUPPORTED_EXTENSION(str) \
if (aExtension.EqualsLiteral(str)) return true;
SVG_SUPPORTED_EXTENSION("http://www.w3.org/1999/xhtml")
nsNameSpaceManager* nameSpaceManager = nsNameSpaceManager::GetInstance();
if (aIsInChrome || !nameSpaceManager->mMathMLDisabled) {
SVG_SUPPORTED_EXTENSION("http://www.w3.org/1998/Math/MathML")
}
#undef SVG_SUPPORTED_EXTENSION
return false;
}

Просмотреть файл

@ -1,23 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __NS_SVGFEATURES_H__
#define __NS_SVGFEATURES_H__
#include "nsString.h"
class nsSVGFeatures {
public:
/**
* Check whether we support the given extension string.
*
* @param aExtension the URI of an extension. Known extensions are
* "http://www.w3.org/1999/xhtml" and "http://www.w3.org/1998/Math/MathML"
*/
static bool HasExtension(const nsAString& aExtension, const bool aIsInChrome);
};
#endif // __NS_SVGFEATURES_H__

Просмотреть файл

@ -1,3 +1,5 @@
// |jit-test| skip-if: !getBuildConfiguration()['x86'] && !getBuildConfiguration()['x64']
// Skip on non x86/x64 until Bug 1511615 is fixed for arm7/arm64.
load(libdir + 'asserts.js');
function test() {

Просмотреть файл

@ -1,4 +1,5 @@
// |jit-test| skip-if: !wasmThreadsSupported()
// |jit-test| skip-if: !wasmThreadsSupported() || getBuildConfiguration()['arm64']
// skip arm64 due to bug 1513231
const oob = /index out of bounds/;
const unaligned = /unaligned memory access/;

Просмотреть файл

@ -1,3 +1,5 @@
// |jit-test| skip-if: getBuildConfiguration()['arm64']
// skip arm64 due to bug 1513231
// Test bounds checking at the end of memory with a constant base pointer.
// This is intended to verify a bounds check elimination optimization in
// the baseline compiler.

Просмотреть файл

@ -1,3 +1,5 @@
// |jit-test| skip-if: getBuildConfiguration()['arm64']
// skip arm64 due to bug 1513231
mem='\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'+
'\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'+
'\x00'.repeat(65488) +

Просмотреть файл

@ -1,3 +1,5 @@
// |jit-test| skip-if: getBuildConfiguration()['arm64']
// skip arm64 due to bug 1513231
const RuntimeError = WebAssembly.RuntimeError;
function loadModuleSrc(type, ext, offset, align, drop = false) {

Просмотреть файл

@ -1,3 +1,5 @@
// |jit-test| skip-if: !getBuildConfiguration()['x86'] && !getBuildConfiguration()['x64'] && !getBuildConfiguration()['arm64']
// skip arm7 due to bug 1513231
// float_memory.wast:5
let $1 = instance("\x00\x61\x73\x6d\x01\x00\x00\x00\x01\x8c\x80\x80\x80\x00\x03\x60\x00\x01\x7d\x60\x00\x01\x7f\x60\x00\x00\x03\x86\x80\x80\x80\x00\x05\x00\x01\x02\x02\x02\x05\x84\x80\x80\x80\x00\x01\x01\x01\x01\x07\xb7\x80\x80\x80\x00\x05\x08\x66\x33\x32\x2e\x6c\x6f\x61\x64\x00\x00\x08\x69\x33\x32\x2e\x6c\x6f\x61\x64\x00\x01\x09\x66\x33\x32\x2e\x73\x74\x6f\x72\x65\x00\x02\x09\x69\x33\x32\x2e\x73\x74\x6f\x72\x65\x00\x03\x05\x72\x65\x73\x65\x74\x00\x04\x0a\xca\x80\x80\x80\x00\x05\x87\x80\x80\x80\x00\x00\x41\x00\x2a\x02\x00\x0b\x87\x80\x80\x80\x00\x00\x41\x00\x28\x02\x00\x0b\x8c\x80\x80\x80\x00\x00\x41\x00\x43\x00\x00\xa0\x7f\x38\x02\x00\x0b\x8d\x80\x80\x80\x00\x00\x41\x00\x41\x80\x80\x80\xfd\x07\x36\x02\x00\x0b\x89\x80\x80\x80\x00\x00\x41\x00\x41\x00\x36\x02\x00\x0b\x0b\x8a\x80\x80\x80\x00\x01\x00\x41\x00\x0b\x04\x00\x00\xa0\x7f");

Просмотреть файл

@ -1,3 +1,5 @@
// |jit-test| skip-if: !getBuildConfiguration()['x86'] && !getBuildConfiguration()['x64'] && !getBuildConfiguration()['arm64']
// skip arm7 due to bug 1513231
// memory_redundancy.wast:5
let $1 = instance("\x00\x61\x73\x6d\x01\x00\x00\x00\x01\x8c\x80\x80\x80\x00\x03\x60\x00\x00\x60\x00\x01\x7f\x60\x00\x01\x7d\x03\x85\x80\x80\x80\x00\x04\x00\x01\x01\x02\x05\x84\x80\x80\x80\x00\x01\x01\x01\x01\x07\xd0\x80\x80\x80\x00\x04\x0f\x7a\x65\x72\x6f\x5f\x65\x76\x65\x72\x79\x74\x68\x69\x6e\x67\x00\x00\x12\x74\x65\x73\x74\x5f\x73\x74\x6f\x72\x65\x5f\x74\x6f\x5f\x6c\x6f\x61\x64\x00\x01\x13\x74\x65\x73\x74\x5f\x72\x65\x64\x75\x6e\x64\x61\x6e\x74\x5f\x6c\x6f\x61\x64\x00\x02\x0f\x74\x65\x73\x74\x5f\x64\x65\x61\x64\x5f\x73\x74\x6f\x72\x65\x00\x03\x0a\x8c\x81\x80\x80\x00\x04\x9e\x80\x80\x80\x00\x00\x41\x00\x41\x00\x36\x02\x00\x41\x04\x41\x00\x36\x02\x00\x41\x08\x41\x00\x36\x02\x00\x41\x0c\x41\x00\x36\x02\x00\x0b\x98\x80\x80\x80\x00\x00\x41\x08\x41\x00\x36\x02\x00\x41\x05\x43\x00\x00\x00\x80\x38\x02\x00\x41\x08\x28\x02\x00\x0b\xa2\x80\x80\x80\x00\x01\x02\x7f\x41\x08\x28\x02\x00\x21\x00\x41\x05\x41\x80\x80\x80\x80\x78\x36\x02\x00\x41\x08\x28\x02\x00\x21\x01\x20\x00\x20\x01\x6a\x0b\x9f\x80\x80\x80\x00\x01\x01\x7d\x41\x08\x41\xa3\xc6\x8c\x99\x02\x36\x02\x00\x41\x0b\x2a\x02\x00\x21\x00\x41\x08\x41\x00\x36\x02\x00\x20\x00\x0b");

Просмотреть файл

@ -512,6 +512,11 @@ def check_output(out, err, rc, timed_out, test, options):
if rc == 1 and ("Hit MOZ_CRASH" in err or "Assertion failure:" in err):
return True
# When running jittests on Android, SEGV results in a return code
# of 128+11=139.
if rc == 139:
return True
if rc != test.expect_status:
# Tests which expect a timeout check for exit code 6.
# Sometimes 0 is returned on Windows for unknown reasons.

Просмотреть файл

@ -1828,6 +1828,15 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1,
}
ComputedStyle* sc1 = aFrame1->Style();
ComputedStyle* sc2 = aFrame2->Style();
// Any difference in writing-mode/directionality inhibits shaping across
// the boundary.
WritingMode wm(sc1);
if (wm != WritingMode(sc2)) {
return false;
}
const nsStyleText* textStyle1 = sc1->StyleText();
// If the first frame ends in a preformatted newline, then we end the textrun
// here. This avoids creating giant textruns for an entire plain text file.
@ -1835,8 +1844,78 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1,
// even if it has newlines in it, so typically we won't see trailing newlines
// until after reflow has broken up the frame into one (or more) frames per
// line. That's OK though.
if (textStyle1->NewlineIsSignificant(aFrame1) && HasTerminalNewline(aFrame1))
if (textStyle1->NewlineIsSignificant(aFrame1) &&
HasTerminalNewline(aFrame1)) {
return false;
}
if (aFrame1->GetParent()->GetContent() !=
aFrame2->GetParent()->GetContent()) {
// Does aFrame, or any ancestor between it and aAncestor, have a property
// that should inhibit cross-element-boundary shaping on aSide?
auto PreventCrossBoundaryShaping = [](const nsIFrame* aFrame,
const nsIFrame* aAncestor,
Side aSide) {
while (aFrame != aAncestor) {
ComputedStyle* ctx = aFrame->Style();
// According to https://drafts.csswg.org/css-text/#boundary-shaping:
//
// Text shaping must be broken at inline box boundaries when any of the
// following are true for any box whose boundary separates the two
// typographic character units:
//
// 1. Any of margin/border/padding separating the two typographic
// character units in the inline axis is non-zero.
const nsStyleCoord& margin = ctx->StyleMargin()->mMargin.Get(aSide);
if (!margin.ConvertsToLength() || margin.ToLength() != 0) {
return true;
}
const nsStyleCoord& padding = ctx->StylePadding()->mPadding.Get(aSide);
if (!padding.ConvertsToLength() || padding.ToLength() != 0) {
return true;
}
if (ctx->StyleBorder()->GetComputedBorderWidth(aSide) != 0) {
return true;
}
// 2. vertical-align is not baseline.
const nsStyleCoord& coord = ctx->StyleDisplay()->mVerticalAlign;
if (coord.GetUnit() != eStyleUnit_Enumerated ||
coord.GetIntValue() != NS_STYLE_VERTICAL_ALIGN_BASELINE) {
return true;
}
// 3. The boundary is a bidi isolation boundary.
const uint8_t unicodeBidi = ctx->StyleTextReset()->mUnicodeBidi;
if (unicodeBidi == NS_STYLE_UNICODE_BIDI_ISOLATE ||
unicodeBidi == NS_STYLE_UNICODE_BIDI_ISOLATE_OVERRIDE) {
return true;
}
aFrame = aFrame->GetParent();
}
return false;
};
const nsIFrame* ancestor =
nsLayoutUtils::FindNearestCommonAncestorFrame(aFrame1, aFrame2);
MOZ_ASSERT(ancestor);
// Map inline-end and inline-start to physical sides for checking presence
// of non-zero margin/border/padding.
Side side1 = wm.PhysicalSide(eLogicalSideIEnd);
Side side2 = wm.PhysicalSide(eLogicalSideIStart);
// If the frames have an embedding level that is opposite to the writing
// mode, we need to swap which sides we're checking.
if (IS_LEVEL_RTL(aFrame1->GetEmbeddingLevel()) == wm.IsBidiLTR()) {
Swap(side1, side2);
}
if (PreventCrossBoundaryShaping(aFrame1, ancestor, side1) ||
PreventCrossBoundaryShaping(aFrame2, ancestor, side2)) {
return false;
}
}
if (aFrame1->GetContent() == aFrame2->GetContent() &&
aFrame1->GetNextInFlow() != aFrame2) {
@ -1849,7 +1928,10 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1,
return false;
}
ComputedStyle* sc2 = aFrame2->Style();
if (sc1 == sc2) {
return true;
}
const nsStyleText* textStyle2 = sc2->StyleText();
if (sc1 == sc2) return true;

Просмотреть файл

@ -7,6 +7,8 @@
div {
display: inline-block;
border: 1px solid black;
font-kerning: none; /* disable kerning, because in the reference file
it might occur across <span> boundaries */
}
span {
white-space: nowrap;

Просмотреть файл

@ -7,6 +7,8 @@
div {
display: inline-block;
border: 1px solid black;
font-kerning: none; /* disable kerning, because in the reference file
it might occur across <span> boundaries */
}
</style>
</head>

Просмотреть файл

@ -857,6 +857,7 @@ class ADBDevice(ADBCommand):
"""Get the exitcode from the last line of the file_obj for shell
commands.
"""
re_returncode = re.compile(r'adb_returncode=([0-9]+)')
file_obj.seek(0, os.SEEK_END)
line = ''
@ -874,13 +875,28 @@ class ADBDevice(ADBCommand):
break
offset += 1
match = re.match(r'rc=([0-9]+)', line)
match = re_returncode.match(line)
if match:
exitcode = int(match.group(1))
# Set the position in the file to the position of the
# adb_returncode and truncate it from the output.
file_obj.seek(-1, os.SEEK_CUR)
file_obj.truncate()
else:
exitcode = None
# We may have a situation where the adb_returncode= is not
# at the end of the output. This happens at least in the
# failure jit-tests on arm. To work around this
# possibility, we can search the entire output for the
# appropriate match.
file_obj.seek(0, os.SEEK_SET)
for line in file_obj:
match = re_returncode.search(line)
if match:
exitcode = int(match.group(1))
break
# Reset the position in the file to the end.
file_obj.seek(0, os.SEEK_END)
return exitcode
@ -1308,7 +1324,7 @@ class ADBDevice(ADBCommand):
envstr = '&& '.join(map(lambda x: 'export %s=%s' %
(x[0], x[1]), env.iteritems()))
cmd = envstr + "&& " + cmd
cmd += "; echo rc=$?"
cmd += "; echo adb_returncode=$?"
args = [self._adb_path]
if self._adb_host:

Просмотреть файл

@ -7,10 +7,14 @@ from __future__ import absolute_import
import json
import os
import posixpath
import shutil
import subprocess
import sys
import tempfile
import time
import mozcrash
import mozinfo
from mozdevice import ADBDevice
@ -131,7 +135,8 @@ class Raptor(object):
}
runner_cls = runners[app]
self.runner = runner_cls(
binary, profile=self.profile, process_args=process_args)
binary, profile=self.profile, process_args=process_args,
symbols_path=self.config['symbols_path'])
self.log.info("raptor config: %s" % str(self.config))
@ -386,14 +391,9 @@ class Raptor(object):
break
finally:
if self.config['app'] == "geckoview":
# TODO: if on geckoview is there some cleanup here i.e. check for crashes?
if self.config['power_test']:
finish_geckoview_power_test(self)
else:
try:
self.runner.check_for_crashes()
except NotImplementedError: # not implemented for Chrome
pass
self.check_for_crashes()
if self.playback is not None:
self.playback.stop()
@ -455,6 +455,31 @@ class Raptor(object):
def get_page_timeout_list(self):
return self.results_handler.page_timeout_list
def check_for_crashes(self):
if self.config['app'] == "geckoview":
logcat = self.device.get_logcat()
if logcat:
if mozcrash.check_for_java_exception(logcat, "raptor"):
return
try:
dump_dir = tempfile.mkdtemp()
remote_dir = posixpath.join(self.device_profile, 'minidumps')
if not self.device.is_dir(remote_dir):
self.log.error("No crash directory (%s) found on remote device" % remote_dir)
return
self.device.pull(remote_dir, dump_dir)
mozcrash.log_crashes(self.log, dump_dir, self.config['symbols_path'])
finally:
try:
shutil.rmtree(dump_dir)
except Exception:
self.log.warning("unable to remove directory: %s" % dump_dir)
else:
try:
self.runner.check_for_crashes()
except NotImplementedError: # not implemented for Chrome
pass
def clean_up(self):
self.control_server.stop()
if self.config['app'] != "geckoview":

Просмотреть файл

@ -0,0 +1,3 @@
[boundary-shaping-004.html]
expected:
if webrender and (os == "win"): FAIL

Просмотреть файл

@ -0,0 +1,3 @@
[boundary-shaping-005.html]
expected:
if webrender and (os == "win"): FAIL

Просмотреть файл

@ -0,0 +1,4 @@
[boundary-shaping-010.html]
expected:
if (os == "mac"): FAIL
if (os == "android"): FAIL

Просмотреть файл

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must not be broken across inline box boundaries when there is no change in formatting</title>
<link rel=match href="reference/boundary-shaping-001.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
/* initial values for these properties should not interrupt shaping */
vertical-align: initial;
padding: initial;
margin: initial;
border: initial;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when 'vertical-align' is not 'baseline'</title>
<link rel=match href="reference/boundary-shaping-002.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
vertical-align: 0; /* distinct from 'baseline', should break shaping */
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when padding is non-zero</title>
<link rel=match href="reference/boundary-shaping-003.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
padding-left: 10px;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when margin is non-zero</title>
<link rel=match href="reference/boundary-shaping-004.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
margin-right: 10px;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when border is non-zero</title>
<link rel=match href="reference/boundary-shaping-005.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
border-right: 10px solid transparent;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when 'vertical-align' is not 'baseline'</title>
<link rel=match href="reference/boundary-shaping-006.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
vertical-align: super;
}
</style>
</head>
<body>
of<span><span><span class=a><span><span>f</span></span></span></span></span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when padding or margin is non-zero</title>
<link rel=match href="reference/boundary-shaping-007.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
padding-left: 10px;
}
.b {
margin-right: 10px;
}
</style>
</head>
<body>
of<span><span class=a><span><span class=b><span>f</span></span></span></span></span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries at a bidi isolation boundary</title>
<link rel=match href="reference/boundary-shaping-008.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
@font-face {
font-family: test;
src: url(resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
unicode-bidi: isolate; /* bidi isolation boundaries should break shaping */
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must be broken across inline box boundaries when padding or margin is non-zero</title>
<link rel=match href="reference/boundary-shaping-009.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
body {
font: 36px sans-serif;
}
div {
text-align: center;
}
.a {
padding-right: 10px;
}
.b {
margin-left: 10px;
}
.c {
color: red;
padding-left: 10px;
}
.d {
color: red;
margin-right: 10px;
}
</style>
</head>
<body>
<div dir=ltr>
السلام<span class=a>عليكم</span>
</div>
<div dir=ltr>
<span class=b>السلام</span>عليكم
</div>
<div dir=rtl>
السلام<span class=a>عليكم</span>
</div>
<div dir=rtl>
<span class=b>السلام</span>عليكم
</div>
<div dir=ltr>
السلام<span class=c>عليكم</span>
</div>
<div dir=ltr>
<span class=d>السلام</span>عليكم
</div>
<div dir=rtl>
السلام<span class=c>عليكم</span>
</div>
<div dir=rtl>
<span class=d>السلام</span>عليكم
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Text shaping must not be broken across inline box boundaries when there is no change in formatting</title>
<link rel=match href="reference/boundary-shaping-010.ref.html">
<link rel=help href="https://drafts.csswg.org/css-text/#boundary-shaping">
<style>
body {
font: 36px sans-serif;
}
div {
text-align: center;
}
</style>
</head>
<body>
<div dir=rtl>
ال<span>سل</span>ام
</body>
</html>

Просмотреть файл

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
</style>
</head>
<body>
office
</body>
</html>

Просмотреть файл

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
display: inline-block;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
display: inline-block;
width: 10px;
}
</style>
</head>
<body>
of<span class=a>&nbsp;</span>fice
</body>
</html>

Просмотреть файл

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
display: inline-block;
width: 10px;
}
</style>
</head>
<body>
off<span class=a>&nbsp;</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
display: inline-block;
width: 10px;
}
</style>
</head>
<body>
off<span class=a>&nbsp;</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
vertical-align: super;
display: inline-block;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
padding-left: 10px;
margin-right: 10px;
display: inline-block;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: test;
src: url(../resources/LinLibertine_Re-4.7.5.woff);
}
body {
font: 36px test; /* use a font that includes ligatures for "fi" etc */
}
.a {
display: inline-block;
}
</style>
</head>
<body>
of<span class=a>f</span>ice
</body>
</html>

Просмотреть файл

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
body {
font: 36px sans-serif;
}
div {
text-align: center;
}
.a {
display: inline-block;
width: 10px;
}
.c1 {
padding-left: 10px;
}
.c {
color: red;
}
.d1 {
margin-right: 10px;
}
.d {
color: red;
}
</style>
</head>
<body>
<div dir=ltr>
السلام<span class=a>&nbsp;</span>عليكم
</div>
<div dir=ltr>
السلام<span class=a>&nbsp;</span>عليكم
</div>
<div dir=rtl>
السلام<span class=a>&nbsp;</span>عليكم
</div>
<div dir=rtl>
السلام<span class=a>&nbsp;</span>عليكم
</div>
<div dir=ltr>
<span class=c1>السلام<span class=c>عليكم</span></span>
</div>
<div dir=ltr>
<span class=d1><span class=d>السلام</span>عليكم</span>
</div>
<div dir=rtl>
<span class=c1>السلام<span class=c>عليكم</span></span>
</div>
<div dir=rtl>
<span class=d1><span class=d>السلام</span>عليكم</span>
</div>
</body>
</html>

Просмотреть файл

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<style>
body {
font: 36px sans-serif;
}
div {
text-align: center;
}
</style>
</head>
<body>
<div dir=rtl>
السلام
</body>
</html>

Двоичный файл не отображается.