Merge autoland to mozilla-central. a=merge

This commit is contained in:
Sebastian Hengst 2021-11-01 22:58:34 +01:00
Родитель 57b1dddd26 5ff974a055
Коммит d21e359bd2
138 изменённых файлов: 7931 добавлений и 7204 удалений

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

@ -567,7 +567,6 @@ module.exports = {
"dom/push/test/xpcshell/head.js",
"dom/push/test/xpcshell/test_broadcast_success.js",
"dom/push/test/xpcshell/test_crypto.js",
"security/manager/ssl/RemoteSecuritySettings.jsm",
"services/common/tests/unit/head_helpers.js",
"services/common/tests/unit/test_uptake_telemetry.js",
"services/fxaccounts/tests/xpcshell/test_accounts.js",
@ -585,10 +584,6 @@ module.exports = {
"toolkit/components/enterprisepolicies/tests/EnterprisePolicyTesting.jsm",
"toolkit/components/featuregates/test/unit/test_FeatureGate.js",
"toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js",
"toolkit/components/osfile/modules/osfile_async_front.jsm",
"toolkit/components/osfile/modules/osfile_native.jsm",
"toolkit/components/osfile/tests/xpcshell/test_osfile_kill.js",
"toolkit/components/processsingleton/MainProcessSingleton.jsm",
"toolkit/modules/subprocess/test/xpcshell/test_subprocess.js",
"toolkit/modules/tests/xpcshell/test_GMPInstallManager.js",
"toolkit/mozapps/extensions/internal/AddonTestUtils.jsm",
@ -609,7 +604,7 @@ module.exports = {
"toolkit/mozapps/extensions/test/xpcshell/test_XPIStates.js",
],
rules: {
"mozilla/reject-chromeutils-import-params": "off",
"mozilla/reject-chromeutils-import-params": "warn",
},
},
],

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

@ -537,11 +537,6 @@
/* Selected tab */
.tab-background {
border: 1px none transparent;
background-clip: padding-box;
}
.tab-background {
border-radius: var(--tab-border-radius);
margin-block: var(--tab-block-margin);
@ -552,28 +547,27 @@
}
#TabsToolbar:not([brighttext]) #tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([visuallyselected=true], [multiselected]) > .tab-stack > .tab-background {
box-shadow: 0 0 1px var(--tab-line-color, rgba(128,128,142,0.9)),
0 0 4px rgba(128,128,142,0.5);
border: 1px solid var(--tab-line-color, rgba(128,128,142,0.9));
box-shadow: 0 0 4px rgba(128,128,142,0.5);
}
#TabsToolbar[brighttext] #tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([visuallyselected=true], [multiselected]) > .tab-stack > .tab-background:-moz-lwtheme {
box-shadow: 0 0 1px var(--tab-line-color, rgba(128,128,142,0.9));
border: 1px solid var(--tab-line-color, rgba(128,128,142,0.9));
}
/* For themes outside of Light and Dark (which are curated by Mozilla), show a thicker border
around the tab to help themes that are dependent on tab_line to show the selected tab. */
:root:not([lwtheme-mozlightdark]) #TabsToolbar:not([brighttext]) #tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([visuallyselected=true], [multiselected]) > .tab-stack > .tab-background:-moz-lwtheme {
box-shadow: 0 0 0 1px var(--tab-line-color, var(--tabs-border-color, rgba(128,128,142,0.9))),
0 0 4px rgba(128,128,142,0.5);
border: 1px solid var(--tab-line-color, rgba(128,128,142,0.9));
box-shadow: 0 0 4px rgba(128,128,142,0.5);
}
:root:not([lwtheme-mozlightdark]) #TabsToolbar[brighttext] #tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([visuallyselected=true], [multiselected]) > .tab-stack > .tab-background:-moz-lwtheme {
box-shadow: 0 0 0 1px var(--tab-line-color, var(--tabs-border-color, rgba(128,128,142,0.9)));
border: 1px solid var(--tab-line-color, var(--tabs-border-color, rgba(128,128,142,0.9)));
}
.tab-background[multiselected=true],
.tab-background[selected=true] {
border-top-color: var(--tabs-border-color);
background-color: var(--tab-selected-bgcolor, var(--toolbar-bgcolor));
background-image: var(--toolbar-bgimage);
background-repeat: repeat-x;

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

@ -20,10 +20,16 @@ add_task(async function() {
toolId: "inspector",
});
// Normal reload doesn't have VALIDATE_ALWAYS flag applied,
// thus the expectedHeader is empty.
await testReload("toolbox.reload.key", toolbox, "");
await testReload("toolbox.reload2.key", toolbox, "");
// The VALIDATE_ALWAYS flag isnt going to be applied when we only revalidate
// the top level document, thus the expectedHeader is empty.
const expectedHeader = Services.prefs.getBoolPref(
"browser.soft_reload.only_force_validate_top_level_document",
false
)
? ""
: "max-age=0";
await testReload("toolbox.reload.key", toolbox, expectedHeader);
await testReload("toolbox.reload2.key", toolbox, expectedHeader);
await testReload("toolbox.forceReload.key", toolbox, "no-cache");
await testReload("toolbox.forceReload2.key", toolbox, "no-cache");
});

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

@ -20,7 +20,7 @@ add_task(async function() {
store.dispatch(Actions.batchEnable(false));
// Execute requests.
await performRequests(monitor, tab, 3);
await performRequests(monitor, tab, 12);
let wait = waitForDOM(document, "#headers-panel .url-preview", 1);
EventUtils.sendMouseEvent(
@ -88,7 +88,7 @@ add_task(async function() {
store.dispatch(Actions.batchEnable(false));
const netWorkEvent = waitForNetworkEvents(monitor, 2);
const netWorkEvent = waitForNetworkEvents(monitor, 3);
await performRequestsInContent([
{ url: "sjs_content-type-test-server.sjs?a=3&a=45&a=60" },
{ url: "sjs_content-type-test-server.sjs?x=5&a=3&a=4&a=3&b=3" },

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

@ -5441,6 +5441,23 @@ exports.CSS_PROPERTIES = {
"unset"
]
},
"color-scheme": {
"isInherited": true,
"subproperties": [
"color-scheme"
],
"supports": [],
"values": [
"dark",
"inherit",
"initial",
"light",
"normal",
"only",
"revert",
"unset"
]
},
"column-count": {
"isInherited": false,
"subproperties": [

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

@ -44,6 +44,7 @@ The plugin implements the following rules:
eslint-plugin-mozilla/reject-chromeutils-import-params
eslint-plugin-mozilla/reject-importGlobalProperties
eslint-plugin-mozilla/reject-osfile
eslint-plugin-mozilla/reject-scriptableunicodeconverter
eslint-plugin-mozilla/reject-some-requires
eslint-plugin-mozilla/use-cc-etc
eslint-plugin-mozilla/use-chromeutils-import

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

@ -0,0 +1,13 @@
reject-scriptableunicodeconverter
================================================
Rejects calls into ``Ci.nsIScriptableUnicodeConverter``. This is configured as a warning.
You should use |TextEncoder|_ or |TextDecoder|_ for new code.
If modifying old code, please consider swapping it in if possible; if this is tricky please ensure
a bug is on file.
.. |TextEncoder| replace:: ``TextEncoder``
.. _TextEncoder: https://searchfox.org/mozilla-central/source/dom/webidl/TextEncoder.webidl
.. |TextDecoder| replace:: ``TextDecoder``
.. _TextDecoder: https://searchfox.org/mozilla-central/source/dom/webidl/TextDecoder.webidl

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

@ -2869,8 +2869,13 @@ void BrowsingContext::DidSet(FieldIndex<IDX_IsInBFCache>) {
const bool isInBFCache = GetIsInBFCache();
if (!isInBFCache) {
PreOrderWalk(
[&](BrowsingContext* aContext) { aContext->mIsInBFCache = false; });
PreOrderWalk([&](BrowsingContext* aContext) {
aContext->mIsInBFCache = false;
nsCOMPtr<nsIDocShell> shell = aContext->GetDocShell();
if (shell) {
nsDocShell::Cast(shell)->ThawFreezeNonRecursive(true);
}
});
}
if (isInBFCache && XRE_IsContentProcess() && mDocShell) {
@ -2880,13 +2885,16 @@ void BrowsingContext::DidSet(FieldIndex<IDX_IsInBFCache>) {
PreOrderWalk([&](BrowsingContext* aContext) {
nsCOMPtr<nsIDocShell> shell = aContext->GetDocShell();
if (shell) {
static_cast<nsDocShell*>(shell.get())
->FirePageHideShowNonRecursive(!isInBFCache);
nsDocShell::Cast(shell)->FirePageHideShowNonRecursive(!isInBFCache);
}
});
if (isInBFCache) {
PreOrderWalk([&](BrowsingContext* aContext) {
nsCOMPtr<nsIDocShell> shell = aContext->GetDocShell();
if (shell) {
nsDocShell::Cast(shell)->ThawFreezeNonRecursive(false);
}
aContext->mIsInBFCache = true;
Document* doc = aContext->GetDocument();
if (doc) {

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

@ -663,11 +663,12 @@ function checkAndFixPublicSuffix(info) {
// Quick bailouts for most common cases, according to Alexa Top 1 million.
if (
asciiHost.endsWith(".com") ||
asciiHost.endsWith(".net") ||
asciiHost.endsWith(".org") ||
asciiHost.endsWith(".ru") ||
asciiHost.endsWith(".de")
/^\w/.test(asciiHost) &&
(asciiHost.endsWith(".com") ||
asciiHost.endsWith(".net") ||
asciiHost.endsWith(".org") ||
asciiHost.endsWith(".ru") ||
asciiHost.endsWith(".de"))
) {
return {
suffix: asciiHost.substring(asciiHost.lastIndexOf(".") + 1),

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

@ -1164,6 +1164,24 @@ void nsDocShell::FirePageHideNotificationInternal(
}
}
void nsDocShell::ThawFreezeNonRecursive(bool aThaw) {
MOZ_ASSERT(mozilla::BFCacheInParent());
if (!mScriptGlobal) {
return;
}
RefPtr<nsGlobalWindowInner> inner =
mScriptGlobal->GetCurrentInnerWindowInternal();
if (inner) {
if (aThaw) {
inner->Thaw(false);
} else {
inner->Freeze(false);
}
}
}
void nsDocShell::FirePageHideShowNonRecursive(bool aShow) {
MOZ_ASSERT(mozilla::BFCacheInParent());
@ -1199,10 +1217,6 @@ void nsDocShell::FirePageHideShowNonRecursive(bool aShow) {
}
}
if (inner) {
inner->Thaw(false);
}
nsCOMPtr<nsIChannel> channel = doc->GetChannel();
if (channel) {
SetLoadType(LOAD_HISTORY);
@ -1240,9 +1254,6 @@ void nsDocShell::FirePageHideShowNonRecursive(bool aShow) {
mFiredUnloadEvent = true;
contentViewer->PageHide(false);
if (mScriptGlobal && mScriptGlobal->GetCurrentInnerWindowInternal()) {
mScriptGlobal->GetCurrentInnerWindowInternal()->Freeze(false);
}
RefPtr<PresShell> presShell = GetPresShell();
if (presShell) {
presShell->Freeze(false);

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

@ -946,6 +946,7 @@ class nsDocShell final : public nsDocLoader,
void FirePageHideNotificationInternal(bool aIsUnload,
bool aSkipCheckingDynEntries);
void ThawFreezeNonRecursive(bool aThaw);
void FirePageHideShowNonRecursive(bool aShow);
nsresult Dispatch(mozilla::TaskCategory aCategory,

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

@ -0,0 +1,26 @@
<html>
<head>
<script>
var bc;
window.onpageshow = function(pageshow) {
bc = new BroadcastChannel("bug1583110");
bc.onmessage = function(event) {
bc.close();
if (event.data == "loadnext") {
location.search = "?nextpage";
} else if (event.data == "back") {
history.back();
}
}
bc.postMessage({type: "pageshow", persisted: pageshow.persisted });
if (pageshow.persisted) {
document.body.appendChild(document.createElement("iframe"));
bc.close();
window.close();
}
}
</script>
</head>
<body>
</body>
</html>

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

@ -93,6 +93,8 @@ support-files =
[test_beforeunload_and_bfcache.html]
support-files = file_beforeunload_and_bfcache.html
[test_bug13871.html]
[test_bug1583110.html]
support-files = file_bug1583110.html
[test_bug1706090.html]
support-files = file_bug1706090.html
skip-if = fission # The test is currently for the old bfcache implementation

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

@ -0,0 +1,36 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>test bug 1583110</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
<script>
SimpleTest.waitForExplicitFinish();
var bc = new BroadcastChannel("bug1583110");
var pageshowCount = 0;
bc.onmessage = function(event) {
ok(event.data.type == "pageshow");
++pageshowCount;
if (pageshowCount == 1) {
bc.postMessage("loadnext");
} else if (pageshowCount == 2) {
bc.postMessage("back");
} else {
ok(event.data.persisted, "Should have persisted the first page");
bc.close();
SimpleTest.finish();
}
}
function test() {
window.open("file_bug1583110.html", "", "noopener");
}
</script>
</head>
<body onload="test()">
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test"></pre>
</body>
</html>

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

@ -508,6 +508,14 @@ var testcases = [
input: "?'.com",
keywordLookup: true,
},
{
input: ".com",
keywordLookup: true,
affectedByDNSForSingleWordHosts: true,
fixedURI: "http://.com/",
alternateURI: "https://www.com/",
protocolChange: true,
},
{
input: "' ?.com",
keywordLookup: true,

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

@ -627,7 +627,7 @@ class JSStreamConsumer final : public nsIInputStreamCallback,
}
MOZ_RELEASE_ASSERT(ret == Z_STREAM_END);
dstBytes.shrinkTo(zstream.next_out - compressBegin);
dstBytes.shrinkTo(zstream.next_out - dstBytes.begin());
NS_DispatchToMainThread(new StoreOptimizedEncodingRunnable(
std::move(mCache), std::move(dstBytes)));

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

@ -3906,6 +3906,10 @@ void MediaDecoderStateMachine::SuspendMediaSink() {
AUTO_PROFILER_LABEL("MediaDecoderStateMachine::SuspendMediaSink",
MEDIA_PLAYBACK);
MOZ_ASSERT(OnTaskQueue());
if (mIsMediaSinkSuspended) {
return;
}
LOG("SuspendMediaSink");
mIsMediaSinkSuspended = true;
StopMediaSink();
mMediaSink->Shutdown();
@ -3925,6 +3929,11 @@ void MediaDecoderStateMachine::ResumeMediaSink() {
AUTO_PROFILER_LABEL("MediaDecoderStateMachine::ResumeMediaSink",
MEDIA_PLAYBACK);
MOZ_ASSERT(OnTaskQueue());
if (!mIsMediaSinkSuspended) {
return;
}
LOG("ResumeMediaSink");
MOZ_ASSERT_IF(mMediaSink, !mMediaSink->IsStarted());
mMediaSink = CreateMediaSink();
mIsMediaSinkSuspended = false;
MaybeStartPlayback();

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

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<script>
window.addEventListener("load", async () => {
const object = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")
const video = document.createElementNS("http://www.w3.org/1999/xhtml", "video")
document.documentElement.appendChild(video)
video.setAttribute("src", "1734008.webm")
video.mozCaptureStream()
const xhr = new XMLHttpRequest()
xhr.open("POST", "FOOBAR", false)
xhr.send()
const document_0 = new Document()
const adopted = document_0.adoptNode(document.documentElement)
object.insertBefore(adopted, object.childNodes[(216679474 % object.childNodes.length)])
try { await video.play() } catch (e) {}
setTimeout("location.reload()", 500)
})
</script>
</head>
</html>

Двоичные данные
dom/media/test/crashtests/1734008.webm Normal file

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

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

@ -148,3 +148,4 @@ load 1697521.html
load 1708790.html
skip-if(cocoaWidget) load 1709130.html # video failed decoding on MacOS, 1709684
skip-if(appleSilicon) load 1517199.html
load 1734008.html

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

@ -23,6 +23,8 @@ EXTRA_DIST = \
subprojects/freetype2.wrap \
subprojects/glib.wrap \
subprojects/google-benchmark.wrap \
subprojects/ragel.wrap \
subprojects/packagefiles/ragel/meson.build \
subprojects/ttf-parser.wrap \
perf/meson.build \
perf/perf-draw.hh \

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

@ -1,3 +1,54 @@
Overview of changes leading to 3.0.0
Friday, September 17, 2021
====================================
- Unicode 14.0 support (David Corbett).
- The hb-subset API and the harfbuzz-subset library's ABI are now declared
stable. The harfbuzz-subset library would not have been possible without the
work of Garret Rieger and Qunxin Liu from Google Fonts, and the earlier work
of Michiharu Ariza from Adobe.
- The hb-style API is now stable and no longer experimental.
- New API:
+hb_style_tag_t
+hb_style_get_value()
+hb_subset_input_t
+hb_subset_flags_t
+hb_subset_sets_t
+hb_subset_input_create_or_fail()
+hb_subset_input_reference()
+hb_subset_input_destroy()
+hb_subset_input_set_user_data()
+hb_subset_input_get_user_data()
+hb_subset_input_unicode_set()
+hb_subset_input_glyph_set()
+hb_subset_input_set()
+hb_subset_input_get_flags()
+hb_subset_input_set_flags()
+hb_subset_or_fail()
- Removed old unstable harfbuzz-subset API:
-hb_subset_input_nameid_set()
-hb_subset_input_namelangid_set()
-hb_subset_input_layout_features_set()
-hb_subset_input_no_subset_tables_set()
-hb_subset_input_drop_tables_set()
-hb_subset_input_set_drop_hints()
-hb_subset_input_get_drop_hints()
-hb_subset_input_set_desubroutinize()
-hb_subset_input_get_desubroutinize()
-hb_subset_input_set_retain_gids()
-hb_subset_input_get_retain_gids()
-hb_subset_input_set_name_legacy()
-hb_subset_input_get_name_legacy()
-hb_subset_input_set_overlaps_flag()
-hb_subset_input_get_overlaps_flag()
-hb_subset_input_set_notdef_outline()
-hb_subset_input_get_notdef_outline()
-hb_subset_input_set_no_prune_unicode_ranges()
-hb_subset_input_get_no_prune_unicode_ranges()
-hb_subset()
Overview of changes leading to 2.9.1
Tuesday, September 7, 2021
====================================
@ -8,7 +59,7 @@ Tuesday, September 7, 2021
- hb_buffer_append() now handles the pre- and post-context which previously
were left unchanged in the destination buffer.
- hb-view / hb-shape now accept following new arguments:
o --unicodes: takes a list of hex numbers that represent Unicode
o --unicodes-before/after: takes a list of hex numbers that represent Unicode
codepoints.
- Undeprecated API:
hb_set_invert()

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

@ -1,7 +1,7 @@
This directory contains the HarfBuzz source from the upstream repo:
https://github.com/harfbuzz/harfbuzz
Current version: 2.9.1 [commit 505df5abf8032f3a2295ded417dca9bfb14ea7b8]
Current version: 3.0.0 [commit 9c387e20d65a7a366ac270d789f6ad266014c9e0]
!!!Please Note!!!
Because LLVM added in D100581 support for -Wunused-but-set-parameter and -Wunused-but-set-variable

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

@ -1,6 +1,6 @@
AC_PREREQ([2.64])
AC_INIT([HarfBuzz],
[2.9.1],
[3.0.0],
[https://github.com/harfbuzz/harfbuzz/issues/new],
[harfbuzz],
[http://harfbuzz.org/])

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

@ -36,7 +36,6 @@ hb_draw_funcs_set_cubic_to_func
hb_draw_funcs_set_line_to_func
hb_draw_funcs_set_move_to_func
hb_draw_funcs_set_quadratic_to_func
hb_style_get_value
hb_font_get_var_coords_design""".splitlines ()
symbols = [x for x in symbols if x not in experimental_symbols]
symbols = "\n".join (symbols)

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

@ -4,16 +4,16 @@
import os, os.path, sys, subprocess, shutil
ragel = os.getenv ('RAGEL', shutil.which ('ragel'))
ragel = sys.argv[1]
if not ragel:
sys.exit ('You have to install ragel if you are going to develop HarfBuzz itself')
if len (sys.argv) < 4:
sys.exit (__doc__)
OUTPUT = sys.argv[1]
CURRENT_SOURCE_DIR = sys.argv[2]
INPUT = sys.argv[3]
OUTPUT = sys.argv[2]
CURRENT_SOURCE_DIR = sys.argv[3]
INPUT = sys.argv[4]
outdir = os.path.dirname (OUTPUT)
shutil.copy (INPUT, outdir)

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -280,8 +280,7 @@ struct hb_language_item_t {
static hb_atomic_ptr_t <hb_language_item_t> langs;
#if HB_USE_ATEXIT
static void
static inline void
free_langs ()
{
retry:
@ -296,7 +295,6 @@ retry:
first_lang = next;
}
}
#endif
static hb_language_item_t *
lang_find_or_insert (const char *key)
@ -327,10 +325,8 @@ retry:
goto retry;
}
#if HB_USE_ATEXIT
if (!first_lang)
atexit (free_langs); /* First person registers atexit() callback. */
#endif
hb_atexit (free_langs); /* First person registers atexit() callback. */
return lang;
}
@ -599,6 +595,9 @@ hb_script_get_horizontal_direction (hb_script_t script)
case HB_SCRIPT_CHORASMIAN:
case HB_SCRIPT_YEZIDI:
/* Unicode-14.0 additions */
case HB_SCRIPT_OLD_UYGHUR:
return HB_DIRECTION_RTL;

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

@ -476,6 +476,11 @@ hb_language_get_default (void);
* @HB_SCRIPT_DIVES_AKURU: `Diak`, Since: 2.6.7
* @HB_SCRIPT_KHITAN_SMALL_SCRIPT: `Kits`, Since: 2.6.7
* @HB_SCRIPT_YEZIDI: `Yezi`, Since: 2.6.7
* @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: 3.0.0
* @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: 3.0.0
* @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0
* @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0
* @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0
* @HB_SCRIPT_INVALID: No script set
*
* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
@ -683,6 +688,15 @@ typedef enum
HB_SCRIPT_KHITAN_SMALL_SCRIPT = HB_TAG ('K','i','t','s'), /*13.0*/
HB_SCRIPT_YEZIDI = HB_TAG ('Y','e','z','i'), /*13.0*/
/*
* Since 3.0.0
*/
HB_SCRIPT_CYPRO_MINOAN = HB_TAG ('C','p','m','n'), /*14.0*/
HB_SCRIPT_OLD_UYGHUR = HB_TAG ('O','u','g','r'), /*14.0*/
HB_SCRIPT_TANGSA = HB_TAG ('T','n','s','a'), /*14.0*/
HB_SCRIPT_TOTO = HB_TAG ('T','o','t','o'), /*14.0*/
HB_SCRIPT_VITHKUQI = HB_TAG ('V','i','t','h'), /*14.0*/
/* No script set. */
HB_SCRIPT_INVALID = HB_TAG_NONE,

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

@ -561,9 +561,7 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
return true;
}
#if HB_USE_ATEXIT
static void free_static_ft_funcs ();
#endif
static inline void free_static_ft_funcs ();
static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft_font_funcs_lazy_loader_t>
{
@ -591,21 +589,17 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft
hb_font_funcs_make_immutable (funcs);
#if HB_USE_ATEXIT
atexit (free_static_ft_funcs);
#endif
hb_atexit (free_static_ft_funcs);
return funcs;
}
} static_ft_funcs;
#if HB_USE_ATEXIT
static
static inline
void free_static_ft_funcs ()
{
static_ft_funcs.free_instance ();
}
#endif
static hb_font_funcs_t *
_hb_ft_get_font_funcs ()
@ -905,9 +899,7 @@ hb_ft_font_create_referenced (FT_Face ft_face)
return hb_ft_font_create (ft_face, _hb_ft_face_destroy);
}
#if HB_USE_ATEXIT
static void free_static_ft_library ();
#endif
static inline void free_static_ft_library ();
static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<FT_Library>,
hb_ft_library_lazy_loader_t>
@ -918,9 +910,7 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F
if (FT_Init_FreeType (&l))
return nullptr;
#if HB_USE_ATEXIT
atexit (free_static_ft_library);
#endif
hb_atexit (free_static_ft_library);
return l;
}
@ -934,13 +924,11 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F
}
} static_ft_library;
#if HB_USE_ATEXIT
static
static inline
void free_static_ft_library ()
{
static_ft_library.free_instance ();
}
#endif
static FT_Library
get_ft_library ()

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

@ -218,9 +218,7 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
}
#if HB_USE_ATEXIT
static void free_static_glib_funcs ();
#endif
static inline void free_static_glib_funcs ();
static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_glib_unicode_funcs_lazy_loader_t>
{
@ -237,21 +235,17 @@ static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader
hb_unicode_funcs_make_immutable (funcs);
#if HB_USE_ATEXIT
atexit (free_static_glib_funcs);
#endif
hb_atexit (free_static_glib_funcs);
return funcs;
}
} static_glib_funcs;
#if HB_USE_ATEXIT
static
static inline
void free_static_glib_funcs ()
{
static_glib_funcs.free_instance ();
}
#endif
/**
* hb_glib_get_unicode_funcs:

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

@ -233,9 +233,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
}
#if HB_USE_ATEXIT
static void free_static_icu_funcs ();
#endif
static inline void free_static_icu_funcs ();
static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_icu_unicode_funcs_lazy_loader_t>
{
@ -257,21 +255,17 @@ static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_
hb_unicode_funcs_make_immutable (funcs);
#if HB_USE_ATEXIT
atexit (free_static_icu_funcs);
#endif
hb_atexit (free_static_icu_funcs);
return funcs;
}
} static_icu_funcs;
#if HB_USE_ATEXIT
static
static inline
void free_static_icu_funcs ()
{
static_icu_funcs.free_instance ();
}
#endif
/**
* hb_icu_get_unicode_funcs:

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

@ -253,9 +253,7 @@ hb_ot_get_font_v_extents (hb_font_t *font,
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_LINE_GAP, &metrics->line_gap);
}
#if HB_USE_ATEXIT
static void free_static_ot_funcs ();
#endif
static inline void free_static_ot_funcs ();
static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot_font_funcs_lazy_loader_t>
{
@ -281,21 +279,17 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot
hb_font_funcs_make_immutable (funcs);
#if HB_USE_ATEXIT
atexit (free_static_ot_funcs);
#endif
hb_atexit (free_static_ot_funcs);
return funcs;
}
} static_ot_funcs;
#if HB_USE_ATEXIT
static
static inline
void free_static_ot_funcs ()
{
static_ot_funcs.free_instance ();
}
#endif
static hb_font_funcs_t *
_hb_ot_get_font_funcs ()

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

@ -1618,7 +1618,14 @@ struct Rule
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
(inputZ.as_array ((inputCount ? inputCount - 1 : 0)));
for (unsigned i = 0; i < (unsigned) lookupCount; i++)
{
if (!lookup_map->has (lookupRecord[i].lookupListIndex))
{
out->lookupCount--;
continue;
}
c->copy (lookupRecord[i], lookup_map);
}
return_trace (true);
}
@ -2234,7 +2241,14 @@ struct ContextFormat3
const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
for (unsigned i = 0; i < (unsigned) lookupCount; i++)
{
if (!lookup_map->has (lookupRecord[i].lookupListIndex))
{
out->lookupCount--;
continue;
}
c->serializer->copy (lookupRecord[i], lookup_map);
}
return_trace (true);
}
@ -3303,13 +3317,21 @@ struct ChainContextFormat3
return_trace (false);
const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead);
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
hb_set_t lookup_indices;
for (unsigned i = 0; i < (unsigned) lookupRecord.len; i++)
if (lookup_map->has (lookupRecord[i].lookupListIndex))
lookup_indices.add (i);
HBUINT16 lookupCount;
lookupCount = lookupRecord.len;
lookupCount = lookup_indices.get_population ();
if (!c->serializer->copy (lookupCount)) return_trace (false);
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
for (unsigned i = 0; i < (unsigned) lookupCount; i++)
if (!c->serializer->copy (lookupRecord[i], lookup_map)) return_trace (false);
for (unsigned i : lookup_indices.iter ())
{
if (!c->serializer->copy (lookupRecord[i], lookup_map))
return_trace (false);
}
return_trace (true);
}

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

@ -6,10 +6,10 @@
*
* on files with these headers:
*
* # ArabicShaping-13.0.0.txt
* # Date: 2020-01-31, 23:55:00 GMT [KW, RP]
* # Scripts-13.0.0.txt
* # Date: 2020-01-22, 00:07:43 GMT
* # ArabicShaping-14.0.0.txt
* # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
* # Scripts-14.0.0.txt
* # Date: 2021-07-10, 00:35:31 GMT
*/
#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH
@ -29,6 +29,7 @@ has_arabic_joining (hb_script_t script)
case HB_SCRIPT_MANICHAEAN:
case HB_SCRIPT_MONGOLIAN:
case HB_SCRIPT_NKO:
case HB_SCRIPT_OLD_UYGHUR:
case HB_SCRIPT_PHAGS_PA:
case HB_SCRIPT_PSALTER_PAHLAVI:
case HB_SCRIPT_SOGDIAN:

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

@ -6,10 +6,10 @@
*
* on files with these headers:
*
* # ArabicShaping-13.0.0.txt
* # Date: 2020-01-31, 23:55:00 GMT [KW, RP]
* # Blocks-13.0.0.txt
* # Date: 2019-07-10, 19:06:00 GMT [KW]
* # ArabicShaping-14.0.0.txt
* # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
* # Blocks-14.0.0.txt
* # Date: 2021-01-22, 23:29:00 GMT [KW]
* UnicodeData.txt does not have a header.
*/
@ -75,13 +75,17 @@ static const uint8_t joining_table[] =
/* Syriac Supplement */
/* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,
/* Arabic Extended-B */
/* 0860 */ R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,
/* 0880 */ R,R,R,C,C,C,D,U,U,D,D,D,D,D,R,X,U,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Arabic Extended-A */
/* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,D,D,
/* 08C0 */ D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,D,D,D,D,R,D,D,D,D,D,D,
/* 08C0 */ D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 08E0 */ X,X,U,
#define joining_offset_0x1806u 739
@ -137,23 +141,28 @@ static const uint8_t joining_table[] =
/* Sogdian */
/* 10F20 */ D,D,D,R,D,D,D,D,D,D,D,D,D,D,D,D,
/* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,
/* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,X,X,X,X,X,X,X,X,X,X,X,
/* 10F60 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
#define joining_offset_0x10fb0u 1219
/* Old Uyghur */
/* 10F60 */ D,D,D,D,R,R,D,D,D,D,D,D,D,D,D,D,
/* 10F80 */ D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 10FA0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Chorasmian */
/* 10FA0 */ D,U,D,D,R,R,R,U,D,R,R,D,D,R,D,D,
/* 10FC0 */ U,D,R,R,D,U,U,U,U,R,D,L,
#define joining_offset_0x110bdu 1247
#define joining_offset_0x110bdu 1338
/* Kaithi */
/* 110A0 */ U,X,X,
/* 110C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,U,
#define joining_offset_0x1e900u 1264
#define joining_offset_0x1e900u 1355
/* Adlam */
@ -161,7 +170,7 @@ static const uint8_t joining_table[] =
/* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
/* 1E940 */ D,D,D,D,X,X,X,X,X,X,X,T,
}; /* Table items: 1340; occupancy: 57% */
}; /* Table items: 1431; occupancy: 57% */
static unsigned int
@ -189,8 +198,7 @@ joining_type (hb_codepoint_t u)
if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D23u)) return joining_table[u - 0x10D00u + joining_offset_0x10d00u];
if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F54u)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x10FCBu)) return joining_table[u - 0x10FB0u + joining_offset_0x10fb0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10FCBu)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
break;
case 0x11u:

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

@ -6,12 +6,12 @@
*
* on files with these headers:
*
* # IndicSyllabicCategory-13.0.0.txt
* # Date: 2019-07-22, 19:55:00 GMT [KW, RP]
* # IndicPositionalCategory-13.0.0.txt
* # Date: 2019-07-23, 00:01:00 GMT [KW, RP]
* # Blocks-13.0.0.txt
* # Date: 2019-07-10, 19:06:00 GMT [KW]
* # IndicSyllabicCategory-14.0.0.txt
* # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
* # IndicPositionalCategory-14.0.0.txt
* # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
* # Blocks-14.0.0.txt
* # Date: 2021-01-22, 23:29:00 GMT [KW]
*/
#include "hb.hh"
@ -27,9 +27,9 @@
#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 91 chars; Bindu */
#define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER /* 20 chars; Brahmi_Joining_Number */
#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 59 chars; Cantillation_Mark */
#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2195 chars; Consonant */
#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 12 chars; Consonant_Dead */
#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 67 chars; Consonant_Final */
#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2206 chars; Consonant */
#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 14 chars; Consonant_Dead */
#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 70 chars; Consonant_Final */
#define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 5 chars; Consonant_Head_Letter */
#define ISC_CIP INDIC_SYLLABIC_CATEGORY_CONSONANT_INITIAL_POSTFIXED /* 1 chars; Consonant_Initial_Postfixed */
#define ISC_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER /* 2 chars; Consonant_Killer */
@ -38,18 +38,18 @@
#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 3 chars; Consonant_Preceding_Repha */
#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 10 chars; Consonant_Prefixed */
#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 94 chars; Consonant_Subjoined */
#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 4 chars; Consonant_Succeeding_Repha */
#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 1 chars; Consonant_Succeeding_Repha */
#define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER /* 8 chars; Consonant_With_Stacker */
#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 3 chars; Gemination_Mark */
#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 12 chars; Invisible_Stacker */
#define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER /* 1 chars; Joiner */
#define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER /* 1 chars; Modifying_Letter */
#define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER /* 1 chars; Non_Joiner */
#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 31 chars; Nukta */
#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 32 chars; Nukta */
#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 491 chars; Number */
#define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER /* 1 chars; Number_Joiner */
#define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER /* 1 chars; Other */
#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 23 chars; Pure_Killer */
#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 25 chars; Pure_Killer */
#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 2 chars; Register_Shifter */
#define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER /* 25 chars; Syllable_Modifier */
#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */
@ -57,18 +57,18 @@
#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 27 chars; Virama */
#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 35 chars; Visarga */
#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 30 chars; Vowel */
#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 683 chars; Vowel_Dependent */
#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 484 chars; Vowel_Independent */
#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 686 chars; Vowel_Dependent */
#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 486 chars; Vowel_Independent */
#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 351 chars; Bottom */
#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 352 chars; Bottom */
#define IMC_BL INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT /* 1 chars; Bottom_And_Left */
#define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT /* 4 chars; Bottom_And_Right */
#define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 64 chars; Left */
#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 22 chars; Left_And_Right */
#define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE /* 1 chars; Not_Applicable */
#define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK /* 10 chars; Overstruck */
#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 288 chars; Right */
#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 415 chars; Top */
#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 290 chars; Right */
#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 418 chars; Top */
#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 10 chars; Top_And_Bottom */
#define IMC_TBL INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_LEFT /* 2 chars; Top_And_Bottom_And_Left */
#define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT /* 1 chars; Top_And_Bottom_And_Right */
@ -231,11 +231,11 @@ static const uint16_t indic_table[] = {
/* 0C20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C28 */ _(C,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(A,x), _(M,T), _(M,T),
/* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(N,B), _(A,x), _(M,T), _(M,T),
/* 0C40 */ _(M,T), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,T),
/* 0C48 */ _(M,TB), _(x,x), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x), _(x,x),
/* 0C50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,T), _(M,B), _(x,x),
/* 0C58 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
/* 0C58 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(CD,x), _(x,x), _(x,x),
/* 0C60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
/* 0C68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0C70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@ -254,7 +254,7 @@ static const uint16_t indic_table[] = {
/* 0CC0 */ _(M,TR), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,TR),
/* 0CC8 */ _(M,TR), _(x,x), _(M,TR), _(M,TR), _(M,T), _(V,T), _(x,x), _(x,x),
/* 0CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R), _(M,R), _(x,x),
/* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(x,x),
/* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CD,x), _(C,x), _(x,x),
/* 0CE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
/* 0CE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0CF0 */ _(x,x),_(CWS,x),_(CWS,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@ -402,7 +402,7 @@ static const uint16_t indic_table[] = {
/* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(CP,x), _(CP,x), _(CP,x), _(x,x),
/* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,R), _(TM,T), _(TM,R), _(C,x), _(C,x),
}; /* Table items: 1792; occupancy: 70% */
}; /* Table items: 1792; occupancy: 71% */
uint16_t
hb_indic_get_categories (hb_codepoint_t u)

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

@ -1,29 +1,30 @@
#line 1 "hb-ot-shape-complex-khmer-machine.rl"
/*
* Copyright © 2011,2012 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Google Author(s): Behdad Esfahbod
*/
* Copyright © 2011,2012 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Google Author(s): Behdad Esfahbod
*/
#ifndef HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH
#define HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH
@ -31,13 +32,13 @@
#include "hb.hh"
enum khmer_syllable_type_t {
khmer_consonant_syllable,
khmer_broken_cluster,
khmer_non_khmer_cluster,
khmer_consonant_syllable,
khmer_broken_cluster,
khmer_non_khmer_cluster,
};
#line 41 "hb-ot-shape-complex-khmer-machine.hh"
#line 42 "hb-ot-shape-complex-khmer-machine.hh"
#define khmer_syllable_machine_ex_C 1u
#define khmer_syllable_machine_ex_Coeng 14u
#define khmer_syllable_machine_ex_DOTTEDCIRCLE 12u
@ -55,125 +56,180 @@ enum khmer_syllable_type_t {
#define khmer_syllable_machine_ex_ZWNJ 5u
#line 59 "hb-ot-shape-complex-khmer-machine.hh"
#line 60 "hb-ot-shape-complex-khmer-machine.hh"
static const unsigned char _khmer_syllable_machine_trans_keys[] = {
2u, 8u, 2u, 6u, 2u, 8u, 2u, 6u,
0u, 0u, 2u, 6u, 2u, 8u, 2u, 6u,
2u, 8u, 2u, 6u, 2u, 6u, 2u, 8u,
2u, 6u, 0u, 0u, 2u, 6u, 2u, 8u,
2u, 6u, 2u, 8u, 2u, 6u, 2u, 8u,
0u, 11u, 2u, 11u, 2u, 11u, 2u, 11u,
7u, 7u, 2u, 7u, 2u, 11u, 2u, 11u,
2u, 11u, 0u, 0u, 2u, 8u, 2u, 11u,
2u, 11u, 7u, 7u, 2u, 7u, 2u, 11u,
2u, 11u, 0u, 0u, 2u, 11u, 2u, 11u,
0u
5u, 26u, 5u, 21u, 5u, 26u, 5u, 21u, 1u, 16u, 5u, 21u, 5u, 26u, 5u, 21u,
5u, 26u, 5u, 21u, 5u, 21u, 5u, 26u, 5u, 21u, 1u, 16u, 5u, 21u, 5u, 26u,
5u, 21u, 5u, 26u, 5u, 21u, 5u, 26u, 1u, 29u, 5u, 29u, 5u, 29u, 5u, 29u,
22u, 22u, 5u, 22u, 5u, 29u, 5u, 29u, 5u, 29u, 1u, 16u, 5u, 26u, 5u, 29u,
5u, 29u, 22u, 22u, 5u, 22u, 5u, 29u, 5u, 29u, 1u, 16u, 5u, 29u, 5u, 29u,
0
};
static const signed char _khmer_syllable_machine_char_class[] = {
0, 0, 1, 1, 2, 2, 1, 1,
1, 1, 3, 3, 1, 4, 1, 0,
1, 1, 1, 5, 6, 7, 1, 1,
1, 8, 9, 10, 11, 0
static const char _khmer_syllable_machine_key_spans[] = {
22, 17, 22, 17, 16, 17, 22, 17,
22, 17, 17, 22, 17, 16, 17, 22,
17, 22, 17, 22, 29, 25, 25, 25,
1, 18, 25, 25, 25, 16, 22, 25,
25, 1, 18, 25, 25, 16, 25, 25
};
static const short _khmer_syllable_machine_index_offsets[] = {
0, 7, 12, 19, 24, 25, 30, 37,
42, 49, 54, 59, 66, 71, 72, 77,
84, 89, 96, 101, 108, 120, 130, 140,
150, 151, 157, 167, 177, 187, 188, 195,
205, 215, 216, 222, 232, 242, 243, 253,
0
0, 23, 41, 64, 82, 99, 117, 140,
158, 181, 199, 217, 240, 258, 275, 293,
316, 334, 357, 375, 398, 428, 454, 480,
506, 508, 527, 553, 579, 605, 622, 645,
671, 697, 699, 718, 744, 770, 787, 813
};
static const signed char _khmer_syllable_machine_indicies[] = {
1, 0, 0, 2, 3, 0, 4, 1,
0, 0, 0, 3, 1, 0, 0, 0,
3, 0, 4, 5, 0, 0, 0, 4,
6, 7, 0, 0, 0, 8, 9, 0,
0, 0, 10, 0, 4, 9, 0, 0,
0, 10, 11, 0, 0, 0, 12, 0,
4, 11, 0, 0, 0, 12, 14, 13,
13, 13, 15, 14, 16, 16, 16, 15,
16, 17, 18, 16, 16, 16, 17, 19,
20, 16, 16, 16, 21, 22, 16, 16,
16, 23, 16, 17, 22, 16, 16, 16,
23, 24, 16, 16, 16, 25, 16, 17,
24, 16, 16, 16, 25, 14, 16, 16,
26, 15, 16, 17, 29, 28, 30, 2,
31, 28, 15, 19, 17, 23, 25, 21,
33, 32, 34, 2, 3, 6, 4, 10,
12, 8, 35, 32, 36, 32, 3, 6,
4, 10, 12, 8, 5, 32, 36, 32,
4, 6, 32, 32, 32, 8, 6, 7,
32, 36, 32, 8, 6, 37, 32, 36,
32, 10, 6, 4, 32, 32, 8, 38,
32, 36, 32, 12, 6, 4, 10, 32,
8, 35, 32, 34, 32, 3, 6, 4,
10, 12, 8, 29, 14, 39, 39, 39,
15, 39, 17, 41, 40, 42, 40, 15,
19, 17, 23, 25, 21, 18, 40, 42,
40, 17, 19, 40, 40, 40, 21, 19,
20, 40, 42, 40, 21, 19, 43, 40,
42, 40, 23, 19, 17, 40, 40, 21,
44, 40, 42, 40, 25, 19, 17, 23,
40, 21, 45, 46, 40, 31, 26, 15,
19, 17, 23, 25, 21, 41, 40, 31,
40, 15, 19, 17, 23, 25, 21, 0
static const char _khmer_syllable_machine_indicies[] = {
1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 2,
3, 0, 0, 0, 0, 4, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3,
0, 1, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 3, 0, 0, 0, 0, 4, 0,
5, 5, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
4, 0, 6, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 6, 0, 7, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 8, 0, 9, 9, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 10, 0, 0,
0, 0, 4, 0, 9, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 10, 0, 11, 11,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 12, 0,
0, 0, 0, 4, 0, 11, 11, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 12, 0, 14,
14, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 15,
13, 14, 14, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 15, 16, 16, 16, 16, 17, 16,
18, 18, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16,
17, 16, 19, 19, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 19, 16, 20, 20, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 21, 16, 22, 22, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 23, 16, 16,
16, 16, 17, 16, 22, 22, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 23, 16, 24, 24,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 25, 16,
16, 16, 16, 17, 16, 24, 24, 16,
16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 25, 16, 14,
14, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 26, 15,
16, 16, 16, 16, 17, 16, 28, 28,
27, 27, 29, 29, 27, 27, 27, 27,
2, 2, 27, 30, 27, 28, 27, 27,
27, 27, 15, 19, 27, 27, 27, 17,
23, 25, 21, 27, 32, 32, 31, 31,
31, 31, 31, 31, 31, 33, 31, 31,
31, 31, 31, 2, 3, 6, 31, 31,
31, 4, 10, 12, 8, 31, 34, 34,
31, 31, 31, 31, 31, 31, 31, 35,
31, 31, 31, 31, 31, 31, 3, 6,
31, 31, 31, 4, 10, 12, 8, 31,
5, 5, 31, 31, 31, 31, 31, 31,
31, 35, 31, 31, 31, 31, 31, 31,
4, 6, 31, 31, 31, 31, 31, 31,
8, 31, 6, 31, 7, 7, 31, 31,
31, 31, 31, 31, 31, 35, 31, 31,
31, 31, 31, 31, 8, 6, 31, 36,
36, 31, 31, 31, 31, 31, 31, 31,
35, 31, 31, 31, 31, 31, 31, 10,
6, 31, 31, 31, 4, 31, 31, 8,
31, 37, 37, 31, 31, 31, 31, 31,
31, 31, 35, 31, 31, 31, 31, 31,
31, 12, 6, 31, 31, 31, 4, 10,
31, 8, 31, 34, 34, 31, 31, 31,
31, 31, 31, 31, 33, 31, 31, 31,
31, 31, 31, 3, 6, 31, 31, 31,
4, 10, 12, 8, 31, 28, 28, 31,
31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 28, 31, 14, 14,
38, 38, 38, 38, 38, 38, 38, 38,
38, 38, 38, 38, 38, 38, 15, 38,
38, 38, 38, 17, 38, 40, 40, 39,
39, 39, 39, 39, 39, 39, 41, 39,
39, 39, 39, 39, 39, 15, 19, 39,
39, 39, 17, 23, 25, 21, 39, 18,
18, 39, 39, 39, 39, 39, 39, 39,
41, 39, 39, 39, 39, 39, 39, 17,
19, 39, 39, 39, 39, 39, 39, 21,
39, 19, 39, 20, 20, 39, 39, 39,
39, 39, 39, 39, 41, 39, 39, 39,
39, 39, 39, 21, 19, 39, 42, 42,
39, 39, 39, 39, 39, 39, 39, 41,
39, 39, 39, 39, 39, 39, 23, 19,
39, 39, 39, 17, 39, 39, 21, 39,
43, 43, 39, 39, 39, 39, 39, 39,
39, 41, 39, 39, 39, 39, 39, 39,
25, 19, 39, 39, 39, 17, 23, 39,
21, 39, 44, 44, 39, 39, 39, 39,
39, 39, 39, 39, 39, 39, 39, 39,
39, 44, 39, 45, 45, 39, 39, 39,
39, 39, 39, 39, 30, 39, 39, 39,
39, 39, 26, 15, 19, 39, 39, 39,
17, 23, 25, 21, 39, 40, 40, 39,
39, 39, 39, 39, 39, 39, 30, 39,
39, 39, 39, 39, 39, 15, 19, 39,
39, 39, 17, 23, 25, 21, 39, 0
};
static const signed char _khmer_syllable_machine_index_defaults[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 13, 16, 16, 16, 16, 16,
16, 16, 16, 16, 28, 32, 32, 32,
32, 32, 32, 32, 32, 32, 39, 40,
40, 40, 40, 40, 40, 40, 40, 40,
0
static const char _khmer_syllable_machine_trans_targs[] = {
20, 1, 28, 22, 23, 3, 24, 5,
25, 7, 26, 9, 27, 20, 10, 31,
20, 32, 12, 33, 14, 34, 16, 35,
18, 36, 39, 20, 21, 30, 37, 20,
0, 29, 2, 4, 6, 8, 20, 20,
11, 13, 15, 17, 38, 19
};
static const signed char _khmer_syllable_machine_cond_targs[] = {
20, 1, 28, 22, 23, 3, 24, 5,
25, 7, 26, 9, 27, 20, 10, 31,
20, 32, 12, 33, 14, 34, 16, 35,
18, 36, 39, 20, 20, 21, 30, 37,
20, 0, 29, 2, 4, 6, 8, 20,
20, 11, 13, 15, 17, 38, 19, 0
static const char _khmer_syllable_machine_trans_actions[] = {
1, 0, 2, 2, 2, 0, 0, 0,
2, 0, 2, 0, 2, 3, 0, 4,
5, 2, 0, 0, 0, 2, 0, 2,
0, 2, 4, 8, 2, 9, 0, 10,
0, 0, 0, 0, 0, 0, 11, 12,
0, 0, 0, 0, 4, 0
};
static const signed char _khmer_syllable_machine_cond_actions[] = {
1, 0, 2, 2, 2, 0, 0, 0,
2, 0, 2, 0, 2, 3, 0, 4,
5, 2, 0, 0, 0, 2, 0, 2,
0, 2, 4, 0, 8, 2, 9, 0,
10, 0, 0, 0, 0, 0, 0, 11,
12, 0, 0, 0, 0, 4, 0, 0
static const char _khmer_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
static const signed char _khmer_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0
static const char _khmer_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
static const signed char _khmer_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0
};
static const signed char _khmer_syllable_machine_eof_trans[] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 14, 17, 17, 17, 17, 17,
17, 17, 17, 17, 28, 33, 33, 33,
33, 33, 33, 33, 33, 33, 40, 41,
41, 41, 41, 41, 41, 41, 41, 41,
0
static const unsigned char _khmer_syllable_machine_eof_trans[] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 14, 17, 17, 17, 17, 17,
17, 17, 17, 17, 0, 32, 32, 32,
32, 32, 32, 32, 32, 32, 39, 40,
40, 40, 40, 40, 40, 40, 40, 40
};
static const int khmer_syllable_machine_start = 20;
@ -191,263 +247,148 @@ static const int khmer_syllable_machine_en_main = 20;
#define found_syllable(syllable_type) \
HB_STMT_START { \
if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
for (unsigned int i = ts; i < te; i++) \
info[i].syllable() = (syllable_serial << 4) | syllable_type; \
syllable_serial++; \
if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
} HB_STMT_END
HB_STMT_START { \
if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
for (unsigned int i = ts; i < te; i++) \
info[i].syllable() = (syllable_serial << 4) | syllable_type; \
syllable_serial++; \
if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
} HB_STMT_END
static void
find_syllables_khmer (hb_buffer_t *buffer)
{
unsigned int p, pe, eof, ts, te, act HB_UNUSED;
int cs;
hb_glyph_info_t *info = buffer->info;
#line 210 "hb-ot-shape-complex-khmer-machine.hh"
unsigned int p, pe, eof, ts, te, act HB_UNUSED;
int cs;
hb_glyph_info_t *info = buffer->info;
#line 266 "hb-ot-shape-complex-khmer-machine.hh"
{
cs = (int)khmer_syllable_machine_start;
ts = 0;
te = 0;
act = 0;
cs = khmer_syllable_machine_start;
ts = 0;
te = 0;
act = 0;
}
#line 106 "hb-ot-shape-complex-khmer-machine.rl"
p = 0;
pe = eof = buffer->len;
unsigned int syllable_serial = 1;
#line 226 "hb-ot-shape-complex-khmer-machine.hh"
p = 0;
pe = eof = buffer->len;
unsigned int syllable_serial = 1;
#line 282 "hb-ot-shape-complex-khmer-machine.hh"
{
unsigned int _trans = 0;
const unsigned char * _keys;
const signed char * _inds;
int _ic;
_resume: {}
if ( p == pe && p != eof )
goto _out;
switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
case 7: {
{
int _slen;
int _trans;
const unsigned char *_keys;
const char *_inds;
if ( p == pe )
goto _test_eof;
_resume:
switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
case 7:
#line 1 "NONE"
{ts = p;}}
#line 241 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
}
if ( p == eof ) {
if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
_trans = (unsigned int)_khmer_syllable_machine_eof_trans[cs] - 1;
}
}
else {
_keys = ( _khmer_syllable_machine_trans_keys + ((cs<<1)));
_inds = ( _khmer_syllable_machine_indicies + (_khmer_syllable_machine_index_offsets[cs]));
if ( (info[p].khmer_category()) <= 29 && (info[p].khmer_category()) >= 1 ) {
_ic = (int)_khmer_syllable_machine_char_class[(int)(info[p].khmer_category()) - 1];
if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) )
_trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) ));
else
_trans = (unsigned int)_khmer_syllable_machine_index_defaults[cs];
}
else {
_trans = (unsigned int)_khmer_syllable_machine_index_defaults[cs];
}
}
cs = (int)_khmer_syllable_machine_cond_targs[_trans];
if ( _khmer_syllable_machine_cond_actions[_trans] != 0 ) {
switch ( _khmer_syllable_machine_cond_actions[_trans] ) {
case 2: {
{
#line 1 "NONE"
{te = p+1;}}
#line 279 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 8: {
{
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
{te = p+1;{
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_non_khmer_cluster); }
}}
#line 292 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 10: {
{
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
{te = p;p = p - 1;{
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_consonant_syllable); }
}}
#line 305 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 12: {
{
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
{te = p;p = p - 1;{
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_broken_cluster); }
}}
#line 318 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 11: {
{
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
{te = p;p = p - 1;{
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_non_khmer_cluster); }
}}
#line 331 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 1: {
{
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
{p = ((te))-1;
{
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_consonant_syllable); }
}}
#line 345 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 5: {
{
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
{p = ((te))-1;
{
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_broken_cluster); }
}}
#line 359 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 3: {
{
#line 1 "NONE"
{switch( act ) {
case 2: {
p = ((te))-1;
{
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_broken_cluster); }
break;
}
case 3: {
p = ((te))-1;
{
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
found_syllable (khmer_non_khmer_cluster); }
break;
}
}}
}
#line 385 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 4: {
{
#line 1 "NONE"
{te = p+1;}}
#line 395 "hb-ot-shape-complex-khmer-machine.hh"
{
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
{act = 2;}}
#line 401 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
case 9: {
{
#line 1 "NONE"
{te = p+1;}}
#line 411 "hb-ot-shape-complex-khmer-machine.hh"
{
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
{act = 3;}}
#line 417 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
}
}
if ( p == eof ) {
if ( cs >= 20 )
goto _out;
}
else {
switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
case 6: {
{
#line 1 "NONE"
{ts = 0;}}
#line 437 "hb-ot-shape-complex-khmer-machine.hh"
break;
}
}
p += 1;
goto _resume;
}
_out: {}
{ts = p;}
break;
#line 296 "hb-ot-shape-complex-khmer-machine.hh"
}
_keys = _khmer_syllable_machine_trans_keys + (cs<<1);
_inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs];
_slen = _khmer_syllable_machine_key_spans[cs];
_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) &&
( info[p].khmer_category()) <= _keys[1] ?
( info[p].khmer_category()) - _keys[0] : _slen ];
_eof_trans:
cs = _khmer_syllable_machine_trans_targs[_trans];
if ( _khmer_syllable_machine_trans_actions[_trans] == 0 )
goto _again;
switch ( _khmer_syllable_machine_trans_actions[_trans] ) {
case 2:
#line 1 "NONE"
{te = p+1;}
break;
case 8:
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
{te = p+1;{ found_syllable (khmer_non_khmer_cluster); }}
break;
case 10:
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
{te = p;p--;{ found_syllable (khmer_consonant_syllable); }}
break;
case 12:
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
{te = p;p--;{ found_syllable (khmer_broken_cluster); }}
break;
case 11:
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
{te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }}
break;
case 1:
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
{{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }}
break;
case 5:
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
{{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); }}
break;
case 3:
#line 1 "NONE"
{ switch( act ) {
case 2:
{{p = ((te))-1;} found_syllable (khmer_broken_cluster); }
break;
case 3:
{{p = ((te))-1;} found_syllable (khmer_non_khmer_cluster); }
break;
}
}
break;
case 4:
#line 1 "NONE"
{te = p+1;}
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
{act = 2;}
break;
case 9:
#line 1 "NONE"
{te = p+1;}
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
{act = 3;}
break;
#line 366 "hb-ot-shape-complex-khmer-machine.hh"
}
_again:
switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
case 6:
#line 1 "NONE"
{ts = 0;}
break;
#line 375 "hb-ot-shape-complex-khmer-machine.hh"
}
if ( ++p != pe )
goto _resume;
_test_eof: {}
if ( p == eof )
{
if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
_trans = _khmer_syllable_machine_eof_trans[cs] - 1;
goto _eof_trans;
}
}
}
#line 114 "hb-ot-shape-complex-khmer-machine.rl"
}
#undef found_syllable

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -6,14 +6,14 @@
*
* on files with these headers:
*
* # IndicSyllabicCategory-13.0.0.txt
* # Date: 2019-07-22, 19:55:00 GMT [KW, RP]
* # IndicPositionalCategory-13.0.0.txt
* # Date: 2019-07-23, 00:01:00 GMT [KW, RP]
* # ArabicShaping-13.0.0.txt
* # Date: 2020-01-31, 23:55:00 GMT [KW, RP]
* # Blocks-13.0.0.txt
* # Date: 2019-07-10, 19:06:00 GMT [KW]
* # IndicSyllabicCategory-14.0.0.txt
* # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
* # IndicPositionalCategory-14.0.0.txt
* # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
* # ArabicShaping-14.0.0.txt
* # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
* # Blocks-14.0.0.txt
* # Date: 2021-01-22, 23:29:00 GMT [KW]
* # Override values For Indic_Syllabic_Category
* # Not derivable
* # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
@ -199,7 +199,7 @@ static const uint8_t use_table[] = {
/* 0C00 */ VMAbv, VMPst, VMPst, VMPst, VMAbv, B, B, B, B, B, B, B, B, O, B, B,
/* 0C10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 0C20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B,
/* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, VAbv, VAbv,
/* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, CMBlw, B, VAbv, VAbv,
/* 0C40 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O,
/* 0C50 */ O, O, O, O, O, VAbv, VBlw, O, B, B, B, O, O, O, O, O,
/* 0C60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
@ -278,13 +278,13 @@ static const uint8_t use_table[] = {
/* Tagalog */
/* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, B,
/* 1710 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O,
/* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1710 */ B, B, VAbv, VBlw, VBlw, VPst, O, O, O, O, O, O, O, O, O, B,
/* Hanunoo */
/* 1720 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1730 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O,
/* 1730 */ B, B, VAbv, VBlw, VPst, O, O, O, O, O, O, O, O, O, O, O,
/* Buhid */
@ -374,7 +374,7 @@ static const uint8_t use_table[] = {
/* 1B10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1B30 */ B, B, B, B, CMAbv, VPst, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VPre,
/* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, O, O, O, O,
/* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, B, O, O, O,
/* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, GB, GB, O, O, GB,
/* 1B60 */ O, S, GB, S, S, S, S, S, GB, S, S, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
/* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv, O, O, O, O, O, O, O, O, O, O, O, O,
@ -630,7 +630,7 @@ static const uint8_t use_table[] = {
/* 11040 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, HVM, O, O, O, O, O, O, O, O, O,
/* 11050 */ O, O, N, N, N, N, N, N, N, N, N, N, N, N, N, N,
/* 11060 */ N, N, N, N, N, N, B, B, B, B, B, B, B, B, B, B,
/* 11070 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, HN,
/* 11070 */ VAbv, B, B, VAbv, VAbv, B, O, O, O, O, O, O, O, O, O, HN,
/* Kaithi */
@ -638,8 +638,9 @@ static const uint8_t use_table[] = {
/* 11090 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 110A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 110B0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VPst, VPst, H, CMBlw, O, O, O, O, O,
/* 110C0 */ O, O, VBlw, O, O, O, O, O,
#define use_offset_0x11100u 4608
#define use_offset_0x11100u 4616
/* Chakma */
@ -677,7 +678,7 @@ static const uint8_t use_table[] = {
/* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VBlw,
/* 11230 */ VAbv, VAbv, VAbv, VAbv, VMAbv, H, CMAbv, CMAbv, O, O, O, O, O, O, VMAbv, O,
#define use_offset_0x11280u 4928
#define use_offset_0x11280u 4936
/* Multani */
@ -705,7 +706,7 @@ static const uint8_t use_table[] = {
/* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
/* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
#define use_offset_0x11400u 5176
#define use_offset_0x11400u 5184
/* Newa */
@ -728,7 +729,7 @@ static const uint8_t use_table[] = {
/* 114C0 */ VMAbv, VMAbv, H, CMBlw, B, O, O, O, O, O, O, O, O, O, O, O,
/* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
#define use_offset_0x11580u 5400
#define use_offset_0x11580u 5408
/* Siddham */
@ -770,8 +771,9 @@ static const uint8_t use_table[] = {
/* 11710 */ B, B, B, B, B, B, B, B, B, B, B, O, O, MBlw, MPre, MAbv,
/* 11720 */ VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VBlw, VAbv, VAbv, VAbv, O, O, O, O,
/* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O,
/* 11740 */ B, B, B, B, B, B, B, O,
#define use_offset_0x11800u 5848
#define use_offset_0x11800u 5864
/* Dogra */
@ -781,7 +783,7 @@ static const uint8_t use_table[] = {
/* 11820 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPre, VPst, VBlw,
/* 11830 */ VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VMAbv, VMPst, H, CMBlw, O, O, O, O, O,
#define use_offset_0x11900u 5912
#define use_offset_0x11900u 5928
/* Dives Akuru */
@ -793,7 +795,7 @@ static const uint8_t use_table[] = {
/* 11940 */ MPst, R, MPst, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O,
/* 11950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
#define use_offset_0x119a0u 6008
#define use_offset_0x119a0u 6024
/* Nandinagari */
@ -821,7 +823,7 @@ static const uint8_t use_table[] = {
/* 11A80 */ B, B, B, B, R, R, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw,
/* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, B, O, O,
#define use_offset_0x11c00u 6264
#define use_offset_0x11c00u 6280
/* Bhaiksuki */
@ -842,7 +844,7 @@ static const uint8_t use_table[] = {
/* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
/* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O,
#define use_offset_0x11d00u 6448
#define use_offset_0x11d00u 6464
/* Masaram Gondi */
@ -862,7 +864,7 @@ static const uint8_t use_table[] = {
/* 11D90 */ VAbv, VAbv, O, VPst, VPst, VMAbv, VMPst, H, O, O, O, O, O, O, O, O,
/* 11DA0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
#define use_offset_0x11ee0u 6624
#define use_offset_0x11ee0u 6640
/* Makasar */
@ -870,7 +872,7 @@ static const uint8_t use_table[] = {
/* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O,
#define use_offset_0x13000u 6648
#define use_offset_0x13000u 6664
/* Egyptian Hieroglyphs */
@ -947,7 +949,7 @@ static const uint8_t use_table[] = {
/* 13430 */ J, J, J, J, J, J, J, SB, SE, O, O, O, O, O, O, O,
#define use_offset_0x16b00u 7736
#define use_offset_0x16b00u 7752
/* Pahawh Hmong */
@ -957,7 +959,7 @@ static const uint8_t use_table[] = {
/* 16B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O,
#define use_offset_0x16f00u 7792
#define use_offset_0x16f00u 7808
/* Miao */
@ -973,14 +975,14 @@ static const uint8_t use_table[] = {
/* 16F80 */ VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, O, O, O, O, O, O, O, VMBlw,
/* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O,
#define use_offset_0x16fe0u 7944
#define use_offset_0x16fe0u 7960
/* Ideographic Symbols and Punctuation */
/* 16FE0 */ O, O, O, O, B, O, O, O,
#define use_offset_0x18b00u 7952
#define use_offset_0x18b00u 7968
/* Khitan Small Script */
@ -1016,7 +1018,7 @@ static const uint8_t use_table[] = {
/* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 18CD0 */ B, B, B, B, B, B, O, O,
#define use_offset_0x1bc00u 8424
#define use_offset_0x1bc00u 8440
/* Duployan */
@ -1032,7 +1034,7 @@ static const uint8_t use_table[] = {
/* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O,
/* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBlw, CMBlw, O,
#define use_offset_0x1e100u 8584
#define use_offset_0x1e100u 8600
/* Nyiakeng Puachue Hmong */
@ -1043,7 +1045,7 @@ static const uint8_t use_table[] = {
/* 1E130 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, O, O,
/* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B,
#define use_offset_0x1e2c0u 8664
#define use_offset_0x1e2c0u 8680
/* Wancho */
@ -1053,7 +1055,7 @@ static const uint8_t use_table[] = {
/* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv,
/* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
#define use_offset_0x1e900u 8728
#define use_offset_0x1e900u 8744
/* Adlam */
@ -1065,7 +1067,7 @@ static const uint8_t use_table[] = {
/* 1E940 */ B, B, B, B, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, B, O, O, O, O,
/* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
}; /* Table items: 8824; occupancy: 79% */
}; /* Table items: 8840; occupancy: 79% */
static inline uint8_t
hb_use_get_category (hb_codepoint_t u)
@ -1111,15 +1113,15 @@ hb_use_get_category (hb_codepoint_t u)
if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D3Fu)) return use_table[u - 0x10D00u + use_offset_0x10d00u];
if (hb_in_range<hb_codepoint_t> (u, 0x10E80u, 0x10EB7u)) return use_table[u - 0x10E80u + use_offset_0x10e80u];
if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F57u)) return use_table[u - 0x10F30u + use_offset_0x10f30u];
if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110BFu)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
break;
case 0x11u:
if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110BFu)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
if (hb_in_range<hb_codepoint_t> (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u];
if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x11747u)) return use_table[u - 0x11580u + use_offset_0x11580u];
if (hb_in_range<hb_codepoint_t> (u, 0x11800u, 0x1183Fu)) return use_table[u - 0x11800u + use_offset_0x11800u];
if (hb_in_range<hb_codepoint_t> (u, 0x11900u, 0x1195Fu)) return use_table[u - 0x11900u + use_offset_0x11900u];
if (hb_in_range<hb_codepoint_t> (u, 0x119A0u, 0x11A9Fu)) return use_table[u - 0x119A0u + use_offset_0x119a0u];

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

@ -10,8 +10,8 @@
* # Date: 2015-03-12, 21:17:00 GMT [AG]
* # Date: 2019-11-08, 23:22:00 GMT [AG]
*
* # Scripts-13.0.0.txt
* # Date: 2020-01-22, 00:07:43 GMT
* # Scripts-14.0.0.txt
* # Date: 2021-07-10, 00:35:31 GMT
*/
#include "hb.hh"

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

@ -373,6 +373,15 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
/* Unicode-13.0 additions */
case HB_SCRIPT_CHORASMIAN:
case HB_SCRIPT_DIVES_AKURU:
case HB_SCRIPT_KHITAN_SMALL_SCRIPT:
case HB_SCRIPT_YEZIDI:
/* Unicode-14.0 additions */
case HB_SCRIPT_CYPRO_MINOAN:
case HB_SCRIPT_OLD_UYGHUR:
case HB_SCRIPT_TANGSA:
case HB_SCRIPT_TOTO:
case HB_SCRIPT_VITHKUQI:
/* If the designer designed the font for the 'DFLT' script,
* (or we ended up arbitrarily pick 'latn'), use the default shaper.

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

@ -362,12 +362,14 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
map->enable_feature (HB_TAG ('t','r','a','k'), F_HAS_FALLBACK);
#endif
map->enable_feature (HB_TAG ('H','A','R','F'));
map->enable_feature (HB_TAG ('H','a','r','f')); /* Considered required. */
map->enable_feature (HB_TAG ('H','A','R','F')); /* Considered discretionary. */
if (planner->shaper->collect_features)
planner->shaper->collect_features (planner);
map->enable_feature (HB_TAG ('B','U','Z','Z'));
map->enable_feature (HB_TAG ('B','u','z','z')); /* Considered required. */
map->enable_feature (HB_TAG ('B','U','Z','Z')); /* Considered discretionary. */
for (unsigned int i = 0; i < ARRAY_LENGTH (common_features); i++)
map->add_feature (common_features[i]);

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

@ -48,9 +48,7 @@
**/
#if HB_USE_ATEXIT
static void free_static_shaper_list ();
#endif
static inline void free_static_shaper_list ();
static const char *nil_shaper_list[] = {nullptr};
@ -69,9 +67,7 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
shaper_list[i] = shapers[i].name;
shaper_list[i] = nullptr;
#if HB_USE_ATEXIT
atexit (free_static_shaper_list);
#endif
hb_atexit (free_static_shaper_list);
return shaper_list;
}
@ -81,13 +77,11 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
{ return nil_shaper_list; }
} static_shaper_list;
#if HB_USE_ATEXIT
static
static inline
void free_static_shaper_list ()
{
static_shaper_list.free_instance ();
}
#endif
/**

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

@ -38,9 +38,7 @@ static const hb_shaper_entry_t all_shapers[] = {
static_assert (0 != ARRAY_LENGTH_CONST (all_shapers), "No shaper enabled.");
#endif
#if HB_USE_ATEXIT
static void free_static_shapers ();
#endif
static inline void free_static_shapers ();
static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_t,
hb_shapers_lazy_loader_t>
@ -83,9 +81,7 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_
p = end + 1;
}
#if HB_USE_ATEXIT
atexit (free_static_shapers);
#endif
hb_atexit (free_static_shapers);
return shapers;
}
@ -93,13 +89,11 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_
static const hb_shaper_entry_t *get_null () { return all_shapers; }
} static_shapers;
#if HB_USE_ATEXIT
static
static inline
void free_static_shapers ()
{
static_shapers.free_instance ();
}
#endif
const hb_shaper_entry_t *
_hb_shapers_get ()

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

@ -25,7 +25,6 @@
#include "hb.hh"
#ifndef HB_NO_STYLE
#ifdef HB_EXPERIMENTAL_API
#include "hb-ot-var-avar-table.hh"
#include "hb-ot-var-fvar-table.hh"
@ -36,56 +35,46 @@
#include "hb-ot-face.hh"
/**
* hb_style_tag_t:
* @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic.
* A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can
* be interpreted as (fully) italic.
* @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes.
* Non-zero. Values can be interpreted as text size, in points.
* @HB_STYLE_TAG_SLANT: Used to vary between upright and slanted text. Values
* must be greater than -90 and less than +90. Values can be interpreted as
* the angle, in counter-clockwise degrees, of oblique slant from whatever the
* designer considers to be upright for that font design.
* @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
* Non-zero. Values can be interpreted as a percentage of whatever the font
* designer considers normal width for that font design.
* @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details
* to give variation from lighter to blacker. Values can be interpreted in direct
* comparison to values for usWeightClass in the OS/2 table,
* or the CSS font-weight property.
* SECTION:hb-style
* @title: hb-style
* @short_description: Font Styles
* @include: hb.h
*
* Defined by https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg
*
* Since: EXPERIMENTAL
* Functions for fetching style information from fonts.
**/
typedef enum {
HB_STYLE_TAG_ITALIC = HB_TAG ('i','t','a','l'),
HB_STYLE_TAG_OPTICAL_SIZE = HB_TAG ('o','p','s','z'),
HB_STYLE_TAG_SLANT = HB_TAG ('s','l','n','t'),
HB_STYLE_TAG_WIDTH = HB_TAG ('w','d','t','h'),
HB_STYLE_TAG_WEIGHT = HB_TAG ('w','g','h','t'),
/*< private >*/
_HB_STYLE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
} hb_style_tag_t;
static inline float
_hb_angle_to_ratio (float a)
{
return tanf (a * float (M_PI / 180.));
}
#if 0
static inline float
_hb_ratio_to_angle (float r)
{
return atanf (r) * float (180. / M_PI);
}
#endif
/**
* hb_style_get_value:
* @font: a #hb_font_t object.
* @style_tag: a style tag.
*
* Searches variation axes of a hb_font_t object for a specific axis first,
* Searches variation axes of a #hb_font_t object for a specific axis first,
* if not set, then tries to get default style values from different
* tables of the font.
*
* Returns: Corresponding axis or default value to a style tag.
*
* Since: EXPERIMENTAL
* Since: 3.0.0
**/
float
hb_style_get_value (hb_font_t *font, hb_tag_t tag)
hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag)
{
hb_style_tag_t style_tag = (hb_style_tag_t) tag;
if (unlikely (style_tag == HB_STYLE_TAG_SLANT_RATIO))
return _hb_angle_to_ratio (hb_style_get_value (font, HB_STYLE_TAG_SLANT_ANGLE));
hb_face_t *face = font->face;
#ifndef HB_NO_VAR
@ -112,12 +101,14 @@ hb_style_get_value (hb_font_t *font, hb_tag_t tag)
return face->table.OS2->is_italic () || face->table.head->is_italic () ? 1 : 0;
case HB_STYLE_TAG_OPTICAL_SIZE:
{
unsigned int lower, upper;
unsigned int lower, design, upper;
return face->table.OS2->v5 ().get_optical_size (&lower, &upper)
? (float) (lower + upper) / 2.f
: hb_ot_layout_get_size_params (face, &design, nullptr, nullptr, nullptr, nullptr)
? design / 10.f
: 12.f;
}
case HB_STYLE_TAG_SLANT:
case HB_STYLE_TAG_SLANT_ANGLE:
return face->table.post->table->italicAngle.to_float ();
case HB_STYLE_TAG_WIDTH:
return face->table.OS2->has_data ()
@ -133,4 +124,3 @@ hb_style_get_value (hb_font_t *font, hb_tag_t tag)
}
#endif
#endif

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

@ -33,10 +33,46 @@
HB_BEGIN_DECLS
#ifdef HB_EXPERIMENTAL_API
/**
* hb_style_tag_t:
* @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic.
* A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can
* be interpreted as (fully) italic.
* @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes.
* Non-zero. Values can be interpreted as text size, in points.
* @HB_STYLE_TAG_SLANT_ANGLE: Used to vary between upright and slanted text. Values
* must be greater than -90 and less than +90. Values can be interpreted as
* the angle, in counter-clockwise degrees, of oblique slant from whatever the
* designer considers to be upright for that font design.
* @HB_STYLE_TAG_SLANT_RATIO: same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio.
* @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
* Non-zero. Values can be interpreted as a percentage of whatever the font
* designer considers normal width for that font design.
* @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details
* to give variation from lighter to blacker. Values can be interpreted in direct
* comparison to values for usWeightClass in the OS/2 table,
* or the CSS font-weight property.
*
* Defined by [OpenType Design-Variation Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).
*
* Since: 3.0.0
**/
typedef enum
{
HB_STYLE_TAG_ITALIC = HB_TAG ('i','t','a','l'),
HB_STYLE_TAG_OPTICAL_SIZE = HB_TAG ('o','p','s','z'),
HB_STYLE_TAG_SLANT_ANGLE = HB_TAG ('s','l','n','t'),
HB_STYLE_TAG_SLANT_RATIO = HB_TAG ('S','l','n','t'),
HB_STYLE_TAG_WIDTH = HB_TAG ('w','d','t','h'),
HB_STYLE_TAG_WEIGHT = HB_TAG ('w','g','h','t'),
/*< private >*/
_HB_STYLE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
} hb_style_tag_t;
HB_EXTERN float
hb_style_get_value (hb_font_t *font, hb_tag_t style_tag);
#endif
hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag);
HB_END_DECLS

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

@ -269,75 +269,6 @@ hb_subset_input_glyph_set (hb_subset_input_t *input)
return input->sets.glyphs;
}
/**
* hb_subset_input_nameid_set:
* @input: a #hb_subset_input_t object.
*
* Gets the set of name table name IDs to retain, the caller should modify the
* set as needed.
*
* Return value: (transfer none): pointer to the #hb_set_t of name IDs.
*
* Since: 2.9.0
**/
HB_EXTERN hb_set_t *
hb_subset_input_nameid_set (hb_subset_input_t *input)
{
return input->sets.name_ids;
}
/**
* hb_subset_input_namelangid_set:
* @input: a #hb_subset_input_t object.
*
* Gets the set of name table language IDs to retain, the caller should modify
* the set as needed.
*
* Return value: (transfer none): pointer to the #hb_set_t of language IDs.
*
* Since: 2.9.0
**/
HB_EXTERN hb_set_t *
hb_subset_input_namelangid_set (hb_subset_input_t *input)
{
return input->sets.name_languages;
}
/**
* hb_subset_input_layout_features_set:
* @input: a #hb_subset_input_t object.
*
* Gets the set of layout feature tags to retain, the caller should modify the
* set as needed.
*
* Return value: (transfer none): pointer to the #hb_set_t of feature tags.
*
* Since: 2.9.0
**/
HB_EXTERN hb_set_t *
hb_subset_input_layout_features_set (hb_subset_input_t *input)
{
return input->sets.layout_features;
}
/**
* hb_subset_input_drop_tables_set:
* @input: a #hb_subset_input_t object.
*
* Gets the set of table tags to drop, the caller should modify the set as
* needed.
*
* Return value: (transfer none): pointer to the #hb_set_t of table tags.
*
* Since: 2.9.0
**/
HB_EXTERN hb_set_t *
hb_subset_input_drop_tables_set (hb_subset_input_t *input)
{
return input->sets.drop_tables;
}
/**
* hb_subset_input_set:
* @input: a #hb_subset_input_t object.
@ -355,24 +286,6 @@ hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type)
return input->sets_iter () [set_type];
}
/**
* hb_subset_input_no_subset_tables_set:
* @input: a #hb_subset_input_t object.
*
* Gets the set of table tags which specifies tables that should not be
* subsetted, the caller should modify the set as needed.
*
* Return value: (transfer none): pointer to the #hb_set_t of table tags.
*
* Since: 2.9.0
**/
HB_EXTERN hb_set_t *
hb_subset_input_no_subset_tables_set (hb_subset_input_t *input)
{
return input->sets.no_subset_tables;
}
/**
* hb_subset_input_get_flags:
* @input: a #hb_subset_input_t object.
@ -448,118 +361,3 @@ hb_subset_input_get_user_data (const hb_subset_input_t *input,
{
return hb_object_get_user_data (input, key);
}
static void set_flag_value (hb_subset_input_t *input, hb_subset_flags_t flag, hb_bool_t value)
{
hb_subset_input_set_flags (input,
value
? hb_subset_input_get_flags (input) | flag
: hb_subset_input_get_flags (input) & ~flag);
}
void
hb_subset_input_set_drop_hints (hb_subset_input_t *subset_input,
hb_bool_t drop_hints)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_NO_HINTING,
drop_hints);
}
hb_bool_t
hb_subset_input_get_drop_hints (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_NO_HINTING);
}
void
hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input,
hb_bool_t desubroutinize)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_DESUBROUTINIZE,
desubroutinize);
}
hb_bool_t
hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_DESUBROUTINIZE);
}
void
hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input,
hb_bool_t retain_gids)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_RETAIN_GIDS,
retain_gids);
}
hb_bool_t
hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_RETAIN_GIDS);
}
void
hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input,
hb_bool_t name_legacy)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_NAME_LEGACY,
name_legacy);
}
hb_bool_t
hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_NAME_LEGACY);
}
void
hb_subset_input_set_overlaps_flag (hb_subset_input_t *subset_input,
hb_bool_t overlaps_flag)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG,
overlaps_flag);
}
hb_bool_t
hb_subset_input_get_overlaps_flag (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG);
}
void
hb_subset_input_set_notdef_outline (hb_subset_input_t *subset_input,
hb_bool_t notdef_outline)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_NOTDEF_OUTLINE,
notdef_outline);
}
hb_bool_t
hb_subset_input_get_notdef_outline (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_NOTDEF_OUTLINE);
}
void
hb_subset_input_set_no_prune_unicode_ranges (hb_subset_input_t *subset_input,
hb_bool_t no_prune_unicode_ranges)
{
return set_flag_value (subset_input,
HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES,
no_prune_unicode_ranges);
}
hb_bool_t
hb_subset_input_get_no_prune_unicode_ranges (hb_subset_input_t *subset_input)
{
return (bool) (hb_subset_input_get_flags (subset_input) & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES);
}

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

@ -330,14 +330,6 @@ _subset_table (hb_subset_plan_t *plan, hb_tag_t tag)
}
}
hb_face_t *
hb_subset (hb_face_t *source, hb_subset_input_t *input)
{
hb_face_t* face = hb_subset_or_fail (source, input);
if (face) return face;
return hb_face_get_empty ();
}
/**
* hb_subset_or_fail:
* @source: font face data to be subset.

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

@ -81,8 +81,8 @@ typedef enum { /*< flags >*/
/**
* hb_subset_sets_t:
* HB_SUBSET_SETS_GLYPH_INDEX: the set of glyph indexes to retain in the subset.
* HB_SUBSET_SETS_UNICODE: the set of unicode codepoints to retain in the subset.
* @HB_SUBSET_SETS_GLYPH_INDEX: the set of glyph indexes to retain in the subset.
* @HB_SUBSET_SETS_UNICODE: the set of unicode codepoints to retain in the subset.
* @HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG: the set of table tags which specifies tables that should not be
* subsetted.
* @HB_SUBSET_SETS_DROP_TABLE_TAG: the set of table tags which specifies tables which will be dropped
@ -132,21 +132,6 @@ hb_subset_input_unicode_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_glyph_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_nameid_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_namelangid_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_layout_features_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_no_subset_tables_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_drop_tables_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type);
@ -160,61 +145,6 @@ hb_subset_input_set_flags (hb_subset_input_t *input,
HB_EXTERN hb_face_t *
hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input);
/*
* ### Legacy API ###
* The methods below are part of the legacy harfbuzz subsetting API and will be
* Removed as of version 3.0.0
*/
HB_EXTERN void
hb_subset_input_set_drop_hints (hb_subset_input_t *subset_input,
hb_bool_t drop_hints);
HB_EXTERN hb_bool_t
hb_subset_input_get_drop_hints (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input,
hb_bool_t desubroutinize);
HB_EXTERN hb_bool_t
hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input,
hb_bool_t retain_gids);
HB_EXTERN hb_bool_t
hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input,
hb_bool_t name_legacy);
HB_EXTERN hb_bool_t
hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_overlaps_flag (hb_subset_input_t *subset_input,
hb_bool_t overlaps_flag);
HB_EXTERN hb_bool_t
hb_subset_input_get_overlaps_flag (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_notdef_outline (hb_subset_input_t *subset_input,
hb_bool_t notdef_outline);
HB_EXTERN hb_bool_t
hb_subset_input_get_notdef_outline (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_no_prune_unicode_ranges (hb_subset_input_t *subset_input,
hb_bool_t no_prune_unicode_ranges);
HB_EXTERN hb_bool_t
hb_subset_input_get_no_prune_unicode_ranges (hb_subset_input_t *subset_input);
HB_EXTERN hb_face_t *
hb_subset (hb_face_t *source, hb_subset_input_t *input);
HB_END_DECLS
#endif /* HB_SUBSET_H */

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -203,9 +203,7 @@ hb_ucd_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
}
#if HB_USE_ATEXIT
static void free_static_ucd_funcs ();
#endif
static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_ucd_unicode_funcs_lazy_loader_t>
{
@ -222,21 +220,17 @@ static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_
hb_unicode_funcs_make_immutable (funcs);
#if HB_USE_ATEXIT
atexit (free_static_ucd_funcs);
#endif
hb_atexit (free_static_ucd_funcs);
return funcs;
}
} static_ucd_funcs;
#if HB_USE_ATEXIT
static
static inline
void free_static_ucd_funcs ()
{
static_ucd_funcs.free_instance ();
}
#endif
hb_unicode_funcs_t *
hb_ucd_get_unicode_funcs ()

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

@ -6,14 +6,14 @@
*
* on file with this header:
*
* # emoji-data.txt
* # Date: 2020-01-28, 20:52:38 GMT
* # © 2020 Unicode®, Inc.
* # emoji-data-14.0.0.txt
* # Date: 2021-08-26, 17:22:22 GMT
* # © 2021 Unicode®, Inc.
* # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
* # For terms of use, see http://www.unicode.org/terms_of_use.html
* #
* # Emoji Data for UTS #51
* # Version: 13.0
* # Used with Emoji Version 14.0 and subsequent minor revisions (if any)
* #
* # For documentation and usage, see http://www.unicode.org/reports/tr51
*/

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

@ -239,9 +239,7 @@ struct hb_uniscribe_shaper_funcs_t
}
};
#if HB_USE_ATEXIT
static void free_static_uniscribe_shaper_funcs ();
#endif
static inline void free_static_uniscribe_shaper_funcs ();
static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_uniscribe_shaper_funcs_t,
hb_uniscribe_shaper_funcs_lazy_loader_t>
@ -254,9 +252,7 @@ static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unis
funcs->init ();
#if HB_USE_ATEXIT
atexit (free_static_uniscribe_shaper_funcs);
#endif
hb_atexit (free_static_uniscribe_shaper_funcs);
return funcs;
}
@ -270,13 +266,11 @@ static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unis
}
} static_uniscribe_shaper_funcs;
#if HB_USE_ATEXIT
static
static inline
void free_static_uniscribe_shaper_funcs ()
{
static_uniscribe_shaper_funcs.free_instance ();
}
#endif
static hb_uniscribe_shaper_funcs_t *
hb_uniscribe_shaper_get_funcs ()

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

@ -41,26 +41,26 @@ HB_BEGIN_DECLS
*
* The major component of the library version available at compile-time.
*/
#define HB_VERSION_MAJOR 2
#define HB_VERSION_MAJOR 3
/**
* HB_VERSION_MINOR:
*
* The minor component of the library version available at compile-time.
*/
#define HB_VERSION_MINOR 9
#define HB_VERSION_MINOR 0
/**
* HB_VERSION_MICRO:
*
* The micro component of the library version available at compile-time.
*/
#define HB_VERSION_MICRO 1
#define HB_VERSION_MICRO 0
/**
* HB_VERSION_STRING:
*
* A string literal containing the library version available at compile-time.
*/
#define HB_VERSION_STRING "2.9.1"
#define HB_VERSION_STRING "3.0.0"
/**
* HB_VERSION_ATLEAST:

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

@ -182,6 +182,9 @@
#include <cassert>
#include <cfloat>
#include <climits>
#ifdef _MSC_VER
# define _USE_MATH_DEFINES
#endif
#include <cmath>
#include <cstdarg>
#include <cstddef>
@ -405,6 +408,9 @@ static int HB_UNUSED _hb_errno = 0;
# define errno _hb_errno
#endif
#define HB_STMT_START do
#define HB_STMT_END while (0)
#if defined(HAVE_ATEXIT) && !defined(HB_USE_ATEXIT)
/* atexit() is only safe to be called from shared libraries on certain
* platforms. Whitelist.
@ -433,16 +439,23 @@ static int HB_UNUSED _hb_errno = 0;
*/
# define HB_USE_ATEXIT 1
# endif
#endif
#endif /* defined(HAVE_ATEXIT) && !defined(HB_USE_ATEXIT) */
#ifdef HB_NO_ATEXIT
# undef HB_USE_ATEXIT
#endif
#ifndef HB_USE_ATEXIT
# define HB_USE_ATEXIT 0
#endif
#define HB_STMT_START do
#define HB_STMT_END while (0)
#if !HB_USE_ATEXIT
# define hb_atexit(_) HB_STMT_START { if (0) (_) (); } HB_STMT_END
#else /* HB_USE_ATEXIT */
# ifdef HAVE_ATEXIT
# define hb_atexit atexit
# else
template <void (*function) (void)> struct hb_atexit_t { ~hb_atexit_t () { function (); } };
# define hb_atexit(f) static hb_atexit_t<f> _hb_atexit_##__LINE__;
# endif
#endif
/* Lets assert int types. Saves trouble down the road. */
static_assert ((sizeof (hb_codepoint_t) == 4), "");

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

@ -290,8 +290,13 @@ hb_gobject_headers = files(
'hb-gobject-structs.h',
)
ragel = find_program('ragel', required: false)
if not ragel.found()
ragel = find_program('ragel', version: '6.10', required: false)
has_ragel = ragel.found()
if not has_ragel and get_option('ragel_subproject')
ragel = subproject('ragel').get_variable('ragel')
has_ragel = true
endif
if not has_ragel
warning('You have to install ragel if you are going to develop HarfBuzz itself')
else
ragel_helper = find_program('gen-ragel-artifacts.py')
@ -301,7 +306,7 @@ else
build_by_default: true,
input: rl,
output: hh,
command: [ragel_helper, '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
command: [ragel_helper, ragel, '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
)
endforeach
endif

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

@ -13,7 +13,7 @@ hb-ot-shape-complex-arabic-joining-list.hh: gen-arabic-joining-list.py ArabicSha
./$^ > $@ || ($(RM) $@; false)
hb-ot-shape-complex-arabic-table.hh: gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
./$^ > $@ || ($(RM) $@; false)
hb-unicode-emoji-table.hh: gen-emoji-table.py emoji-data.txt
hb-unicode-emoji-table.hh: gen-emoji-table.py emoji-data.txt emoji-test.txt
./$^ > $@ || ($(RM) $@; false)
hb-ot-shape-complex-indic-table.cc: gen-indic-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt Blocks.txt
./$^ > $@ || ($(RM) $@; false)
@ -37,6 +37,8 @@ Blocks.txt:
curl -O https://unicode.org/Public/UCD/latest/ucd/Blocks.txt
emoji-data.txt:
curl -O https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt
emoji-test.txt:
curl -O https://www.unicode.org/Public/emoji/latest/emoji-test.txt
IndicSyllabicCategory.txt:
curl -O https://unicode.org/Public/UCD/latest/ucd/IndicSyllabicCategory.txt
IndicPositionalCategory.txt:

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

@ -5,7 +5,7 @@
MY_TEMP_DIR=`mktemp -d -t harfbuzz_update.XXXXXX` || exit 1
VERSION=2.9.1
VERSION=3.0.0
git clone https://github.com/harfbuzz/harfbuzz ${MY_TEMP_DIR}/harfbuzz
git -C ${MY_TEMP_DIR}/harfbuzz checkout ${VERSION}

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

@ -127,23 +127,36 @@ TEST(IntlListFormat, FormatToParts)
MOZ_RELEASE_ASSERT(list.append(MakeStringSpan(u"Bob")));
MOZ_RELEASE_ASSERT(list.append(MakeStringSpan(u"Charlie")));
ASSERT_TRUE(
lf->FormatToParts(list, [](const ListFormat::PartVector& parts) {
// 3 elements, and 2 literals.
EXPECT_EQ((parts.length()), (5u));
TestBuffer<char16_t> buf16;
mozilla::intl::ListFormat::PartVector parts;
ASSERT_TRUE(lf->FormatToParts(list, buf16, parts).isOk());
EXPECT_EQ(parts[0], (ListFormat::Part{ListFormat::PartType::Element,
MakeStringSpan(u"Alice")}));
EXPECT_EQ(parts[1], (ListFormat::Part{ListFormat::PartType::Literal,
MakeStringSpan(u", ")}));
EXPECT_EQ(parts[2], (ListFormat::Part{ListFormat::PartType::Element,
MakeStringSpan(u"Bob")}));
EXPECT_EQ(parts[3], (ListFormat::Part{ListFormat::PartType::Literal,
MakeStringSpan(u", and ")}));
EXPECT_EQ(parts[4], (ListFormat::Part{ListFormat::PartType::Element,
MakeStringSpan(u"Charlie")}));
return true;
}).isOk());
std::u16string_view strView = buf16.get_string_view();
ASSERT_EQ(strView, u"Alice, Bob, and Charlie");
// 3 elements, and 2 literals.
ASSERT_EQ((parts.length()), (5u));
auto getSubStringView = [strView, &parts](size_t index) {
size_t pos = index == 0 ? 0 : parts[index - 1].second;
size_t count = parts[index].second - pos;
return strView.substr(pos, count);
};
ASSERT_EQ(parts[0].first, ListFormat::PartType::Element);
ASSERT_EQ(getSubStringView(0), u"Alice");
ASSERT_EQ(parts[1].first, ListFormat::PartType::Literal);
ASSERT_EQ(getSubStringView(1), u", ");
ASSERT_EQ(parts[2].first, ListFormat::PartType::Element);
ASSERT_EQ(getSubStringView(2), u"Bob");
ASSERT_EQ(parts[3].first, ListFormat::PartType::Literal);
ASSERT_EQ(getSubStringView(3), u", and ");
ASSERT_EQ(parts[4].first, ListFormat::PartType::Element);
ASSERT_EQ(getSubStringView(4), u"Charlie");
}
} // namespace mozilla::intl

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

@ -2,8 +2,6 @@
* 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/. */
#include "unicode/udateintervalformat.h"
#include "DateTimeFormatUtils.h"
#include "ScopedICUObject.h"
@ -72,63 +70,15 @@ DateIntervalFormat::~DateIntervalFormat() {
udtitvfmt_close(mDateIntervalFormat.GetMut());
}
AutoFormattedDateInterval::AutoFormattedDateInterval() {
mFormatted = udtitvfmt_openResult(&mError);
if (U_FAILURE(mError)) {
mFormatted = nullptr;
}
}
const UFormattedValue* AutoFormattedDateInterval::Value() const {
if (!IsValid()) {
return nullptr;
}
UErrorCode status = U_ZERO_ERROR;
const UFormattedValue* value = udtitvfmt_resultAsValue(mFormatted, &status);
if (U_FAILURE(status)) {
return nullptr;
}
return value;
}
Result<Span<const char16_t>, ICUError> AutoFormattedDateInterval::ToSpan()
const {
if (!IsValid()) {
return Err(GetError());
}
const UFormattedValue* value = Value();
if (!value) {
return Err(ICUError::InternalError);
}
UErrorCode status = U_ZERO_ERROR;
int32_t strLength;
const char16_t* str = ufmtval_getString(value, &strLength, &status);
if (U_FAILURE(status)) {
return Err(ToICUError(status));
}
return Span{str, AssertedCast<size_t>(strLength)};
}
AutoFormattedDateInterval::~AutoFormattedDateInterval() {
if (mFormatted) {
udtitvfmt_closeResult(mFormatted);
}
}
ICUResult DateIntervalFormat::TryFormatCalendar(
const Calendar& aStart, const Calendar& aEnd,
AutoFormattedDateInterval& aFormatted, bool* aPracticallyEqual) const {
MOZ_ASSERT(aFormatted.IsValid());
UErrorCode status = U_ZERO_ERROR;
udtitvfmt_formatCalendarToResult(
mDateIntervalFormat.GetConst(), aStart.GetUCalendar(),
aEnd.GetUCalendar(), aFormatted.GetUFormattedDateInterval(), &status);
udtitvfmt_formatCalendarToResult(mDateIntervalFormat.GetConst(),
aStart.GetUCalendar(), aEnd.GetUCalendar(),
aFormatted.GetFormatted(), &status);
if (U_FAILURE(status)) {
return Err(ToICUError(status));
@ -145,7 +95,7 @@ ICUResult DateIntervalFormat::TryFormatDateTime(
UErrorCode status = U_ZERO_ERROR;
udtitvfmt_formatToResult(mDateIntervalFormat.GetConst(), aStart, aEnd,
aFormatted.GetUFormattedDateInterval(), &status);
aFormatted.GetFormatted(), &status);
if (U_FAILURE(status)) {
return Err(ToICUError(status));
}

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

@ -11,16 +11,16 @@
#include "mozilla/Span.h"
#include "mozilla/UniquePtr.h"
#include "unicode/udateintervalformat.h"
#include "unicode/utypes.h"
struct UDateIntervalFormat;
struct UFormattedDateInterval;
struct UFormattedValue;
namespace mozilla::intl {
class AutoFormattedDateInterval;
class Calendar;
using AutoFormattedDateInterval =
AutoFormattedResult<UFormattedDateInterval, udtitvfmt_openResult,
udtitvfmt_resultAsValue, udtitvfmt_closeResult>;
/**
* This component is a Mozilla-focused API for the date range formatting
* provided by ICU. This DateIntervalFormat class helps to format the range
@ -101,59 +101,6 @@ class DateIntervalFormat final {
ICUPointer<UDateIntervalFormat> mDateIntervalFormat =
ICUPointer<UDateIntervalFormat>(nullptr);
};
/**
* A RAII class to hold the formatted value of DateIntervalFormat.
*
* The caller will need to create this AutoFormattedDateInterval on the stack,
* and call IsValid() method to check if the native object
* (UFormattedDateInterval) has been created properly, and then passes this
* object to the methods of DateIntervalFormat.
* The result of the DateIntervalFormat's method will be stored in this object,
* the caller can use ToSpan() method to get the formatted string, or pass it
* to DateIntervalFormat::TryFormattedToParts to get the DateTimePart vector.
*
* The formatted value will be released once this class is destructed.
*/
class MOZ_RAII AutoFormattedDateInterval {
public:
AutoFormattedDateInterval();
~AutoFormattedDateInterval();
AutoFormattedDateInterval(const AutoFormattedDateInterval& other) = delete;
AutoFormattedDateInterval& operator=(const AutoFormattedDateInterval& other) =
delete;
AutoFormattedDateInterval(AutoFormattedDateInterval&& other) = delete;
AutoFormattedDateInterval& operator=(AutoFormattedDateInterval&& other) =
delete;
/**
* Check if the native UFormattedDateInterval was created successfully.
*/
bool IsValid() const { return !!mFormatted; }
/**
* Get error code if IsValid() returns false.
*/
ICUError GetError() const { return ToICUError(mError); }
/**
* Get the formatted result.
*/
Result<Span<const char16_t>, ICUError> ToSpan() const;
private:
friend class DateIntervalFormat;
UFormattedDateInterval* GetUFormattedDateInterval() const {
return mFormatted;
}
const UFormattedValue* Value() const;
UFormattedDateInterval* mFormatted = nullptr;
UErrorCode mError = U_ZERO_ERROR;
};
} // namespace mozilla::intl
#endif

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

@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/intl/ICU4CGlue.h"
#include "unicode/uformattedvalue.h"
namespace mozilla::intl {
@ -21,4 +22,17 @@ ICUResult ToICUResult(UErrorCode status) {
return Err(ToICUError(status));
}
// static
Result<Span<const char16_t>, ICUError> FormattedResult::ToSpanImpl(
const UFormattedValue* value) {
UErrorCode status = U_ZERO_ERROR;
int32_t strLength;
const char16_t* str = ufmtval_getString(value, &strLength, &status);
if (U_FAILURE(status)) {
return Err(ToICUError(status));
}
return Span{str, AssertedCast<size_t>(strLength)};
}
} // namespace mozilla::intl

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

@ -29,6 +29,7 @@
#include <stdint.h>
#include <string_view>
struct UFormattedValue;
namespace mozilla::intl {
static inline const char* IcuLocale(const char* aLocale) {
@ -544,6 +545,110 @@ class AvailableLocalesEnumeration final {
Iterator end() const { return Iterator(mLocalesCount); }
};
/**
* A helper class to wrap calling ICU function in cpp file so we don't have to
* include the ICU header here.
*/
class FormattedResult {
protected:
static Result<Span<const char16_t>, ICUError> ToSpanImpl(
const UFormattedValue* value);
};
/**
* A RAII class to hold the formatted value of format result.
*
* The caller will need to create this AutoFormattedResult on the stack, with
* the following parameters:
* 1. Native ICU type.
* 2. An ICU function which opens the result.
* 3. An ICU function which can get the result as UFormattedValue.
* 4. An ICU function which closes the result.
*
* After the object is created, caller needs to call IsValid() method to check
* if the native object has been created properly, and then passes this
* object to other format interfaces.
* The format result will be stored in this object, the caller can use ToSpan()
* method to get the formatted string.
*
* The methods GetFormatted() and Value() are private methods since they expose
* native ICU types. If the caller wants to call these methods, the caller needs
* to register itself as a friend class in AutoFormattedResult.
*
* The formatted value and the native ICU object will be released once this
* class is destructed.
*/
template <typename T, T*(Open)(UErrorCode*),
const UFormattedValue*(GetValue)(const T*, UErrorCode*),
void(Close)(T*)>
class MOZ_RAII AutoFormattedResult : FormattedResult {
public:
AutoFormattedResult() {
mFormatted = Open(&mError);
if (U_FAILURE(mError)) {
mFormatted = nullptr;
}
}
~AutoFormattedResult() {
if (mFormatted) {
Close(mFormatted);
}
}
AutoFormattedResult(const AutoFormattedResult& other) = delete;
AutoFormattedResult& operator=(const AutoFormattedResult& other) = delete;
AutoFormattedResult(AutoFormattedResult&& other) = delete;
AutoFormattedResult& operator=(AutoFormattedResult&& other) = delete;
/**
* Check if the native UFormattedDateInterval was created successfully.
*/
bool IsValid() const { return !!mFormatted; }
/**
* Get error code if IsValid() returns false.
*/
ICUError GetError() const { return ToICUError(mError); }
/**
* Get the formatted result.
*/
Result<Span<const char16_t>, ICUError> ToSpan() const {
if (!IsValid()) {
return Err(GetError());
}
const UFormattedValue* value = Value();
if (!value) {
return Err(ICUError::InternalError);
}
return ToSpanImpl(value);
}
private:
friend class DateIntervalFormat;
friend class ListFormat;
T* GetFormatted() const { return mFormatted; }
const UFormattedValue* Value() const {
if (!IsValid()) {
return nullptr;
}
UErrorCode status = U_ZERO_ERROR;
const UFormattedValue* value = GetValue(mFormatted, &status);
if (U_FAILURE(status)) {
return nullptr;
}
return value;
};
T* mFormatted = nullptr;
UErrorCode mError = U_ZERO_ERROR;
};
} // namespace mozilla::intl
#endif /* intl_components_ICUUtils_h */

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

@ -55,46 +55,13 @@ ListFormat::~ListFormat() {
return ULISTFMT_WIDTH_WIDE;
}
ICUResult ListFormat::FormatToParts(const StringList& list,
PartsCallback&& callback) {
UErrorCode status = U_ZERO_ERROR;
mozilla::Vector<const char16_t*, DEFAULT_LIST_LENGTH> u16strings;
mozilla::Vector<int32_t, DEFAULT_LIST_LENGTH> u16stringLens;
MOZ_TRY(ConvertStringListToVectors(list, u16strings, u16stringLens));
UFormattedList* formatted = ulistfmt_openResult(&status);
if (U_FAILURE(status)) {
return Err(ICUError::InternalError);
}
ScopedICUObject<UFormattedList, ulistfmt_closeResult> toClose(formatted);
ulistfmt_formatStringsToResult(mListFormatter.GetConst(), u16strings.begin(),
u16stringLens.begin(), int32_t(list.length()),
formatted, &status);
if (U_FAILURE(status)) {
return Err(ICUError::InternalError);
}
const UFormattedValue* formattedValue =
ulistfmt_resultAsValue(formatted, &status);
if (U_FAILURE(status)) {
return Err(ICUError::InternalError);
}
int32_t formattedCharsLen;
const char16_t* formattedChars =
ufmtval_getString(formattedValue, &formattedCharsLen, &status);
if (U_FAILURE(status)) {
return Err(ICUError::InternalError);
}
size_t formattedSize = AssertedCast<size_t>(formattedCharsLen);
mozilla::Span<const char16_t> formattedSpan{formattedChars, formattedSize};
ICUResult ListFormat::FormattedToParts(const UFormattedValue* formattedValue,
size_t formattedSize,
PartVector& parts) {
size_t lastEndIndex = 0;
PartVector parts;
auto AppendPart = [&](PartType type, size_t beginIndex, size_t endIndex) {
if (!parts.emplaceBack(type, formattedSpan.FromTo(beginIndex, endIndex))) {
auto AppendPart = [&](PartType type, size_t endIndex) {
if (!parts.emplaceBack(type, endIndex)) {
return false;
}
@ -102,6 +69,7 @@ ICUResult ListFormat::FormatToParts(const StringList& list,
return true;
};
UErrorCode status = U_ZERO_ERROR;
UConstrainedFieldPosition* fpos = ucfpos_open(&status);
if (U_FAILURE(status)) {
return Err(ICUError::InternalError);
@ -142,27 +110,23 @@ ICUResult ListFormat::FormatToParts(const StringList& list,
"finish as expected");
if (lastEndIndex < beginIndex) {
if (!AppendPart(PartType::Literal, lastEndIndex, beginIndex)) {
if (!AppendPart(PartType::Literal, beginIndex)) {
return Err(ICUError::InternalError);
}
}
if (!AppendPart(PartType::Element, beginIndex, endIndex)) {
if (!AppendPart(PartType::Element, endIndex)) {
return Err(ICUError::InternalError);
}
}
// Append any final literal.
if (lastEndIndex < formattedSize) {
if (!AppendPart(PartType::Literal, lastEndIndex, formattedSize)) {
if (!AppendPart(PartType::Literal, formattedSize)) {
return Err(ICUError::InternalError);
}
}
if (!callback(parts)) {
return Err(ICUError::InternalError);
}
return Ok();
}
} // namespace mozilla::intl

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

@ -4,10 +4,9 @@
#ifndef intl_components_ListFormat_h_
#define intl_components_ListFormat_h_
#include <functional>
#include "mozilla/CheckedInt.h"
#include "mozilla/intl/ICU4CGlue.h"
#include "mozilla/PodOperations.h"
#include "mozilla/Result.h"
#include "mozilla/Vector.h"
#include "unicode/ulistformatter.h"
@ -98,35 +97,75 @@ class ListFormat final {
/**
* The corresponding list of parts according to the effective locale and the
* formatting options of ListFormat.
* Each part has a [[Type]] field, which must be "element" or "literal".
* Each part has a [[Type]] field, which must be "element" or "literal", and a
* [[Value]] field.
*
* https://tc39.es/ecma402/#sec-createpartsfromlist
* To store Part more efficiently, it doesn't store the ||Value|| of type
* string in this struct. Instead, it stores the end index of the string in
* the buffer(which is passed to ListFormat::FormatToParts()). The begin index
* of the ||Value|| is the index of the previous part.
*
* Buffer
* 0 i j
* +---------------+---------------+---------------+
* | Part[0].Value | Part[1].Value | Part[2].Value | ....
* +---------------+---------------+---------------+
*
* Part[0].index is i. Part[0].Value is stored in the Buffer[0..i].
* Part[1].index is j. Part[1].Value is stored in the Buffer[i..j].
*
* See https://tc39.es/ecma402/#sec-createpartsfromlist
*/
enum class PartType {
Element,
Literal,
};
using Part = std::pair<PartType, mozilla::Span<const char16_t>>;
// The 2nd field is the end index to the buffer as mentioned above.
using Part = std::pair<PartType, size_t>;
using PartVector = mozilla::Vector<Part, DEFAULT_LIST_LENGTH>;
using PartsCallback = std::function<bool(const PartVector& parts)>;
/**
* Format the list to a list of parts, and the callback will be called with
* the formatted parts.
*
* In the callback, it has a argument of type PartVector&, which is the vector
* of the formatted parts. The life-cycle of the PartVector is valid only
* during the callback call, so the caller of FormatToParts needs to copy the
* data in PartVector to its own storage during the callback.
*
* The PartVector contains mozilla::Span which point to memory which may be
* overridden when the next format method is called.
* Format the list to a list of parts, and store the formatted result of
* UTF-16 string into buffer, and formatted parts into the vector 'parts'.
*
* See:
* https://tc39.es/ecma402/#sec-Intl.ListFormat.prototype.formatToParts
* https://tc39.es/ecma402/#sec-formatlisttoparts
*/
ICUResult FormatToParts(const StringList& list, PartsCallback&& callback);
template <typename Buffer>
ICUResult FormatToParts(const StringList& list, Buffer& buffer,
PartVector& parts) {
static_assert(std::is_same_v<typename Buffer::CharType, char16_t>,
"Currently only UTF-16 buffers are supported.");
mozilla::Vector<const char16_t*, DEFAULT_LIST_LENGTH> u16strings;
mozilla::Vector<int32_t, DEFAULT_LIST_LENGTH> u16stringLens;
MOZ_TRY(ConvertStringListToVectors(list, u16strings, u16stringLens));
AutoFormattedList formatted;
UErrorCode status = U_ZERO_ERROR;
ulistfmt_formatStringsToResult(
mListFormatter.GetConst(), u16strings.begin(), u16stringLens.begin(),
int32_t(list.length()), formatted.GetFormatted(), &status);
if (U_FAILURE(status)) {
return Err(ToICUError(status));
}
auto spanResult = formatted.ToSpan();
if (spanResult.isErr()) {
return spanResult.propagateErr();
}
auto formattedSpan = spanResult.unwrap();
if (!FillBuffer(formattedSpan, buffer)) {
return Err(ICUError::OutOfMemory);
}
const UFormattedValue* value = formatted.Value();
if (!value) {
return Err(ICUError::InternalError);
}
return FormattedToParts(value, buffer.length(), parts);
}
private:
ListFormat() = delete;
@ -169,6 +208,13 @@ class ListFormat final {
return Ok{};
}
using AutoFormattedList =
AutoFormattedResult<UFormattedList, ulistfmt_openResult,
ulistfmt_resultAsValue, ulistfmt_closeResult>;
ICUResult FormattedToParts(const UFormattedValue* formattedValue,
size_t formattedSize, PartVector& parts);
static UListFormatterType ToUListFormatterType(Type type);
static UListFormatterWidth ToUListFormatterWidth(Style style);
};

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

@ -255,57 +255,66 @@ static bool FormatList(JSContext* cx, mozilla::intl::ListFormat* lf,
static bool FormatListToParts(JSContext* cx, mozilla::intl::ListFormat* lf,
const mozilla::intl::ListFormat::StringList& list,
MutableHandleValue result) {
auto formatResult = lf->FormatToParts(
list,
[cx,
&result](const mozilla::intl::ListFormat::PartVector& parts) -> bool {
RootedArrayObject partsArray(
cx, NewDenseFullyAllocatedArray(cx, parts.length()));
if (!partsArray) {
return false;
}
partsArray->ensureDenseInitializedLength(0, parts.length());
RootedObject singlePart(cx);
RootedValue val(cx);
size_t index = 0;
for (const mozilla::intl::ListFormat::Part& part : parts) {
singlePart = NewPlainObject(cx);
if (!singlePart) {
return false;
}
if (part.first == mozilla::intl::ListFormat::PartType::Element) {
val = StringValue(cx->names().element);
} else {
val = StringValue(cx->names().literal);
}
if (!DefineDataProperty(cx, singlePart, cx->names().type, val)) {
return false;
}
JSString* partStr = NewStringCopy<CanGC>(cx, part.second);
if (!partStr) {
return false;
}
val = StringValue(partStr);
if (!DefineDataProperty(cx, singlePart, cx->names().value, val)) {
return false;
}
partsArray->initDenseElement(index++, ObjectValue(*singlePart));
}
MOZ_ASSERT(index == parts.length());
result.setObject(*partsArray);
return true;
});
intl::FormatBuffer<char16_t, intl::INITIAL_CHAR_BUFFER_SIZE> buffer(cx);
mozilla::intl::ListFormat::PartVector parts;
auto formatResult = lf->FormatToParts(list, buffer, parts);
if (formatResult.isErr()) {
js::intl::ReportInternalError(cx, formatResult.unwrapErr());
intl::ReportInternalError(cx, formatResult.unwrapErr());
return false;
}
RootedString overallResult(cx, buffer.toString(cx));
if (!overallResult) {
return false;
}
RootedArrayObject partsArray(cx,
NewDenseFullyAllocatedArray(cx, parts.length()));
if (!partsArray) {
return false;
}
partsArray->ensureDenseInitializedLength(0, parts.length());
RootedObject singlePart(cx);
RootedValue val(cx);
size_t index = 0;
size_t beginIndex = 0;
for (const mozilla::intl::ListFormat::Part& part : parts) {
singlePart = NewPlainObject(cx);
if (!singlePart) {
return false;
}
if (part.first == mozilla::intl::ListFormat::PartType::Element) {
val = StringValue(cx->names().element);
} else {
val = StringValue(cx->names().literal);
}
if (!DefineDataProperty(cx, singlePart, cx->names().type, val)) {
return false;
}
MOZ_ASSERT(part.second > beginIndex);
JSLinearString* partStr = NewDependentString(cx, overallResult, beginIndex,
part.second - beginIndex);
if (!partStr) {
return false;
}
val = StringValue(partStr);
if (!DefineDataProperty(cx, singlePart, cx->names().value, val)) {
return false;
}
beginIndex = part.second;
partsArray->initDenseElement(index++, ObjectValue(*singlePart));
}
MOZ_ASSERT(index == parts.length());
MOZ_ASSERT(beginIndex == buffer.length());
result.setObject(*partsArray);
return true;
}

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

@ -70,10 +70,14 @@ struct NurseryChunk : public ChunkBase {
MemCheckKind checkKind);
void poisonAfterEvict(size_t extent = ChunkSize);
// The end of the range is always ChunkSize.
void markPagesUnusedHard(size_t from);
// The start of the range is always the beginning of the chunk.
[[nodiscard]] bool markPagesInUseHard(size_t to);
// Mark pages from startOffset to the end of the chunk as unused. The start
// offset must be after the first page, which contains the chunk header and is
// not marked as unused.
void markPagesUnusedHard(size_t startOffset);
// Mark pages from the second page of the chunk to endOffset as in use,
// following a call to markPagesUnusedHard.
[[nodiscard]] bool markPagesInUseHard(size_t endOffset);
uintptr_t start() const { return uintptr_t(&data); }
uintptr_t end() const { return uintptr_t(this) + ChunkSize; }
@ -109,17 +113,22 @@ inline void js::NurseryChunk::poisonAfterEvict(size_t extent) {
JS_SWEPT_NURSERY_PATTERN, MemCheckKind::MakeNoAccess);
}
inline void js::NurseryChunk::markPagesUnusedHard(size_t from) {
MOZ_ASSERT(from >= sizeof(ChunkBase)); // Don't touch the header.
MOZ_ASSERT(from <= ChunkSize);
uintptr_t start = uintptr_t(this) + from;
MarkPagesUnusedHard(reinterpret_cast<void*>(start), ChunkSize - from);
inline void js::NurseryChunk::markPagesUnusedHard(size_t startOffset) {
MOZ_ASSERT(startOffset >= sizeof(ChunkBase)); // Don't touch the header.
MOZ_ASSERT(startOffset >= SystemPageSize());
MOZ_ASSERT(startOffset <= ChunkSize);
uintptr_t start = uintptr_t(this) + startOffset;
size_t length = ChunkSize - startOffset;
MarkPagesUnusedHard(reinterpret_cast<void*>(start), length);
}
inline bool js::NurseryChunk::markPagesInUseHard(size_t to) {
MOZ_ASSERT(to >= sizeof(ChunkBase));
MOZ_ASSERT(to <= ChunkSize);
return MarkPagesInUseHard(this, to);
inline bool js::NurseryChunk::markPagesInUseHard(size_t endOffset) {
MOZ_ASSERT(endOffset >= sizeof(ChunkBase));
MOZ_ASSERT(endOffset >= SystemPageSize());
MOZ_ASSERT(endOffset <= ChunkSize);
uintptr_t start = uintptr_t(this) + SystemPageSize();
size_t length = endOffset - SystemPageSize();
return MarkPagesInUseHard(reinterpret_cast<void*>(start), length);
}
// static

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

@ -84,7 +84,7 @@ bool GCSchedulingTunables::setParameter(JSGCParamKey key, uint32_t value,
gcMaxBytes_ = value;
break;
case JSGC_MIN_NURSERY_BYTES:
if (value < ArenaSize || value >= MaxNurseryBytes) {
if (value < SystemPageSize() || value >= MaxNurseryBytes) {
return false;
}
value = Nursery::roundSize(value);
@ -94,7 +94,7 @@ bool GCSchedulingTunables::setParameter(JSGCParamKey key, uint32_t value,
gcMinNurseryBytes_ = value;
break;
case JSGC_MAX_NURSERY_BYTES:
if (value < ArenaSize || value >= MaxNurseryBytes) {
if (value < SystemPageSize() || value >= MaxNurseryBytes) {
return false;
}
value = Nursery::roundSize(value);

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

@ -175,10 +175,21 @@ for ( let [pages,maxpages] of [[pages_vanilla, pages_vanilla+100],
WebAssembly.RuntimeError,
/index out of bounds/);
done:
if (pages < maxpages) {
assertEq(ins.exports.grow1(), pages);
assertEq(ins.exports.grow1(), pages+1);
assertEq(ins.exports.grow1(), pages+2);
let res = 0;
res = ins.exports.grow1();
if (res == -1) break done;
assertEq(res, pages);
res = ins.exports.grow1();
if (res == -1) break done;
assertEq(res, pages+1);
res = ins.exports.grow1();
if (res == -1) break done;
assertEq(res, pages+2);
assertEq(ins.exports.get_varaddr((pages+2)*pagesz), 0);
@ -186,7 +197,9 @@ for ( let [pages,maxpages] of [[pages_vanilla, pages_vanilla+100],
while (ins.exports.grow1() != -1) {
i++;
}
assertEq(i, maxpages-pages-3);
// We can't assert equality because we might OOM before we get to the
// max, but we can assert we did not go beyond that.
assertEq(i <= maxpages-pages-3, true);
}
}

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

@ -209,6 +209,9 @@ class JSXrayTraits : public XrayTraits {
const JS::CallArgs& args, const js::Wrapper& baseInstance) {
JSXrayTraits& self = JSXrayTraits::singleton;
JS::RootedObject holder(cx, self.ensureHolder(cx, wrapper));
if (!holder) {
return false;
}
if (xpc::JSXrayTraits::getProtoKey(holder) == JSProto_Function) {
return baseInstance.call(cx, wrapper, args);
}
@ -225,6 +228,9 @@ class JSXrayTraits : public XrayTraits {
bool getPrototype(JSContext* cx, JS::HandleObject wrapper,
JS::HandleObject target, JS::MutableHandleObject protop) {
JS::RootedObject holder(cx, ensureHolder(cx, wrapper));
if (!holder) {
return false;
}
JSProtoKey key = getProtoKey(holder);
if (isPrototype(holder)) {
JSProtoKey protoKey = js::InheritanceProtoKeyForStandardClass(key);

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

@ -9,7 +9,7 @@
<iframe type="content" id="f" src="about:blank" style="border:1px solid black;"/>
<script type="application/javascript">
<script>
<![CDATA[
SimpleTest.waitForExplicitFinish();
@ -17,7 +17,7 @@
for (var name of imports) {
window[name] = window.arguments[0][name];
}
function snapshot(win) {
var el = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
el.width = win.innerWidth;
@ -33,7 +33,10 @@
var color = '#2468AC';
var prefs = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefBranch);
prefs.setCharPref('browser.display.background_color', color);
var backgroundPref = matchMedia('(prefers-color-scheme:dark)').matches
? 'browser.display.background_color.dark'
: 'browser.display.background_color';
prefs.setCharPref(backgroundPref, color);
// On Windows, this preference is true by default, we make it
// false to ensure we're using the color set above for our reference.
prefs.setBoolPref('browser.display.use_system_colors', false);
@ -42,7 +45,7 @@
var f = document.getElementById("f");
var testCanvas = snapshot(f.contentWindow);
prefs.clearUserPref('browser.display.background_color');
prefs.clearUserPref(backgroundPref);
// Reset sys colors pref so we're using the system color for our test.
prefs.clearUserPref('browser.display.use_system_colors');

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

@ -983,27 +983,9 @@ input:is([type=date], [type=time], [type=datetime-local]):is(:disabled, :read-on
}
input:autofill {
filter: grayscale(21%) brightness(88%) contrast(161%) invert(10%) sepia(40%) saturate(206%);
}
@supports -moz-bool-pref("layout.css.autofill.background") {
/* We find a few pages where using `filter` causes issues because it
* changes the z-order (see bug 1687682, bug 1727950).
*
* The idea behind using background-image instead of plain background-color,
* is that it's less likely to be overridden by the page.
*
* The color is chosen so that you get the same final color on a white
* background as the filter above (#fffcc8), but with some alpha so as to
* prevent fully illegible text.
*
* NOTE(emilio): Keep the color in sync with kAutofillColor in
* nsNativeBasicTheme!
*/
input:autofill {
filter: none;
background-image: linear-gradient(rgba(255, 249, 145, 0.5), rgba(255, 249, 145, 0.5));
}
/* The idea behind using background-image instead of plain background-color
* is that it's less likely to be overridden by the page. */
background-image: linear-gradient(-moz-autofill-background, -moz-autofill-background);
}
input:-moz-autofill-preview {

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

@ -17,6 +17,7 @@ const NON_CONTENT_ACCESSIBLE_VALUES = {
"text-select-background",
"text-select-background-disabled",
"text-select-background-attention",
"-moz-autofill-background",
],
"display": [
"-moz-deck",

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

@ -216,10 +216,10 @@ do this using Mozillas ``try`` server. To submit a GeckoView patch to
.. code:: bash
./mach try fuzzy -q "android"
./mach try auto
This will run all of the Android test suite. If your patch passes on
``try`` you can be (fairly) confident that it will land successfully
This will automatically select tests to run from our suite. If your patch
passes on ``try`` you can be (fairly) confident that it will land successfully
after review.
Tagging a reviewer

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

@ -6824,12 +6824,6 @@
mirror: always
rust: true
# Whether to use background-image to style autofill controls.
- name: layout.css.autofill.background
type: bool
value: true
mirror: always
# Whether the `:-moz-submit-invalid` pseudo-class is exposed to content.
- name: layout.css.moz-submit-invalid.enabled
type: RelaxedAtomicBool
@ -6857,7 +6851,7 @@
# Whether the `color-scheme` css property and meta tags are enabled.
- name: layout.css.color-scheme.enabled
type: RelaxedAtomicBool
value: false
value: @EARLY_BETA_OR_EARLIER@
mirror: always
rust: true

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

@ -713,6 +713,19 @@ pref("ui.textHighlightBackground", "#ef0fff");
// The foreground color for the matched text in findbar highlighting
// Used with nsISelectionController::SELECTION_FIND
pref("ui.textHighlightForeground", "#ffffff");
// The background color for :autofill-ed inputs.
//
// In the past, we used the following `filter` to paint autofill backgrounds:
//
// grayscale(21%) brightness(88%) contrast(161%) invert(10%) sepia(40%) saturate(206%);
//
// but there are some pages where using `filter` caused issues because it
// changes the z-order (see bug 1687682, bug 1727950).
//
// The color is chosen so that you get the same final color on a white
// background as the filter above (#fffcc8), but with some alpha so as to
// prevent fully illegible text.
pref("ui.-moz-autofill-background", "rgba(255, 249, 145, .5)");
// We want the ability to forcibly disable platform a11y, because
// some non-a11y-related components attempt to bring it up. See bug

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

@ -7132,7 +7132,7 @@ org.zw
// newGTLDs
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2021-10-08T15:12:46Z
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2021-10-28T15:13:35Z
// This list is auto-generated, don't edit it manually.
// aaa : 2015-02-26 American Automobile Association, Inc.
aaa
@ -10317,9 +10317,6 @@ xin
// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED OY
在线
// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd.
大众汽车
// xn--3pxu8k : 2015-01-15 VeriSign Sarl
点看

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

@ -390,6 +390,7 @@ class nsHttpTransaction final : public nsAHttpTransaction,
Atomic<uint32_t> mCapsToClear{0};
Atomic<bool, ReleaseAcquire> mResponseIsComplete{false};
Atomic<bool, ReleaseAcquire> mClosed{false};
Atomic<bool, Relaxed> mIsHttp3Used{false};
// True iff WriteSegments was called while this transaction should be
// throttled (stop reading) Used to resume read on unblock of reading. Conn
@ -420,8 +421,6 @@ class nsHttpTransaction final : public nsAHttpTransaction,
bool mContentDecodingCheck{false};
bool mDeferredSendProgress{false};
bool mWaitingOnPipeOut{false};
bool mIsHttp3Used = false;
bool mDoNotRemoveAltSvc{false};
// mClosed := transaction has been explicitly closed

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

@ -13,10 +13,7 @@ const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
const { X509 } = ChromeUtils.import(
"resource://gre/modules/psm/X509.jsm",
null
);
const { X509 } = ChromeUtils.import("resource://gre/modules/psm/X509.jsm");
const INTERMEDIATES_BUCKET_PREF =
"security.remote_settings.intermediates.bucket";

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

@ -1149,4 +1149,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1643885328202000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1644230855305000);

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -1,5 +1,455 @@
{
"data": [
{
"schema": 1635735519825,
"derHash": "DhC93udRLb156/C09I/u18g8K9PdgXZVZfT/EQt7+kI=",
"subject": "CN=Cybertrust Japan Extended Validation Server CA,O=Cybertrust Japan Co.\\, Ltd.,C=JP",
"subjectDN": "MGsxCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjE3MDUGA1UEAxMuQ3liZXJ0cnVzdCBKYXBhbiBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlcnZlciBDQQ==",
"whitelist": false,
"attachment": {
"hash": "e3d590ab4b71fbd20183713733b3253b32ef24a73382153319f8916fc66d3c1d",
"size": 1678,
"filename": "VfKdH3KeIRG8iIljlHEf2ck5OXG4Z8_yf2AOohCgqgk=.pem",
"location": "security-state-staging/intermediates/222e4d33-ee5a-4885-add5-c30b4495b281.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "VfKdH3KeIRG8iIljlHEf2ck5OXG4Z8/yf2AOohCgqgk=",
"crlite_enrolled": false,
"id": "92292d1f-471b-4db3-ba30-6f423a7d649b",
"last_modified": 1635757203583
},
{
"schema": 1635584246419,
"derHash": "FfrEJaqEQEs2L6NInrZ9BV1donb4aFxNaY2hgw1CDw8=",
"subject": "CN=COMODO RSA Client Authentication and Secure Email CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB",
"subjectDN": "MIGXMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE9MDsGA1UEAxM0Q09NT0RPIFJTQSBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQQ==",
"whitelist": false,
"attachment": {
"hash": "6d952d782fa2f84e580c545480b40eeae3fab20a3eba7b734b158271c48b1117",
"size": 2105,
"filename": "mHI0vDHAQ12vglM3cO2DlsvGPmhqena8_DpLQz3BaYs=.pem",
"location": "security-state-staging/intermediates/df4e2dce-92b3-41f1-8479-4de071dddbfe.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "mHI0vDHAQ12vglM3cO2DlsvGPmhqena8/DpLQz3BaYs=",
"crlite_enrolled": false,
"id": "e9149e45-f71f-4714-887f-be55784c958e",
"last_modified": 1635735518690
},
{
"schema": 1635581142762,
"derHash": "M9VzWYMfh3VObnVda1tW5+cSl93f6h1jlwhmBCgPb/w=",
"subject": "CN=Cybertrust Japan Secure Server CA,O=Cybertrust Japan Co.\\, Ltd.,C=JP",
"subjectDN": "MF4xCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEqMCgGA1UEAxMhQ3liZXJ0cnVzdCBKYXBhbiBTZWN1cmUgU2VydmVyIENB",
"whitelist": false,
"attachment": {
"hash": "3d3d273966feacef23b9bad6f99c08f1cc7d487295361ce8cc0b10c724baf67a",
"size": 1711,
"filename": "bVyC1r63wwzb47rnbZ46v-604DOoFUXTp4JA0srlZRE=.pem",
"location": "security-state-staging/intermediates/aa91ff40-8753-4ea6-bc6c-9c2f51e7c6a1.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "bVyC1r63wwzb47rnbZ46v+604DOoFUXTp4JA0srlZRE=",
"crlite_enrolled": false,
"id": "03556fa4-abec-492c-a31c-149b44f3f991",
"last_modified": 1635584245288
},
{
"schema": 1635581139247,
"derHash": "1oMbpDYH9awZd41idTFWKvVRRfGRyrXvr6DgAFRCswI=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "eec823ad61a76103455ac29ab1ea726af33851691074cffd1fb703c49fe85217",
"size": 2121,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/e3b5ce85-565e-482f-b742-aae47955c01f.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": true,
"id": "8fc3b269-4824-4ae9-9b9d-2d5ab7099766",
"last_modified": 1635584245265
},
{
"schema": 1635580932372,
"derHash": "qzIDs+ogF9UJcmodgik+/8uMQs61LJrxwO7pa1wCvLo=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "dab72f8a61c3d1392090bfa1d53928ff5e675385a1b03742a601a3457a12342f",
"size": 2653,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/8493a5e1-2fe7-48d1-baff-5f6b9f29913f.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": true,
"id": "f45995f1-56b8-45c4-9465-14c646f731cc",
"last_modified": 1635584245242
},
{
"schema": 1635583809037,
"derHash": "1oMbpDYH9awZd41idTFWKvVRRfGRyrXvr6DgAFRCswI=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "eec823ad61a76103455ac29ab1ea726af33851691074cffd1fb703c49fe85217",
"size": 2121,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/d49999e5-60cd-4c45-a970-e9462ab32f63.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": true,
"id": "9561182b-470d-459e-8d38-ee7e1b3ceed8",
"last_modified": 1635584245220
},
{
"schema": 1635583809600,
"derHash": "qzIDs+ogF9UJcmodgik+/8uMQs61LJrxwO7pa1wCvLo=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "dab72f8a61c3d1392090bfa1d53928ff5e675385a1b03742a601a3457a12342f",
"size": 2653,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/cd6fd8ca-476d-4166-8171-47e097b3fba7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": true,
"id": "cdcb7fdb-36d0-4d2b-b326-6537b6c0a255",
"last_modified": 1635584245197
},
{
"schema": 1635516626946,
"derHash": "vLwYxGO2HzoDOxDHSXTtiiwyivzWejONmHFQajUVQZ8=",
"subject": "CN=e-Szigno Class3 SSL CA 2017,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHcxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJDAiBgNVBAMMG2UtU3ppZ25vIENsYXNzMyBTU0wgQ0EgMjAxNw==",
"whitelist": false,
"attachment": {
"hash": "141f708e3e75831bbe1ea4307dbbb1564e45c53708e07ce12ace8a2c364453d4",
"size": 1670,
"filename": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=.pem",
"location": "security-state-staging/intermediates/713a5d0b-40ac-4d69-8093-93d4bd2e61ab.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=",
"crlite_enrolled": true,
"id": "20f1bea5-b08a-4583-bdc2-e4d66e4dbc30",
"last_modified": 1635519435161
},
{
"schema": 1635519013320,
"derHash": "ffgAB19SA8AXNk6BGVqayf8AxQfWSnD3N9jT6Ms/CEU=",
"subject": "CN=e-Szigno Qualified TLS CA 2018,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHoxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJzAlBgNVBAMMHmUtU3ppZ25vIFF1YWxpZmllZCBUTFMgQ0EgMjAxOA==",
"whitelist": false,
"attachment": {
"hash": "df20fd29ecb80ea583b981311eed6c99114bffa8ab98b5265dc4c8efcc1897f0",
"size": 1674,
"filename": "qd9EIyfp7CEtbkxafeyYAuC_8wQBWqGZflkLznwnuyc=.pem",
"location": "security-state-staging/intermediates/b21a2837-5b65-44b6-92b7-fec471d70713.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "qd9EIyfp7CEtbkxafeyYAuC/8wQBWqGZflkLznwnuyc=",
"crlite_enrolled": true,
"id": "2f5d27a3-cb0f-4f6b-b6b1-20c198d58fc8",
"last_modified": 1635519435137
},
{
"schema": 1635497859073,
"derHash": "ffgAB19SA8AXNk6BGVqayf8AxQfWSnD3N9jT6Ms/CEU=",
"subject": "CN=e-Szigno Qualified TLS CA 2018,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHoxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJzAlBgNVBAMMHmUtU3ppZ25vIFF1YWxpZmllZCBUTFMgQ0EgMjAxOA==",
"whitelist": false,
"attachment": {
"hash": "df20fd29ecb80ea583b981311eed6c99114bffa8ab98b5265dc4c8efcc1897f0",
"size": 1674,
"filename": "qd9EIyfp7CEtbkxafeyYAuC_8wQBWqGZflkLznwnuyc=.pem",
"location": "security-state-staging/intermediates/9528d3b9-a037-4f0f-b644-1e7827d3c927.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "qd9EIyfp7CEtbkxafeyYAuC/8wQBWqGZflkLznwnuyc=",
"crlite_enrolled": true,
"id": "4802c4c4-718e-4497-a9a5-c367fed873eb",
"last_modified": 1635519435113
},
{
"schema": 1635516393564,
"derHash": "vLwYxGO2HzoDOxDHSXTtiiwyivzWejONmHFQajUVQZ8=",
"subject": "CN=e-Szigno Class3 SSL CA 2017,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHcxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJDAiBgNVBAMMG2UtU3ppZ25vIENsYXNzMyBTU0wgQ0EgMjAxNw==",
"whitelist": false,
"attachment": {
"hash": "141f708e3e75831bbe1ea4307dbbb1564e45c53708e07ce12ace8a2c364453d4",
"size": 1670,
"filename": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=.pem",
"location": "security-state-staging/intermediates/35bc1459-db4e-4fbe-b245-efb1d8b3e9e6.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=",
"crlite_enrolled": true,
"id": "5bb86eed-d806-4423-a0c3-14872f739af8",
"last_modified": 1635519435082
},
{
"schema": 1635516394253,
"derHash": "PtCuZ6FDLIPYIQHeabLuXn8gMCcJ2VeQc6MC2pD0hTM=",
"subject": "CN=TrustSafe Domain Validated CA,OU=SSL Department,O=Isimtescil Bilisim Anonim Sirketi,L=Istanbul,C=TR",
"subjectDN": "MIGNMQswCQYDVQQGEwJUUjERMA8GA1UEBwwISXN0YW5idWwxKjAoBgNVBAoMIUlzaW10ZXNjaWwgQmlsaXNpbSBBbm9uaW0gU2lya2V0aTEXMBUGA1UECwwOU1NMIERlcGFydG1lbnQxJjAkBgNVBAMMHVRydXN0U2FmZSBEb21haW4gVmFsaWRhdGVkIENB",
"whitelist": false,
"attachment": {
"hash": "748834790eb69db784c3f00d7f2ef2b64cf353435e5de3e69ac4ca2c81299276",
"size": 2247,
"filename": "90w8QxLDw7OA3WHogRdF8WutmwS2zB2cr21T0-Sun5o=.pem",
"location": "security-state-staging/intermediates/32d1002c-6eee-400e-a7ec-8b0235165445.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "90w8QxLDw7OA3WHogRdF8WutmwS2zB2cr21T0+Sun5o=",
"crlite_enrolled": true,
"id": "29a0cb2e-7719-4c2f-9360-00c82a4a3c72",
"last_modified": 1635519435037
},
{
"schema": 1635516392834,
"derHash": "EUdT6I0ADnWZYVqZB+Jrc7bYUTF/8rJ6yp24/FBWkqc=",
"subject": "CN=E-Tugra Organization Validated CA,OU=E-Tuğra Sertifikasyon Merkezi,O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.,L=Ankara,C=TR",
"subjectDN": "MIG1MQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMUAwPgYDVQQKDDdFLVR1xJ9yYSBFQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMScwJQYDVQQLDB5FLVR1xJ9yYSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxKjAoBgNVBAMMIUUtVHVncmEgT3JnYW5pemF0aW9uIFZhbGlkYXRlZCBDQQ==",
"whitelist": false,
"attachment": {
"hash": "c20540a909d14bde73c51dde53da2ff3fea4d75a0c875924065198ab7de00da3",
"size": 2304,
"filename": "2C9V2-VZ5v93wYg0HupOPel5wBqM8YEDtTLQWSkHjis=.pem",
"location": "security-state-staging/intermediates/375b6c2a-70ea-49da-8638-9e7de1fc7e9b.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "2C9V2+VZ5v93wYg0HupOPel5wBqM8YEDtTLQWSkHjis=",
"crlite_enrolled": true,
"id": "14fdc6a9-ae04-401c-9371-d01b4bbb58b9",
"last_modified": 1635519434998
},
{
"schema": 1635516394831,
"derHash": "y2/O5BxV4kd03wK+Nd5tQY6U71gR99sTc6+ICc9wfyo=",
"subject": "CN=E-Tugra Domain Validated CA,OU=E-Tuğra Sertifikasyon Merkezi,O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.,L=Ankara,C=TR",
"subjectDN": "MIGvMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMUAwPgYDVQQKDDdFLVR1xJ9yYSBFQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMScwJQYDVQQLDB5FLVR1xJ9yYSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxJDAiBgNVBAMMG0UtVHVncmEgRG9tYWluIFZhbGlkYXRlZCBDQQ==",
"whitelist": false,
"attachment": {
"hash": "c6b2887b29d06c3a32442bacd3087e92f206a5fa698d64deded68c4d8bb5d347",
"size": 2296,
"filename": "DReMCzHTvlRp8z0vjOXH2lx0lpHIz5iXick53RZbRT8=.pem",
"location": "security-state-staging/intermediates/570f1b75-429e-4c79-b0e9-d7653e227ce7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "DReMCzHTvlRp8z0vjOXH2lx0lpHIz5iXick53RZbRT8=",
"crlite_enrolled": true,
"id": "feefbefd-6161-49d5-84fd-5b09c850c80c",
"last_modified": 1635519434974
},
{
"schema": 1635516395422,
"derHash": "znrcGXdXpS5pogFMzgPZgGMlAnZHQsKSPXOAVo4hAKY=",
"subject": "CN=E-Tugra Extended Validated CA,OU=E-Tuğra Sertifikasyon Merkezi,O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.,L=Ankara,C=TR",
"subjectDN": "MIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMUAwPgYDVQQKDDdFLVR1xJ9yYSBFQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMScwJQYDVQQLDB5FLVR1xJ9yYSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxJjAkBgNVBAMMHUUtVHVncmEgRXh0ZW5kZWQgVmFsaWRhdGVkIENB",
"whitelist": false,
"attachment": {
"hash": "12ff7eb3fc7ad0d030464cfca8808d4239fab2f60c03f47a3f76ec1c962d10f8",
"size": 2296,
"filename": "CbsSUO015uoyaPW3UoozNFDyIZuKJooRSCguLZLEHjg=.pem",
"location": "security-state-staging/intermediates/b4924736-081c-4006-83d9-18747abe70b7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "CbsSUO015uoyaPW3UoozNFDyIZuKJooRSCguLZLEHjg=",
"crlite_enrolled": true,
"id": "7c935540-4c03-4352-b768-16756b45aed8",
"last_modified": 1635519434950
},
{
"schema": 1635476294953,
"derHash": "tBpIZPDU7E6mMtAbPn8jJ3XlXiKzv9hkLuEpIoDQ5Ho=",
"subject": "CN=DigiCert Basic EV RSA CN CA G2,O=DigiCert Inc,C=US",
"subjectDN": "ME0xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IEJhc2ljIEVWIFJTQSBDTiBDQSBHMg==",
"whitelist": false,
"attachment": {
"hash": "d2c3c0eb28e66976ac4acda4193e4e6b8892fa07ec37f9932f19408c824dc0a2",
"size": 1654,
"filename": "M8wsUw9qVjgbOPT0Gb0ZignTvgWTwtAotFBG4daZQ1w=.pem",
"location": "security-state-staging/intermediates/aae99adb-feec-4ec3-b8f8-06e4b7cc8071.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "M8wsUw9qVjgbOPT0Gb0ZignTvgWTwtAotFBG4daZQ1w=",
"crlite_enrolled": true,
"id": "1a6503c7-0f5c-4cde-8e28-452c972f857e",
"last_modified": 1635497857853
},
{
"schema": 1635495268237,
"derHash": "XGSxcxqBON6n0Rya6GIokflF66RoJeer/kdU8KYBGvg=",
"subject": "CN=Microsoft ECC TLS Issuing AOC CA 01,O=Microsoft Corporation,C=US",
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBFQ0MgVExTIElzc3VpbmcgQU9DIENBIDAx",
"whitelist": false,
"attachment": {
"hash": "b8980a779b7c2fe67041f19cdecab2d5a43f61ef0793b5cede8a3b9e111eb0b6",
"size": 1544,
"filename": "qd93pb-3n6NM25ddlkow2f5_xOZwvTm_G4wmBehD21Q=.pem",
"location": "security-state-staging/intermediates/7fc14ec5-80cf-4527-8ceb-7135fd5ae374.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "qd93pb+3n6NM25ddlkow2f5/xOZwvTm/G4wmBehD21Q=",
"crlite_enrolled": true,
"id": "c10233f0-5a2e-4b4b-bfec-4ee643137071",
"last_modified": 1635497857805
},
{
"schema": 1635495268881,
"derHash": "SB5YKiBqfXBAzNoXzyXTSXhaKrlO11UqslTc04sDLsA=",
"subject": "CN=Microsoft RSA TLS Issuing AOC CA 01,O=Microsoft Corporation,C=US",
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBSU0EgVExTIElzc3VpbmcgQU9DIENBIDAx",
"whitelist": false,
"attachment": {
"hash": "2304a6019fd3a16f19edfca5fefde59b3c14ab1accadb45eea875e9cd13c9b04",
"size": 2694,
"filename": "dITy8WGNNfbyOcBbrTC4t62TxwJNQADThxQUF-492_Q=.pem",
"location": "security-state-staging/intermediates/b8a6c3f7-8eee-49d2-bb3c-f8d0a6335b62.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "dITy8WGNNfbyOcBbrTC4t62TxwJNQADThxQUF+492/Q=",
"crlite_enrolled": true,
"id": "eaaba7c6-7727-4861-b733-17dc938f8649",
"last_modified": 1635497857758
},
{
"schema": 1635473380307,
"derHash": "AHEIGUEV88iZ9U7mfLTahyde3B1nmNp4fgdYz6aulrE=",
"subject": "CN=VR IDENT SSL CA 2020,O=D-Trust GmbH,C=DE",
"subjectDN": "MEMxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxHTAbBgNVBAMTFFZSIElERU5UIFNTTCBDQSAyMDIw",
"whitelist": false,
"attachment": {
"hash": "1206315657f09d9afaec77ac85e998dd3c6cdcb66f3f2176acc53b52c01c503c",
"size": 2519,
"filename": "tODlN5eWKJbzjaei8TSG0CEnvkryLLZvN3Yh2FucTVs=.pem",
"location": "security-state-staging/intermediates/35f8e921-4fcb-4f84-9bbb-da548ebd9895.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "tODlN5eWKJbzjaei8TSG0CEnvkryLLZvN3Yh2FucTVs=",
"crlite_enrolled": false,
"id": "9a044a16-723a-4cf7-8fef-aef81b9007f6",
"last_modified": 1635476293709
},
{
"schema": 1635473379735,
"derHash": "nmyANcDxyKlFMQ5y2D5TGUe1cfkpLkKkJIo3C/ezBb4=",
"subject": "CN=VR IDENT EV SSL CA 2020,O=D-Trust GmbH,C=DE",
"subjectDN": "MEYxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxIDAeBgNVBAMTF1ZSIElERU5UIEVWIFNTTCBDQSAyMDIw",
"whitelist": false,
"attachment": {
"hash": "dc99c4f4f52985f008966e436a519a723e8fc97d68041786cb235d067d979c71",
"size": 2556,
"filename": "n2nZ8zPLSNKoerb6X9o01VOniH-YyahnTcdt2oR9ovw=.pem",
"location": "security-state-staging/intermediates/24db4e33-c897-4e54-9072-c201e9f0c903.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "n2nZ8zPLSNKoerb6X9o01VOniH+YyahnTcdt2oR9ovw=",
"crlite_enrolled": false,
"id": "911c16b5-610f-407c-95ae-d17b705f20c2",
"last_modified": 1635476293686
},
{
"schema": 1635454810007,
"derHash": "Vi1qW0sGdGX/0Pv8m7BXVc2s9Vte5cb5ELi1PbEo9Xo=",
"subject": "CN=Sectigo Qualified Website Authentication CA E35,O=Sectigo (Europe) SL,C=ES",
"subjectDN": "MGUxCzAJBgNVBAYTAkVTMRwwGgYDVQQKExNTZWN0aWdvIChFdXJvcGUpIFNMMTgwNgYDVQQDEy9TZWN0aWdvIFF1YWxpZmllZCBXZWJzaXRlIEF1dGhlbnRpY2F0aW9uIENBIEUzNQ==",
"whitelist": false,
"attachment": {
"hash": "55ec2d5ec4b78d089d9860db6394ae011c61807312053911f31093c1f37a7471",
"size": 1248,
"filename": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=.pem",
"location": "security-state-staging/intermediates/c06db3d6-f723-43e2-99fe-fb7ab58beff9.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=",
"crlite_enrolled": true,
"id": "3d87fa81-1922-410b-ad87-b072f825cf4c",
"last_modified": 1635458234493
},
{
"schema": 1635454214966,
"derHash": "Vi1qW0sGdGX/0Pv8m7BXVc2s9Vte5cb5ELi1PbEo9Xo=",
"subject": "CN=Sectigo Qualified Website Authentication CA E35,O=Sectigo (Europe) SL,C=ES",
"subjectDN": "MGUxCzAJBgNVBAYTAkVTMRwwGgYDVQQKExNTZWN0aWdvIChFdXJvcGUpIFNMMTgwNgYDVQQDEy9TZWN0aWdvIFF1YWxpZmllZCBXZWJzaXRlIEF1dGhlbnRpY2F0aW9uIENBIEUzNQ==",
"whitelist": false,
"attachment": {
"hash": "55ec2d5ec4b78d089d9860db6394ae011c61807312053911f31093c1f37a7471",
"size": 1248,
"filename": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=.pem",
"location": "security-state-staging/intermediates/c43aba38-0250-470d-bc16-4fa8ee7973cb.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=",
"crlite_enrolled": true,
"id": "e3964c59-8391-4432-9624-9b3f841b6121",
"last_modified": 1635458234445
},
{
"schema": 1635454600035,
"derHash": "Vi1qW0sGdGX/0Pv8m7BXVc2s9Vte5cb5ELi1PbEo9Xo=",
"subject": "CN=Sectigo Qualified Website Authentication CA E35,O=Sectigo (Europe) SL,C=ES",
"subjectDN": "MGUxCzAJBgNVBAYTAkVTMRwwGgYDVQQKExNTZWN0aWdvIChFdXJvcGUpIFNMMTgwNgYDVQQDEy9TZWN0aWdvIFF1YWxpZmllZCBXZWJzaXRlIEF1dGhlbnRpY2F0aW9uIENBIEUzNQ==",
"whitelist": false,
"attachment": {
"hash": "55ec2d5ec4b78d089d9860db6394ae011c61807312053911f31093c1f37a7471",
"size": 1248,
"filename": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=.pem",
"location": "security-state-staging/intermediates/0e071112-b7ec-44a8-bf67-d3723d6c9c8c.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=",
"crlite_enrolled": true,
"id": "d709f323-b76c-451f-bf49-dabb2b709355",
"last_modified": 1635458234409
},
{
"schema": 1635436209776,
"derHash": "s0oztER0/bAHjxE1J7vbdv5b+ByiS7htYoE2xQFgQ+g=",
"subject": "CN=Certum Class I CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL",
"subjectDN": "MHYxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGjAYBgNVBAMTEUNlcnR1bSBDbGFzcyBJIENB",
"whitelist": false,
"attachment": {
"hash": "30af05c15084780c6d3ae3b8241e1c92fd060afc921724be7e63675470aeac33",
"size": 1711,
"filename": "MbF_6zzENJgNMBtdiV6R_9-GZ7l6Nl4QjwF-GW39Yms=.pem",
"location": "security-state-staging/intermediates/431977f4-c9e1-426b-b192-a46a8deba0f6.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "MbF/6zzENJgNMBtdiV6R/9+GZ7l6Nl4QjwF+GW39Yms=",
"crlite_enrolled": false,
"id": "773ef76c-6d3d-4e37-bc25-7bd1ab2f4be8",
"last_modified": 1635436642995
},
{
"schema": 1635432610704,
"derHash": "s0oztER0/bAHjxE1J7vbdv5b+ByiS7htYoE2xQFgQ+g=",
"subject": "CN=Certum Class I CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL",
"subjectDN": "MHYxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGjAYBgNVBAMTEUNlcnR1bSBDbGFzcyBJIENB",
"whitelist": false,
"attachment": {
"hash": "30af05c15084780c6d3ae3b8241e1c92fd060afc921724be7e63675470aeac33",
"size": 1711,
"filename": "MbF_6zzENJgNMBtdiV6R_9-GZ7l6Nl4QjwF-GW39Yms=.pem",
"location": "security-state-staging/intermediates/6d12dffd-f723-444a-89cf-c22b61120a46.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "MbF/6zzENJgNMBtdiV6R/9+GZ7l6Nl4QjwF+GW39Yms=",
"crlite_enrolled": false,
"id": "d4829978-1ba8-4af9-a6e4-a151e2c5f4f6",
"last_modified": 1635433111646
},
{
"schema": 1635365171154,
"derHash": "4/NVu17BE8/cXhzSNAxlwm30xph5/vmAA27PQv0Jk3I=",
@ -8064,78 +8514,6 @@
"id": "9cb658c6-3e52-4a94-b178-1d2ab7a03ad7",
"last_modified": 1627246645036
},
{
"schema": 1627098943049,
"derHash": "qzIDs+ogF9UJcmodgik+/8uMQs61LJrxwO7pa1wCvLo=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "dab72f8a61c3d1392090bfa1d53928ff5e675385a1b03742a601a3457a12342f",
"size": 2653,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/cd6fd8ca-476d-4166-8171-47e097b3fba7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": false,
"id": "cdcb7fdb-36d0-4d2b-b326-6537b6c0a255",
"last_modified": 1627102640462
},
{
"schema": 1627098765680,
"derHash": "1oMbpDYH9awZd41idTFWKvVRRfGRyrXvr6DgAFRCswI=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "eec823ad61a76103455ac29ab1ea726af33851691074cffd1fb703c49fe85217",
"size": 2121,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/d49999e5-60cd-4c45-a970-e9462ab32f63.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": false,
"id": "9561182b-470d-459e-8d38-ee7e1b3ceed8",
"last_modified": 1627102640439
},
{
"schema": 1627099151125,
"derHash": "qzIDs+ogF9UJcmodgik+/8uMQs61LJrxwO7pa1wCvLo=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "dab72f8a61c3d1392090bfa1d53928ff5e675385a1b03742a601a3457a12342f",
"size": 2653,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/8493a5e1-2fe7-48d1-baff-5f6b9f29913f.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": false,
"id": "f45995f1-56b8-45c4-9465-14c646f731cc",
"last_modified": 1627102640419
},
{
"schema": 1627098943614,
"derHash": "1oMbpDYH9awZd41idTFWKvVRRfGRyrXvr6DgAFRCswI=",
"subject": "CN=Microsoft Azure TLS Issuing CA 05,O=Microsoft Corporation,C=US",
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKjAoBgNVBAMTIU1pY3Jvc29mdCBBenVyZSBUTFMgSXNzdWluZyBDQSAwNQ==",
"whitelist": false,
"attachment": {
"hash": "eec823ad61a76103455ac29ab1ea726af33851691074cffd1fb703c49fe85217",
"size": 2121,
"filename": "4i4h0jN9NROr1xKJI-TQ1Q_ZIfUjPMXtmWUsDR3Pjiw=.pem",
"location": "security-state-staging/intermediates/e3b5ce85-565e-482f-b742-aae47955c01f.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "4i4h0jN9NROr1xKJI+TQ1Q/ZIfUjPMXtmWUsDR3Pjiw=",
"crlite_enrolled": false,
"id": "8fc3b269-4824-4ae9-9b9d-2d5ab7099766",
"last_modified": 1627102640399
},
{
"schema": 1626987442498,
"derHash": "lzpBJ2/9AeAnoqrUnjTDeEbT6Xb/amILZxLjODIEGqY=",
@ -8496,24 +8874,6 @@
"id": "6b217478-b4de-451e-93a7-43d8d82c6c85",
"last_modified": 1625126256108
},
{
"schema": 1625125796340,
"derHash": "SB5YKiBqfXBAzNoXzyXTSXhaKrlO11UqslTc04sDLsA=",
"subject": "CN=Microsoft RSA TLS Issuing AOC CA 01,O=Microsoft Corporation,C=US",
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBSU0EgVExTIElzc3VpbmcgQU9DIENBIDAx",
"whitelist": false,
"attachment": {
"hash": "2304a6019fd3a16f19edfca5fefde59b3c14ab1accadb45eea875e9cd13c9b04",
"size": 2694,
"filename": "dITy8WGNNfbyOcBbrTC4t62TxwJNQADThxQUF-492_Q=.pem",
"location": "security-state-staging/intermediates/b8a6c3f7-8eee-49d2-bb3c-f8d0a6335b62.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "dITy8WGNNfbyOcBbrTC4t62TxwJNQADThxQUF+492/Q=",
"crlite_enrolled": false,
"id": "eaaba7c6-7727-4861-b733-17dc938f8649",
"last_modified": 1625126256095
},
{
"schema": 1625125798020,
"derHash": "J2k4FTLZYYPtOb3E4yPzxSD75qzzvaMCIiOd38RMg4A=",
@ -8532,24 +8892,6 @@
"id": "51f69875-c2c0-46d8-960d-8d496d28a655",
"last_modified": 1625126256083
},
{
"schema": 1625125799746,
"derHash": "XGSxcxqBON6n0Rya6GIokflF66RoJeer/kdU8KYBGvg=",
"subject": "CN=Microsoft ECC TLS Issuing AOC CA 01,O=Microsoft Corporation,C=US",
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBFQ0MgVExTIElzc3VpbmcgQU9DIENBIDAx",
"whitelist": false,
"attachment": {
"hash": "b8980a779b7c2fe67041f19cdecab2d5a43f61ef0793b5cede8a3b9e111eb0b6",
"size": 1544,
"filename": "qd93pb-3n6NM25ddlkow2f5_xOZwvTm_G4wmBehD21Q=.pem",
"location": "security-state-staging/intermediates/7fc14ec5-80cf-4527-8ceb-7135fd5ae374.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "qd93pb+3n6NM25ddlkow2f5/xOZwvTm/G4wmBehD21Q=",
"crlite_enrolled": false,
"id": "c10233f0-5a2e-4b4b-bfec-4ee643137071",
"last_modified": 1625126256070
},
{
"schema": 1625125801402,
"derHash": "13xFwVh3McRjLBnW88n+gyYmYVyHnqBTZkpLJusik+w=",
@ -9306,24 +9648,6 @@
"id": "44261107-8d3f-48ac-8a0d-8b9ef00b4189",
"last_modified": 1622559454515
},
{
"schema": 1621954724552,
"derHash": "tBpIZPDU7E6mMtAbPn8jJ3XlXiKzv9hkLuEpIoDQ5Ho=",
"subject": "CN=DigiCert Basic EV RSA CN CA G2,O=DigiCert Inc,C=US",
"subjectDN": "ME0xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IEJhc2ljIEVWIFJTQSBDTiBDQSBHMg==",
"whitelist": false,
"attachment": {
"hash": "d2c3c0eb28e66976ac4acda4193e4e6b8892fa07ec37f9932f19408c824dc0a2",
"size": 1654,
"filename": "M8wsUw9qVjgbOPT0Gb0ZignTvgWTwtAotFBG4daZQ1w=.pem",
"location": "security-state-staging/intermediates/aae99adb-feec-4ec3-b8f8-06e4b7cc8071.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "M8wsUw9qVjgbOPT0Gb0ZignTvgWTwtAotFBG4daZQ1w=",
"crlite_enrolled": false,
"id": "1a6503c7-0f5c-4cde-8e28-452c972f857e",
"last_modified": 1622105887036
},
{
"schema": 1621609055804,
"derHash": "dqxae3TjELnmJOf30Rg4DKloW0DEFsa4meSm1Cm+ej8=",
@ -17928,24 +18252,6 @@
"id": "1cefe49f-ef56-4996-bcdb-2fb9d9f3e0f1",
"last_modified": 1602647874741
},
{
"schema": 1602647302024,
"derHash": "Vi1qW0sGdGX/0Pv8m7BXVc2s9Vte5cb5ELi1PbEo9Xo=",
"subject": "CN=Sectigo Qualified Website Authentication CA E35,O=Sectigo (Europe) SL,C=ES",
"subjectDN": "MGUxCzAJBgNVBAYTAkVTMRwwGgYDVQQKExNTZWN0aWdvIChFdXJvcGUpIFNMMTgwNgYDVQQDEy9TZWN0aWdvIFF1YWxpZmllZCBXZWJzaXRlIEF1dGhlbnRpY2F0aW9uIENBIEUzNQ==",
"whitelist": false,
"attachment": {
"hash": "55ec2d5ec4b78d089d9860db6394ae011c61807312053911f31093c1f37a7471",
"size": 1248,
"filename": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=.pem",
"location": "security-state-staging/intermediates/0e071112-b7ec-44a8-bf67-d3723d6c9c8c.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=",
"crlite_enrolled": false,
"id": "d709f323-b76c-451f-bf49-dabb2b709355",
"last_modified": 1602647874718
},
{
"schema": 1602643717900,
"derHash": "DSzH5pc/gPoiU/uIgo72rLs7lf+nfEiWUMNWc19UtwY=",
@ -18018,24 +18324,6 @@
"id": "e210e9bd-6cc8-4831-b27f-5a9929687c99",
"last_modified": 1602644269898
},
{
"schema": 1602643706774,
"derHash": "Vi1qW0sGdGX/0Pv8m7BXVc2s9Vte5cb5ELi1PbEo9Xo=",
"subject": "CN=Sectigo Qualified Website Authentication CA E35,O=Sectigo (Europe) SL,C=ES",
"subjectDN": "MGUxCzAJBgNVBAYTAkVTMRwwGgYDVQQKExNTZWN0aWdvIChFdXJvcGUpIFNMMTgwNgYDVQQDEy9TZWN0aWdvIFF1YWxpZmllZCBXZWJzaXRlIEF1dGhlbnRpY2F0aW9uIENBIEUzNQ==",
"whitelist": false,
"attachment": {
"hash": "55ec2d5ec4b78d089d9860db6394ae011c61807312053911f31093c1f37a7471",
"size": 1248,
"filename": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=.pem",
"location": "security-state-staging/intermediates/c43aba38-0250-470d-bc16-4fa8ee7973cb.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=",
"crlite_enrolled": false,
"id": "e3964c59-8391-4432-9624-9b3f841b6121",
"last_modified": 1602644269887
},
{
"schema": 1602643708962,
"derHash": "PtE/nRnlb1uhSSOFyoE/fdY7vrPPXFbbXDCc9OqpAXE=",
@ -18108,24 +18396,6 @@
"id": "6b3d1184-9e4d-4516-bfb4-06d823d81fc5",
"last_modified": 1602640676790
},
{
"schema": 1602640108808,
"derHash": "Vi1qW0sGdGX/0Pv8m7BXVc2s9Vte5cb5ELi1PbEo9Xo=",
"subject": "CN=Sectigo Qualified Website Authentication CA E35,O=Sectigo (Europe) SL,C=ES",
"subjectDN": "MGUxCzAJBgNVBAYTAkVTMRwwGgYDVQQKExNTZWN0aWdvIChFdXJvcGUpIFNMMTgwNgYDVQQDEy9TZWN0aWdvIFF1YWxpZmllZCBXZWJzaXRlIEF1dGhlbnRpY2F0aW9uIENBIEUzNQ==",
"whitelist": false,
"attachment": {
"hash": "55ec2d5ec4b78d089d9860db6394ae011c61807312053911f31093c1f37a7471",
"size": 1248,
"filename": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=.pem",
"location": "security-state-staging/intermediates/c06db3d6-f723-43e2-99fe-fb7ab58beff9.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "LTu6tENFs1xZQP1NiYhwg6AMeqalq2jUuwpowf0rQuY=",
"crlite_enrolled": false,
"id": "3d87fa81-1922-410b-ad87-b072f825cf4c",
"last_modified": 1602640676779
},
{
"schema": 1602640117836,
"derHash": "DSzH5pc/gPoiU/uIgo72rLs7lf+nfEiWUMNWc19UtwY=",
@ -18792,24 +19062,6 @@
"id": "cffe3216-3de3-4c2c-ac7b-6674695cb014",
"last_modified": 1601517447884
},
{
"schema": 1601376689641,
"derHash": "vLwYxGO2HzoDOxDHSXTtiiwyivzWejONmHFQajUVQZ8=",
"subject": "CN=e-Szigno Class3 SSL CA 2017,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHcxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJDAiBgNVBAMMG2UtU3ppZ25vIENsYXNzMyBTU0wgQ0EgMjAxNw==",
"whitelist": false,
"attachment": {
"hash": "141f708e3e75831bbe1ea4307dbbb1564e45c53708e07ce12ace8a2c364453d4",
"size": 1670,
"filename": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=.pem",
"location": "security-state-staging/intermediates/713a5d0b-40ac-4d69-8093-93d4bd2e61ab.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=",
"crlite_enrolled": true,
"id": "20f1bea5-b08a-4583-bdc2-e4d66e4dbc30",
"last_modified": 1601517447872
},
{
"schema": 1601376692642,
"derHash": "tvZVm7zgosyR5Qe11zGeMkh+2uKKBjvHO2QF5sRGZbY=",
@ -19404,24 +19656,6 @@
"id": "14d2a1f9-84c0-4272-b5cc-bf8f1d0b1cef",
"last_modified": 1601517447175
},
{
"schema": 1601376614329,
"derHash": "ffgAB19SA8AXNk6BGVqayf8AxQfWSnD3N9jT6Ms/CEU=",
"subject": "CN=e-Szigno Qualified TLS CA 2018,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHoxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJzAlBgNVBAMMHmUtU3ppZ25vIFF1YWxpZmllZCBUTFMgQ0EgMjAxOA==",
"whitelist": false,
"attachment": {
"hash": "df20fd29ecb80ea583b981311eed6c99114bffa8ab98b5265dc4c8efcc1897f0",
"size": 1674,
"filename": "qd9EIyfp7CEtbkxafeyYAuC_8wQBWqGZflkLznwnuyc=.pem",
"location": "security-state-staging/intermediates/b21a2837-5b65-44b6-92b7-fec471d70713.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "qd9EIyfp7CEtbkxafeyYAuC/8wQBWqGZflkLznwnuyc=",
"crlite_enrolled": true,
"id": "2f5d27a3-cb0f-4f6b-b6b1-20c198d58fc8",
"last_modified": 1601517447163
},
{
"schema": 1601376615736,
"derHash": "BDerLsLCtIkClsE1A0sh2xRkNLgxfucDqoqpQ8XqUa4=",
@ -20988,24 +21222,6 @@
"id": "0f3daffc-a656-4c5f-a71b-0db59222a014",
"last_modified": 1601517445720
},
{
"schema": 1601373057866,
"derHash": "ffgAB19SA8AXNk6BGVqayf8AxQfWSnD3N9jT6Ms/CEU=",
"subject": "CN=e-Szigno Qualified TLS CA 2018,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHoxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJzAlBgNVBAMMHmUtU3ppZ25vIFF1YWxpZmllZCBUTFMgQ0EgMjAxOA==",
"whitelist": false,
"attachment": {
"hash": "df20fd29ecb80ea583b981311eed6c99114bffa8ab98b5265dc4c8efcc1897f0",
"size": 1674,
"filename": "qd9EIyfp7CEtbkxafeyYAuC_8wQBWqGZflkLznwnuyc=.pem",
"location": "security-state-staging/intermediates/9528d3b9-a037-4f0f-b644-1e7827d3c927.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "qd9EIyfp7CEtbkxafeyYAuC/8wQBWqGZflkLznwnuyc=",
"crlite_enrolled": true,
"id": "4802c4c4-718e-4497-a9a5-c367fed873eb",
"last_modified": 1601517445709
},
{
"schema": 1601373052202,
"derHash": "MqTlVONjEW/kjiLwHawXNnUqcccg+Z9GLVZQItO60H0=",
@ -21546,24 +21762,6 @@
"id": "3de29e4b-6106-495c-92fc-1daf069924d7",
"last_modified": 1601517445138
},
{
"schema": 1601372990662,
"derHash": "vLwYxGO2HzoDOxDHSXTtiiwyivzWejONmHFQajUVQZ8=",
"subject": "CN=e-Szigno Class3 SSL CA 2017,O=Microsec Ltd.,L=Budapest,C=HU",
"subjectDN": "MHcxCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxJDAiBgNVBAMMG2UtU3ppZ25vIENsYXNzMyBTU0wgQ0EgMjAxNw==",
"whitelist": false,
"attachment": {
"hash": "141f708e3e75831bbe1ea4307dbbb1564e45c53708e07ce12ace8a2c364453d4",
"size": 1670,
"filename": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=.pem",
"location": "security-state-staging/intermediates/35bc1459-db4e-4fbe-b245-efb1d8b3e9e6.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "69Duo3nmlQnUEvqzlU27qTDaDY9K1yN0wfdopIs9Y7s=",
"crlite_enrolled": true,
"id": "5bb86eed-d806-4423-a0c3-14872f739af8",
"last_modified": 1601517445127
},
{
"schema": 1601372984986,
"derHash": "PuAnjfcfo8ElxM1IfwHXdGlOb8V+DNlMJO/XaRM5GOU=",
@ -24480,24 +24678,6 @@
"id": "e7170fbb-6ceb-4f32-b932-7da04ce6562c",
"last_modified": 1601517441584
},
{
"schema": 1601376759524,
"derHash": "nmyANcDxyKlFMQ5y2D5TGUe1cfkpLkKkJIo3C/ezBb4=",
"subject": "CN=VR IDENT EV SSL CA 2020,O=D-Trust GmbH,C=DE",
"subjectDN": "MEYxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxIDAeBgNVBAMTF1ZSIElERU5UIEVWIFNTTCBDQSAyMDIw",
"whitelist": false,
"attachment": {
"hash": "dc99c4f4f52985f008966e436a519a723e8fc97d68041786cb235d067d979c71",
"size": 2556,
"filename": "n2nZ8zPLSNKoerb6X9o01VOniH-YyahnTcdt2oR9ovw=.pem",
"location": "security-state-staging/intermediates/24db4e33-c897-4e54-9072-c201e9f0c903.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "n2nZ8zPLSNKoerb6X9o01VOniH+YyahnTcdt2oR9ovw=",
"crlite_enrolled": true,
"id": "911c16b5-610f-407c-95ae-d17b705f20c2",
"last_modified": 1601517441567
},
{
"schema": 1601376734751,
"derHash": "mmlizYwhtdzx9ws5qDbH85fsSV+IC+m5tpuLJyiOyxQ=",
@ -24678,24 +24858,6 @@
"id": "6ee147c4-6e70-4972-8a69-4e4ff8257c86",
"last_modified": 1601517441378
},
{
"schema": 1601376733906,
"derHash": "AHEIGUEV88iZ9U7mfLTahyde3B1nmNp4fgdYz6aulrE=",
"subject": "CN=VR IDENT SSL CA 2020,O=D-Trust GmbH,C=DE",
"subjectDN": "MEMxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxHTAbBgNVBAMTFFZSIElERU5UIFNTTCBDQSAyMDIw",
"whitelist": false,
"attachment": {
"hash": "1206315657f09d9afaec77ac85e998dd3c6cdcb66f3f2176acc53b52c01c503c",
"size": 2519,
"filename": "tODlN5eWKJbzjaei8TSG0CEnvkryLLZvN3Yh2FucTVs=.pem",
"location": "security-state-staging/intermediates/35f8e921-4fcb-4f84-9bbb-da548ebd9895.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "tODlN5eWKJbzjaei8TSG0CEnvkryLLZvN3Yh2FucTVs=",
"crlite_enrolled": true,
"id": "9a044a16-723a-4cf7-8fef-aef81b9007f6",
"last_modified": 1601517441361
},
{
"schema": 1601376778985,
"derHash": "vrUcj0UkJrK55nL33R7qSzPWw49MoqlpVs4kvQWww40=",
@ -38448,24 +38610,6 @@
"id": "0aee0acd-3e30-437a-b011-55d61c8d46c4",
"last_modified": 1562108433420
},
{
"schema": 1562108431893,
"derHash": "PtCuZ6FDLIPYIQHeabLuXn8gMCcJ2VeQc6MC2pD0hTM=",
"subject": "CN=TrustSafe Domain Validated CA,OU=SSL Department,O=Isimtescil Bilisim Anonim Sirketi,L=Istanbul,C=TR",
"subjectDN": "MIGNMQswCQYDVQQGEwJUUjERMA8GA1UEBwwISXN0YW5idWwxKjAoBgNVBAoMIUlzaW10ZXNjaWwgQmlsaXNpbSBBbm9uaW0gU2lya2V0aTEXMBUGA1UECwwOU1NMIERlcGFydG1lbnQxJjAkBgNVBAMMHVRydXN0U2FmZSBEb21haW4gVmFsaWRhdGVkIENB",
"whitelist": false,
"attachment": {
"hash": "748834790eb69db784c3f00d7f2ef2b64cf353435e5de3e69ac4ca2c81299276",
"size": 2247,
"filename": "90w8QxLDw7OA3WHogRdF8WutmwS2zB2cr21T0-Sun5o=.pem",
"location": "security-state-staging/intermediates/32d1002c-6eee-400e-a7ec-8b0235165445.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "90w8QxLDw7OA3WHogRdF8WutmwS2zB2cr21T0+Sun5o=",
"crlite_enrolled": true,
"id": "29a0cb2e-7719-4c2f-9360-00c82a4a3c72",
"last_modified": 1562108432669
},
{
"schema": 1562108430382,
"derHash": "bEfTZcE7yMw9be9djwerjb6jyNSUXWUaqYVKnJo8xxw=",
@ -38538,24 +38682,6 @@
"id": "3aa58b0f-f271-443e-b359-6c266dbd9ca7",
"last_modified": 1562108428860
},
{
"schema": 1562108427352,
"derHash": "FfrEJaqEQEs2L6NInrZ9BV1donb4aFxNaY2hgw1CDw8=",
"subject": "CN=COMODO RSA Client Authentication and Secure Email CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB",
"subjectDN": "MIGXMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE9MDsGA1UEAxM0Q09NT0RPIFJTQSBDbGllbnQgQXV0aGVudGljYXRpb24gYW5kIFNlY3VyZSBFbWFpbCBDQQ==",
"whitelist": false,
"attachment": {
"hash": "6d952d782fa2f84e580c545480b40eeae3fab20a3eba7b734b158271c48b1117",
"size": 2105,
"filename": "mHI0vDHAQ12vglM3cO2DlsvGPmhqena8_DpLQz3BaYs=.pem",
"location": "security-state-staging/intermediates/df4e2dce-92b3-41f1-8479-4de071dddbfe.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "mHI0vDHAQ12vglM3cO2DlsvGPmhqena8/DpLQz3BaYs=",
"crlite_enrolled": true,
"id": "e9149e45-f71f-4714-887f-be55784c958e",
"last_modified": 1562108428099
},
{
"schema": 1562108425846,
"derHash": "qbrrbzgUtMNDENqE3tOsOC2gErhNIH1KObFnHPWB9ME=",
@ -39960,24 +40086,6 @@
"id": "f4577da3-a2f0-4bf9-8805-1bf7390a8200",
"last_modified": 1562025714778
},
{
"schema": 1562025713265,
"derHash": "M9VzWYMfh3VObnVda1tW5+cSl93f6h1jlwhmBCgPb/w=",
"subject": "CN=Cybertrust Japan Secure Server CA,O=Cybertrust Japan Co.\\, Ltd.,C=JP",
"subjectDN": "MF4xCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEqMCgGA1UEAxMhQ3liZXJ0cnVzdCBKYXBhbiBTZWN1cmUgU2VydmVyIENB",
"whitelist": false,
"attachment": {
"hash": "3d3d273966feacef23b9bad6f99c08f1cc7d487295361ce8cc0b10c724baf67a",
"size": 1711,
"filename": "bVyC1r63wwzb47rnbZ46v-604DOoFUXTp4JA0srlZRE=.pem",
"location": "security-state-staging/intermediates/aa91ff40-8753-4ea6-bc6c-9c2f51e7c6a1.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "bVyC1r63wwzb47rnbZ46v+604DOoFUXTp4JA0srlZRE=",
"crlite_enrolled": true,
"id": "03556fa4-abec-492c-a31c-149b44f3f991",
"last_modified": 1562025714019
},
{
"schema": 1562025711764,
"derHash": "hDJGhhPZjK3s3wgWxJ6it/aZ9KEc7AD1eMK6NnsmHAg=",
@ -48906,24 +49014,6 @@
"id": "010baff6-15c0-4fe2-915b-96e9c9e53168",
"last_modified": 1562024792620
},
{
"schema": 1562024789653,
"derHash": "DhC93udRLb156/C09I/u18g8K9PdgXZVZfT/EQt7+kI=",
"subject": "CN=Cybertrust Japan Extended Validation Server CA,O=Cybertrust Japan Co.\\, Ltd.,C=JP",
"subjectDN": "MGsxCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjE3MDUGA1UEAxMuQ3liZXJ0cnVzdCBKYXBhbiBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlcnZlciBDQQ==",
"whitelist": false,
"attachment": {
"hash": "e3d590ab4b71fbd20183713733b3253b32ef24a73382153319f8916fc66d3c1d",
"size": 1678,
"filename": "VfKdH3KeIRG8iIljlHEf2ck5OXG4Z8_yf2AOohCgqgk=.pem",
"location": "security-state-staging/intermediates/222e4d33-ee5a-4885-add5-c30b4495b281.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "VfKdH3KeIRG8iIljlHEf2ck5OXG4Z8/yf2AOohCgqgk=",
"crlite_enrolled": true,
"id": "92292d1f-471b-4db3-ba30-6f423a7d649b",
"last_modified": 1562024790389
},
{
"schema": 1562024786680,
"derHash": "/ikDnS1H0CkoTZqoz7He1yb/DiX955/oSpVAGHhktLc=",
@ -50940,24 +51030,6 @@
"id": "0163c88a-9ef4-4162-9ca4-17556a156a94",
"last_modified": 1562023966614
},
{
"schema": 1562023961331,
"derHash": "EUdT6I0ADnWZYVqZB+Jrc7bYUTF/8rJ6yp24/FBWkqc=",
"subject": "CN=E-Tugra Organization Validated CA,OU=E-Tuğra Sertifikasyon Merkezi,O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.,L=Ankara,C=TR",
"subjectDN": "MIG1MQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMUAwPgYDVQQKDDdFLVR1xJ9yYSBFQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMScwJQYDVQQLDB5FLVR1xJ9yYSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxKjAoBgNVBAMMIUUtVHVncmEgT3JnYW5pemF0aW9uIFZhbGlkYXRlZCBDQQ==",
"whitelist": false,
"attachment": {
"hash": "c20540a909d14bde73c51dde53da2ff3fea4d75a0c875924065198ab7de00da3",
"size": 2304,
"filename": "2C9V2-VZ5v93wYg0HupOPel5wBqM8YEDtTLQWSkHjis=.pem",
"location": "security-state-staging/intermediates/375b6c2a-70ea-49da-8638-9e7de1fc7e9b.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "2C9V2+VZ5v93wYg0HupOPel5wBqM8YEDtTLQWSkHjis=",
"crlite_enrolled": true,
"id": "14fdc6a9-ae04-401c-9371-d01b4bbb58b9",
"last_modified": 1562023962077
},
{
"schema": 1562023958320,
"derHash": "L9Qqlsgw/SxVKywnZg7ukwfYRwbem3XPOa51DrIhue4=",
@ -51966,24 +52038,6 @@
"id": "bf754a3f-1f3e-4515-933a-fcb359cafde5",
"last_modified": 1562023865923
},
{
"schema": 1562023864420,
"derHash": "y2/O5BxV4kd03wK+Nd5tQY6U71gR99sTc6+ICc9wfyo=",
"subject": "CN=E-Tugra Domain Validated CA,OU=E-Tuğra Sertifikasyon Merkezi,O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.,L=Ankara,C=TR",
"subjectDN": "MIGvMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMUAwPgYDVQQKDDdFLVR1xJ9yYSBFQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMScwJQYDVQQLDB5FLVR1xJ9yYSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxJDAiBgNVBAMMG0UtVHVncmEgRG9tYWluIFZhbGlkYXRlZCBDQQ==",
"whitelist": false,
"attachment": {
"hash": "c6b2887b29d06c3a32442bacd3087e92f206a5fa698d64deded68c4d8bb5d347",
"size": 2296,
"filename": "DReMCzHTvlRp8z0vjOXH2lx0lpHIz5iXick53RZbRT8=.pem",
"location": "security-state-staging/intermediates/570f1b75-429e-4c79-b0e9-d7653e227ce7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "DReMCzHTvlRp8z0vjOXH2lx0lpHIz5iXick53RZbRT8=",
"crlite_enrolled": true,
"id": "feefbefd-6161-49d5-84fd-5b09c850c80c",
"last_modified": 1562023865176
},
{
"schema": 1562023862132,
"derHash": "rw42PK5t9Inyl2ooTRLUwzyUsTX6d/ieiSmNdJHpmXQ=",
@ -53388,24 +53442,6 @@
"id": "d5ea596c-6fe9-45d3-84b0-0f1eb9ea2b08",
"last_modified": 1559866177285
},
{
"schema": 1559866168360,
"derHash": "znrcGXdXpS5pogFMzgPZgGMlAnZHQsKSPXOAVo4hAKY=",
"subject": "CN=E-Tugra Extended Validated CA,OU=E-Tuğra Sertifikasyon Merkezi,O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.,L=Ankara,C=TR",
"subjectDN": "MIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMUAwPgYDVQQKDDdFLVR1xJ9yYSBFQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMScwJQYDVQQLDB5FLVR1xJ9yYSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxJjAkBgNVBAMMHUUtVHVncmEgRXh0ZW5kZWQgVmFsaWRhdGVkIENB",
"whitelist": false,
"attachment": {
"hash": "12ff7eb3fc7ad0d030464cfca8808d4239fab2f60c03f47a3f76ec1c962d10f8",
"size": 2296,
"filename": "CbsSUO015uoyaPW3UoozNFDyIZuKJooRSCguLZLEHjg=.pem",
"location": "security-state-staging/intermediates/b4924736-081c-4006-83d9-18747abe70b7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "CbsSUO015uoyaPW3UoozNFDyIZuKJooRSCguLZLEHjg=",
"crlite_enrolled": true,
"id": "7c935540-4c03-4352-b768-16756b45aed8",
"last_modified": 1559866169149
},
{
"schema": 1559866037153,
"derHash": "Pmk2hUsVb7sV7phEye47v5L4SSiXp3L5CSxS7ShQfr8=",

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

@ -411,6 +411,10 @@ pub enum SystemColor {
#[parse(condition = "ParserContext::in_ua_or_chrome_sheet")]
MozAccentColorForeground,
/// The background-color for :autofill-ed inputs.
#[parse(condition = "ParserContext::in_ua_or_chrome_sheet")]
MozAutofillBackground,
/// Media rebar text.
MozWinMediatext,
/// Communications rebar text.

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

@ -1,7 +1,6 @@
[system-color-compute.html]
[color-scheme property affects Menu system color keyword]
expected: FAIL
prefs: [layout.css.color-scheme.enabled:true]
bug: https://github.com/w3c/csswg-drafts/issues/6773
[Inherited system color keyword is observable on text-shadow]
expected: FAIL
@ -41,3 +40,41 @@
[Inherited system color keyword is observable on stroke]
expected: FAIL
[System color computes to itself on color]
expected: FAIL
[System color computes to itself on background-color]
expected: FAIL
[System color computes to itself on box-shadow]
expected: FAIL
[System color computes to itself on text-shadow]
expected: FAIL
[System color computes to itself on border-left-color]
expected: FAIL
[System color computes to itself on border-top-color]
expected: FAIL
[System color computes to itself on border-right-color]
expected: FAIL
[System color computes to itself on border-bottom-color]
expected: FAIL
[System color computes to itself on column-rule-color]
expected: FAIL
[System color computes to itself on outline-color]
expected: FAIL
[System color computes to itself on caret-color]
expected: FAIL
[System color computes to itself on fill]
expected: FAIL
[System color computes to itself on stroke]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-016a.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-049.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-044.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-054.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-064.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-059.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-078.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-073.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-088.html]
expected: FAIL

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

@ -1,2 +0,0 @@
[css3-counter-styles-083.html]
expected: FAIL

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

@ -2,4 +2,5 @@
[Autofocus should match :focus-visible]
expected:
if (os == "mac") and not debug: [PASS, FAIL]
if (os == "win") and not debug: [PASS, FAIL]
if (os == "android") and not debug: [PASS, FAIL]

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

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>hebrew, outside range</title>
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
<link rel='help' href='http://www.w3.org/TR/css-counter-styles-3/#simple-numeric'>
<link rel='help' href='https://bugzilla.mozilla.org/show_bug.cgi?id=1738356'>
<meta name='flags' content='font'>
<style>
ol li { list-style-type: hebrew; }
/* the following CSS is not part of the test */
.test { font-size: 25px; }
ol { margin: 0; padding-left: 8em; }
</style>
</head>
<body>
<p class="instructions">Test passes if the two columns are the same, IGNORING the suffix.</p>
<div class="test">
<ol start="10999">
<div><bdi dir=ltr>י׳תתקצט. </bdi>י׳תתקצט</div>
<div><bdi dir=ltr>יא׳. </bdi>11000</div>
<div><bdi dir=ltr>יא׳א. </bdi>11001</div>
</ol>
</div>
<!--Notes:
You will need an appropriate font to run this test.
To see the ASCII decimal number associated with a row, mouse over it and the number will pop up in a tooltip.
-->
</body>
</html>

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

@ -1,14 +1,15 @@
<!DOCTYPE html>
<html lang="en" >
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta charset="utf-8">
<title>hebrew, outside range</title>
<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'>
<link rel='help' href='http://www.w3.org/TR/css-counter-styles-3/#simple-numeric'>
<link rel="reviewer" title="Chris Lilley" href="mailto:chris@w3.org" />
<link rel="reviewer" title="Chris Lilley" href="mailto:chris@w3.org">
<link rel='match' href='css3-counter-styles-016a-ref.html'>
<link rel='match' href='css3-counter-styles-016a-alt-ref.html'><!-- Gecko prefers this rendering over the fallback rendering -->
<meta name="assert" content="list-style-type: hebrew produces numbers in the fallback counter style above the limit per the spec.">
<style type='text/css'>
<style>
ol li { list-style-type: hebrew; }
/* the following CSS is not part of the test */
.test { font-size: 25px; }

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

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>japanese-formal, outside range</title>
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
<link rel='help' href='http://www.w3.org/TR/css-counter-styles-3/#complex-cjk'>
<link rel='help' href='https://bugzilla.mozilla.org/show_bug.cgi?id=1738356'>
<meta name='flags' content='font'>
<style type='text/css'>
.test { font-size: 25px; }
ol { margin: 0; padding-left: 8em; }
ol li { list-style-type: japanese-formal; }
</style>
</head>
<body>
<p class="instructions">Test fails if the two columns of the first line are NOT the same. Otherwise, test passes only if the left column of the 2nd and 3rd lines is NOT decimal digits and is NOT the same as the right side. Score as Partial if the columns of the 2nd and 3rd lines are the same (ie. fallback was used). In all this IGNORE the suffix.</p>
<div class="test"><ol start="9999">
<div><bdi>九阡九百九拾九、</bdi>九阡九百九拾九</div>
<div><bdi>壱萬、</bdi>一〇〇〇〇</div>
<div><bdi>壱萬壱、</bdi>一〇〇〇一</div>
</ol></div>
<!--Notes:
You will need an appropriate font to run this test.
To see the ASCII decimal number associated with a row, mouse over it and the number will pop up in a tooltip.
-->
</body>
</html>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше