From 386ca0a89c42fd201843f617b2fd6b6d1de77f59 Mon Sep 17 00:00:00 2001 From: Matt Campbell Date: Fri, 22 Jul 2022 08:40:39 -0500 Subject: [PATCH] refactor!: String indices are always in UTF-8 code units (#114) --- common/src/lib.rs | 30 +- consumer/src/lib.rs | 6 +- consumer/src/node.rs | 6 +- consumer/src/tree.rs | 16 +- platforms/windows/examples/hello_world.rs | 5 +- platforms/windows/examples/winit.rs | 6 +- platforms/windows/src/tests/simple.rs | 6 +- platforms/windows/src/tests/subclassed.rs | 6 +- testdata/README.md | 3 - testdata/source/chromium.diff | 378 - testdata/source/convert_chromium_tree.py | 284 - testdata/web-page-sample-full-tree.json | 8326 --------------------- testdata/web-page-sample.html | 127 - 13 files changed, 25 insertions(+), 9174 deletions(-) delete mode 100644 testdata/README.md delete mode 100644 testdata/source/chromium.diff delete mode 100644 testdata/source/convert_chromium_tree.py delete mode 100644 testdata/web-page-sample-full-tree.json delete mode 100644 testdata/web-page-sample.html diff --git a/common/src/lib.rs b/common/src/lib.rs index 37da34a19..99e5d2973 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -571,16 +571,6 @@ pub enum TextDecoration { Wavy, } -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[cfg_attr(feature = "schemars", derive(JsonSchema))] -#[cfg_attr(feature = "serde", serde(crate = "serde"))] -#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] -pub enum StringEncoding { - Utf8, - Utf16, -} - // This is NonZeroU128 because we regularly store Option. // 128-bit to handle UUIDs. pub type NodeIdContent = NonZeroU128; @@ -607,8 +597,7 @@ impl From for NodeId { #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] pub struct TextMarker { pub marker_type: MarkerType, - /// Indices are in code units for the encoding specified in - /// [`Tree::source_string_encoding`]. + /// Indices are in UTF-8 code units. pub range: Range, } @@ -639,8 +628,7 @@ fn is_empty(slice: &[T]) -> bool { slice.is_empty() } -/// Offsets are in code units for the encoding specified in -/// [`Tree::source_string_encoding`]. +/// Offsets are in UTF-8 code units. #[derive(Clone, Copy, Debug, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] @@ -947,8 +935,7 @@ pub struct Node { #[cfg_attr(feature = "serde", serde(skip_serializing_if = "is_empty"))] pub character_offsets: Box<[f32]>, - /// For inline text. The indices of each word, in code units for - /// the encoding specified in [`Tree::source_string_encoding`]. + /// For inline text. The indices of each word, in UTF-8 code units. #[cfg_attr(feature = "serde", serde(default))] #[cfg_attr(feature = "serde", serde(skip_serializing_if = "is_empty"))] pub words: Box<[Range]>, @@ -1337,14 +1324,6 @@ impl Node { pub struct Tree { pub root: NodeId, - /// The string encoding used by the tree source. This is required - /// to disambiguate string indices, e.g. in [`Node::words`]. - /// When the tree is serialized, the encoding specified by - /// the target serialization format is always used. But this way, - /// the tree source doesn't have to convert string indices; - /// the platform adapter will do this if needed. - pub source_string_encoding: StringEncoding, - /// The node that's used as the root scroller, if any. On some platforms /// like Android we need to ignore accessibility scroll offsets for /// that node and get them from the viewport instead. @@ -1353,10 +1332,9 @@ pub struct Tree { } impl Tree { - pub fn new(root: NodeId, source_string_encoding: StringEncoding) -> Tree { + pub fn new(root: NodeId) -> Tree { Tree { root, - source_string_encoding, root_scroller: None, } } diff --git a/consumer/src/lib.rs b/consumer/src/lib.rs index 7909c2ec3..254598057 100644 --- a/consumer/src/lib.rs +++ b/consumer/src/lib.rs @@ -20,9 +20,7 @@ pub use iterators::{ #[cfg(test)] mod tests { use accesskit::kurbo::{Affine, Rect, Vec2}; - use accesskit::{ - ActionHandler, ActionRequest, Node, NodeId, Role, StringEncoding, Tree, TreeUpdate, - }; + use accesskit::{ActionHandler, ActionRequest, Node, NodeId, Role, Tree, TreeUpdate}; use std::num::NonZeroU128; use std::sync::Arc; @@ -145,7 +143,7 @@ mod tests { button_3_2, empty_container_3_3_ignored, ], - tree: Some(Tree::new(ROOT_ID, StringEncoding::Utf8)), + tree: Some(Tree::new(ROOT_ID)), focus: None, }; crate::tree::Tree::new(initial_update, Box::new(NullActionHandler {})) diff --git a/consumer/src/node.rs b/consumer/src/node.rs index 137442b9d..47b6b0aa7 100644 --- a/consumer/src/node.rs +++ b/consumer/src/node.rs @@ -533,7 +533,7 @@ impl Node<'_> { #[cfg(test)] mod tests { use accesskit::kurbo::{Point, Rect}; - use accesskit::{Node, NodeId, Role, StringEncoding, Tree, TreeUpdate}; + use accesskit::{Node, NodeId, Role, Tree, TreeUpdate}; use std::num::NonZeroU128; use crate::tests::*; @@ -792,7 +792,7 @@ mod tests { }, Node::new(NODE_ID_2, Role::Button), ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(update, Box::new(NullActionHandler {})); @@ -829,7 +829,7 @@ mod tests { ..Node::new(NODE_ID_5, Role::StaticText) }, ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(update, Box::new(NullActionHandler {})); diff --git a/consumer/src/tree.rs b/consumer/src/tree.rs index 97ae4ef5d..98cf713a2 100644 --- a/consumer/src/tree.rs +++ b/consumer/src/tree.rs @@ -345,7 +345,7 @@ impl Tree { #[cfg(test)] mod tests { - use accesskit::{Node, NodeId, Role, StringEncoding, Tree, TreeUpdate}; + use accesskit::{Node, NodeId, Role, Tree, TreeUpdate}; use std::num::NonZeroU128; use crate::tests::NullActionHandler; @@ -358,7 +358,7 @@ mod tests { fn init_tree_with_root_node() { let update = TreeUpdate { nodes: vec![Node::new(NODE_ID_1, Role::Window)], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(update, Box::new(NullActionHandler {})); @@ -378,7 +378,7 @@ mod tests { Node::new(NODE_ID_2, Role::Button), Node::new(NODE_ID_3, Role::Button), ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(update, Box::new(NullActionHandler {})); @@ -399,7 +399,7 @@ mod tests { let root_node = Node::new(NODE_ID_1, Role::Window); let first_update = TreeUpdate { nodes: vec![root_node.clone()], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(first_update, Box::new(NullActionHandler {})); @@ -457,7 +457,7 @@ mod tests { }, Node::new(NODE_ID_2, Role::RootWebArea), ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(first_update, Box::new(NullActionHandler {})); @@ -504,7 +504,7 @@ mod tests { Node::new(NODE_ID_2, Role::Button), Node::new(NODE_ID_3, Role::Button), ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: Some(NODE_ID_2), }; let tree = super::Tree::new(first_update, Box::new(NullActionHandler {})); @@ -569,7 +569,7 @@ mod tests { ..child_node.clone() }, ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: None, }; let tree = super::Tree::new(first_update, Box::new(NullActionHandler {})); @@ -620,7 +620,7 @@ mod tests { Node::new(NODE_ID_2, Role::Button), Node::new(NODE_ID_3, Role::Button), ], - tree: Some(Tree::new(NODE_ID_1, StringEncoding::Utf8)), + tree: Some(Tree::new(NODE_ID_1)), focus: Some(NODE_ID_2), }; let tree = super::Tree::new(update.clone(), Box::new(NullActionHandler {})); diff --git a/platforms/windows/examples/hello_world.rs b/platforms/windows/examples/hello_world.rs index a61dd817e..e078f6932 100644 --- a/platforms/windows/examples/hello_world.rs +++ b/platforms/windows/examples/hello_world.rs @@ -4,8 +4,7 @@ use std::{cell::RefCell, convert::TryInto, mem::drop, num::NonZeroU128, rc::Rc}; use accesskit::kurbo::Rect; use accesskit::{ - Action, ActionHandler, ActionRequest, DefaultActionVerb, Node, NodeId, Role, StringEncoding, - Tree, TreeUpdate, + Action, ActionHandler, ActionRequest, DefaultActionVerb, Node, NodeId, Role, Tree, TreeUpdate, }; use lazy_static::lazy_static; use windows::{ @@ -105,7 +104,7 @@ fn get_initial_state() -> TreeUpdate { let button_2 = make_button(BUTTON_2_ID, "Button 2"); TreeUpdate { nodes: vec![root, button_1, button_2], - tree: Some(Tree::new(WINDOW_ID, StringEncoding::Utf8)), + tree: Some(Tree::new(WINDOW_ID)), focus: None, } } diff --git a/platforms/windows/examples/winit.rs b/platforms/windows/examples/winit.rs index 0cefd8248..c2d68cf0a 100644 --- a/platforms/windows/examples/winit.rs +++ b/platforms/windows/examples/winit.rs @@ -1,6 +1,4 @@ -use accesskit::{ - Action, ActionHandler, ActionRequest, Node, NodeId, Role, StringEncoding, Tree, TreeUpdate, -}; +use accesskit::{Action, ActionHandler, ActionRequest, Node, NodeId, Role, Tree, TreeUpdate}; use accesskit_windows::{Adapter, SubclassingAdapter}; use std::{ num::NonZeroU128, @@ -67,7 +65,7 @@ fn initial_tree_update(state: &State) -> TreeUpdate { let button_2 = make_button(BUTTON_2_ID, "Button 2"); TreeUpdate { nodes: vec![root, button_1, button_2], - tree: Some(Tree::new(WINDOW_ID, StringEncoding::Utf8)), + tree: Some(Tree::new(WINDOW_ID)), focus: state.is_window_focused.then_some(state.focus), } } diff --git a/platforms/windows/src/tests/simple.rs b/platforms/windows/src/tests/simple.rs index 8261b30c4..4f0341b0e 100644 --- a/platforms/windows/src/tests/simple.rs +++ b/platforms/windows/src/tests/simple.rs @@ -5,9 +5,7 @@ use std::{convert::TryInto, num::NonZeroU128}; -use accesskit::{ - ActionHandler, ActionRequest, Node, NodeId, Role, StringEncoding, Tree, TreeUpdate, -}; +use accesskit::{ActionHandler, ActionRequest, Node, NodeId, Role, Tree, TreeUpdate}; use windows::{core::*, Win32::UI::Accessibility::*}; use super::*; @@ -36,7 +34,7 @@ fn get_initial_state() -> TreeUpdate { let button_2 = make_button(BUTTON_2_ID, "Button 2"); TreeUpdate { nodes: vec![root, button_1, button_2], - tree: Some(Tree::new(WINDOW_ID, StringEncoding::Utf8)), + tree: Some(Tree::new(WINDOW_ID)), focus: None, } } diff --git a/platforms/windows/src/tests/subclassed.rs b/platforms/windows/src/tests/subclassed.rs index 0e52878d1..9ca112e5e 100644 --- a/platforms/windows/src/tests/subclassed.rs +++ b/platforms/windows/src/tests/subclassed.rs @@ -5,9 +5,7 @@ use std::num::NonZeroU128; -use accesskit::{ - ActionHandler, ActionRequest, Node, NodeId, Role, StringEncoding, Tree, TreeUpdate, -}; +use accesskit::{ActionHandler, ActionRequest, Node, NodeId, Role, Tree, TreeUpdate}; use windows::Win32::{Foundation::*, UI::Accessibility::*}; use winit::{ event_loop::EventLoop, @@ -41,7 +39,7 @@ fn get_initial_state() -> TreeUpdate { let button_2 = make_button(BUTTON_2_ID, "Button 2"); TreeUpdate { nodes: vec![root, button_1, button_2], - tree: Some(Tree::new(WINDOW_ID, StringEncoding::Utf8)), + tree: Some(Tree::new(WINDOW_ID)), focus: None, } } diff --git a/testdata/README.md b/testdata/README.md deleted file mode 100644 index 811b0e310..000000000 --- a/testdata/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Test Data - -So far, this directory contains a single sample web page, and the corresponding accessibility tree. The tree was produced by a modified version of Chromium on Linux. diff --git a/testdata/source/chromium.diff b/testdata/source/chromium.diff deleted file mode 100644 index 8ed70edb1..000000000 --- a/testdata/source/chromium.diff +++ /dev/null @@ -1,378 +0,0 @@ -diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.cc b/content/browser/accessibility/accessibility_tree_formatter_blink.cc -index 7fb29527c033..7d1bc3391bce 100644 ---- a/content/browser/accessibility/accessibility_tree_formatter_blink.cc -+++ b/content/browser/accessibility/accessibility_tree_formatter_blink.cc -@@ -31,25 +31,6 @@ namespace { - absl::optional GetStringAttribute( - const ui::AXNode& node, - ax::mojom::StringAttribute attr) { -- // Language is different from other string attributes as it inherits and has -- // a method to compute it. -- if (attr == ax::mojom::StringAttribute::kLanguage) { -- std::string value = node.GetLanguage(); -- if (value.empty()) { -- return absl::nullopt; -- } -- return value; -- } -- -- // Font Family is different from other string attributes as it inherits. -- if (attr == ax::mojom::StringAttribute::kFontFamily) { -- std::string value = node.GetInheritedStringAttribute(attr); -- if (value.empty()) { -- return absl::nullopt; -- } -- return value; -- } -- - // Always return the attribute if the node has it, even if the value is an - // empty string. - std::string value; -@@ -69,38 +50,6 @@ std::string FormatColor(int argb) { - std::string IntAttrToString(const ui::AXNode& node, - ax::mojom::IntAttribute attr, - int32_t value) { -- if (ui::IsNodeIdIntAttribute(attr)) { -- // Relation -- ui::AXTreeID tree_id = node.tree()->GetAXTreeID(); -- ui::AXNode* target = ui::AXTreeManagerMap::GetInstance() -- .GetManager(tree_id) -- ->GetNodeFromTree(tree_id, value); -- if (!target) -- return "null"; -- -- std::string result = ui::ToString(target->data().role); -- // Provide some extra info about the related object via the name or -- // possibly the class (if an element). -- // TODO(accessibility) Include all relational attributes here. -- // TODO(accessibility) Consider using line numbers from the results instead. -- if (attr == ax::mojom::IntAttribute::kNextOnLineId || -- attr == ax::mojom::IntAttribute::kPreviousOnLineId) { -- if (target->data().HasStringAttribute( -- ax::mojom::StringAttribute::kName)) { -- result += ":\""; -- result += target->data().GetStringAttribute( -- ax::mojom::StringAttribute::kName); -- result += "\""; -- } else if (target->data().HasStringAttribute( -- ax::mojom::StringAttribute::kClassName)) { -- result += "."; -- result += target->data().GetStringAttribute( -- ax::mojom::StringAttribute::kClassName); -- } -- } -- return result; -- } -- - switch (attr) { - case ax::mojom::IntAttribute::kAriaCurrentState: - return ui::ToString(static_cast(value)); -@@ -137,9 +86,9 @@ std::string IntAttrToString(const ui::AXNode& node, - case ax::mojom::IntAttribute::kImageAnnotationStatus: - return ui::ToString(static_cast(value)); - case ax::mojom::IntAttribute::kBackgroundColor: -- return FormatColor(node.ComputeBackgroundColor()); -+ return FormatColor(value); - case ax::mojom::IntAttribute::kColor: -- return FormatColor(node.ComputeColor()); -+ return FormatColor(value); - // No pretty printing necessary for these: - case ax::mojom::IntAttribute::kActivedescendantId: - case ax::mojom::IntAttribute::kAriaCellColumnIndex: -@@ -320,139 +269,7 @@ void AccessibilityTreeFormatterBlink::RecursiveBuildTree( - void AccessibilityTreeFormatterBlink::AddProperties( - const BrowserAccessibility& node, - base::DictionaryValue* dict) const { -- int id = node.GetId(); -- dict->SetInteger("id", id); -- -- dict->SetString("internalRole", ui::ToString(node.GetData().role)); -- -- gfx::Rect bounds = -- gfx::ToEnclosingRect(node.GetData().relative_bounds.bounds); -- dict->SetInteger("boundsX", bounds.x()); -- dict->SetInteger("boundsY", bounds.y()); -- dict->SetInteger("boundsWidth", bounds.width()); -- dict->SetInteger("boundsHeight", bounds.height()); -- -- ui::AXOffscreenResult offscreen_result = ui::AXOffscreenResult::kOnscreen; -- gfx::Rect page_bounds = node.GetClippedRootFrameBoundsRect(&offscreen_result); -- dict->SetInteger("pageBoundsX", page_bounds.x()); -- dict->SetInteger("pageBoundsY", page_bounds.y()); -- dict->SetInteger("pageBoundsWidth", page_bounds.width()); -- dict->SetInteger("pageBoundsHeight", page_bounds.height()); -- -- dict->SetBoolean("transform", -- node.GetData().relative_bounds.transform && -- !node.GetData().relative_bounds.transform->IsIdentity()); -- -- gfx::Rect unclipped_bounds = -- node.GetUnclippedRootFrameBoundsRect(&offscreen_result); -- dict->SetInteger("unclippedBoundsX", unclipped_bounds.x()); -- dict->SetInteger("unclippedBoundsY", unclipped_bounds.y()); -- dict->SetInteger("unclippedBoundsWidth", unclipped_bounds.width()); -- dict->SetInteger("unclippedBoundsHeight", unclipped_bounds.height()); -- -- for (int32_t state_index = static_cast(ax::mojom::State::kNone); -- state_index <= static_cast(ax::mojom::State::kMaxValue); -- ++state_index) { -- auto state = static_cast(state_index); -- if (node.HasState(state)) -- dict->SetBoolean(ui::ToString(state), true); -- } -- -- if (offscreen_result == ui::AXOffscreenResult::kOffscreen) -- dict->SetBoolean(STATE_OFFSCREEN, true); -- -- for (int32_t attr_index = -- static_cast(ax::mojom::StringAttribute::kNone); -- attr_index <= -- static_cast(ax::mojom::StringAttribute::kMaxValue); -- ++attr_index) { -- auto attr = static_cast(attr_index); -- auto maybe_value = GetStringAttribute(*node.node(), attr); -- if (maybe_value.has_value()) -- dict->SetString(ui::ToString(attr), maybe_value.value()); -- } -- -- for (int32_t attr_index = -- static_cast(ax::mojom::IntAttribute::kNone); -- attr_index <= static_cast(ax::mojom::IntAttribute::kMaxValue); -- ++attr_index) { -- auto attr = static_cast(attr_index); -- auto maybe_value = ui::ComputeAttribute(&node, attr); -- if (maybe_value.has_value()) { -- dict->SetString(ui::ToString(attr), -- IntAttrToString(*node.node(), attr, maybe_value.value())); -- } -- } -- -- for (int32_t attr_index = -- static_cast(ax::mojom::FloatAttribute::kNone); -- attr_index <= static_cast(ax::mojom::FloatAttribute::kMaxValue); -- ++attr_index) { -- auto attr = static_cast(attr_index); -- if (node.HasFloatAttribute(attr) && -- std::isfinite(node.GetFloatAttribute(attr))) -- dict->SetDouble(ui::ToString(attr), node.GetFloatAttribute(attr)); -- } -- -- for (int32_t attr_index = -- static_cast(ax::mojom::BoolAttribute::kNone); -- attr_index <= static_cast(ax::mojom::BoolAttribute::kMaxValue); -- ++attr_index) { -- auto attr = static_cast(attr_index); -- if (node.HasBoolAttribute(attr)) -- dict->SetBoolean(ui::ToString(attr), node.GetBoolAttribute(attr)); -- } -- -- for (int32_t attr_index = -- static_cast(ax::mojom::IntListAttribute::kNone); -- attr_index <= -- static_cast(ax::mojom::IntListAttribute::kMaxValue); -- ++attr_index) { -- auto attr = static_cast(attr_index); -- if (node.HasIntListAttribute(attr)) { -- std::vector values; -- node.GetIntListAttribute(attr, &values); -- base::ListValue value_list; -- for (size_t i = 0; i < values.size(); ++i) { -- if (ui::IsNodeIdIntListAttribute(attr)) { -- BrowserAccessibility* target = node.manager()->GetFromID(values[i]); -- if (target) -- value_list.AppendString(ui::ToString(target->GetData().role)); -- else -- value_list.AppendString("null"); -- } else { -- value_list.AppendInteger(values[i]); -- } -- } -- dict->SetKey(ui::ToString(attr), std::move(value_list)); -- } -- } -- -- // Check for relevant rich text selection info in AXTreeData -- ui::AXTree::Selection unignored_selection = -- node.manager()->ax_tree()->GetUnignoredSelection(); -- int anchor_id = unignored_selection.anchor_object_id; -- if (id == anchor_id) { -- int anchor_offset = unignored_selection.anchor_offset; -- dict->SetInteger("TreeData.textSelStartOffset", anchor_offset); -- } -- int focus_id = unignored_selection.focus_object_id; -- if (id == focus_id) { -- int focus_offset = unignored_selection.focus_offset; -- dict->SetInteger("TreeData.textSelEndOffset", focus_offset); -- } -- -- std::vector actions_strings; -- for (int32_t action_index = -- static_cast(ax::mojom::Action::kNone) + 1; -- action_index <= static_cast(ax::mojom::Action::kMaxValue); -- ++action_index) { -- auto action = static_cast(action_index); -- if (node.HasAction(action)) -- actions_strings.push_back(ui::ToString(action)); -- } -- if (!actions_strings.empty()) -- dict->SetString("actions", base::JoinString(actions_strings, ",")); -+ AddProperties(*node.node(), dict); - } - - void AccessibilityTreeFormatterBlink::AddProperties( -@@ -468,6 +285,10 @@ void AccessibilityTreeFormatterBlink::AddProperties( - dict->SetInteger("boundsWidth", bounds.width()); - dict->SetInteger("boundsHeight", bounds.height()); - -+ if (node.data().relative_bounds.offset_container_id > 0) { -+ dict->SetInteger("boundsOffsetContainerId", node.data().relative_bounds.offset_container_id); -+ } -+ - // TODO(kschmi): Add support for the following (potentially via AXTree): - // GetClippedRootFrameBoundsRect - // pageBoundsX -@@ -560,19 +381,7 @@ void AccessibilityTreeFormatterBlink::AddProperties( - node.GetIntListAttribute(attr, &values); - base::ListValue value_list; - for (auto value : values) { -- if (ui::IsNodeIdIntListAttribute(attr)) { -- ui::AXTreeID tree_id = node.tree()->GetAXTreeID(); -- ui::AXNode* target = ui::AXTreeManagerMap::GetInstance() -- .GetManager(tree_id) -- ->GetNodeFromTree(tree_id, node.id()); -- -- if (target) -- value_list.AppendString(ui::ToString(target->data().role)); -- else -- value_list.AppendString("null"); -- } else { -- value_list.AppendInteger(value); -- } -+ value_list.AppendInteger(value); - } - dict->SetKey(ui::ToString(attr), std::move(value_list)); - } -diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc -index 0940758c5efb..753a7f2ee8c1 100644 ---- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc -+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc -@@ -2278,6 +2278,10 @@ IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, - RunHtmlTest(FILE_PATH_LITERAL("input-types-with-value.html")); - } - -+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, WebPageSample) { -+ RunHtmlTest(FILE_PATH_LITERAL("web-page-sample.html")); -+} -+ - IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, - AccessibilityInputTypesWithPlaceholder) { - RunHtmlTest(FILE_PATH_LITERAL("input-types-with-placeholder.html")); -diff --git a/ui/accessibility/platform/inspect/ax_tree_formatter_base.cc b/ui/accessibility/platform/inspect/ax_tree_formatter_base.cc -index 33fb9f61a0bc..92e536a8ef0f 100644 ---- a/ui/accessibility/platform/inspect/ax_tree_formatter_base.cc -+++ b/ui/accessibility/platform/inspect/ax_tree_formatter_base.cc -@@ -4,6 +4,7 @@ - - #include "ui/accessibility/platform/inspect/ax_tree_formatter_base.h" - -+#include "base/json/json_string_value_serializer.h" - #include "base/notreached.h" - #include "base/strings/string_util.h" - #include "base/strings/stringprintf.h" -@@ -13,15 +14,6 @@ - - namespace ui { - --namespace { -- --const char kIndentSymbol = '+'; --const int kIndentSymbolCount = 2; --const char kSkipString[] = "@NO_DUMP"; --const char kSkipChildren[] = "@NO_CHILDREN_DUMP"; -- --} // namespace -- - AXTreeFormatterBase::AXTreeFormatterBase() = default; - - AXTreeFormatterBase::~AXTreeFormatterBase() = default; -@@ -32,21 +24,11 @@ const char AXTreeFormatterBase::kScriptsDictAttr[] = "scripts"; - - bool AXTreeFormatterBase::ShouldDumpNode( - const AXPlatformNodeDelegate& node) const { -- for (const std::pair& -- string_attribute : node.GetData().string_attributes) { -- if (string_attribute.second.find(kSkipString) != std::string::npos) -- return false; -- } - return true; - } - - bool AXTreeFormatterBase::ShouldDumpChildren( - const AXPlatformNodeDelegate& node) const { -- for (const std::pair& -- string_attribute : node.GetData().string_attributes) { -- if (string_attribute.second.find(kSkipChildren) != std::string::npos) -- return false; -- } - return true; - } - -@@ -92,42 +74,9 @@ base::Value AXTreeFormatterBase::BuildTreeForNode(ui::AXNode* root) const { - void AXTreeFormatterBase::RecursiveFormatTree(const base::Value& dict, - std::string* contents, - int depth) const { -- // Check dictionary against node filters, may require us to skip this node -- // and its children. -- if (MatchesNodeFilters(dict)) -- return; -- -- if (dict.DictEmpty()) -- return; -- -- std::string indent = std::string(depth * kIndentSymbolCount, kIndentSymbol); -- std::string line = -- indent + ProcessTreeForOutput(base::Value::AsDictionaryValue(dict)); -- -- // TODO(accessibility): This can be removed once the UIA tree formatter -- // can call ShouldDumpNode(). -- if (line.find(kSkipString) != std::string::npos) -- return; -- -- // Normalize any Windows-style line endings by removing \r. -- base::RemoveChars(line, "\r", &line); -- -- // Replace literal newlines with "" -- base::ReplaceChars(line, "\n", "", &line); -- -- *contents += line + "\n"; -- -- // TODO(accessibility): This can be removed once the UIA tree formatter -- // can call ShouldDumpChildren(). -- if (line.find(kSkipChildren) != std::string::npos) -- return; -- -- const base::Value* children = dict.FindListPath(kChildrenDictAttr); -- if (children && !children->GetList().empty()) { -- for (const auto& child_dict : children->GetList()) { -- RecursiveFormatTree(child_dict, contents, depth + 1); -- } -- } -+ JSONStringValueSerializer serializer(contents); -+ serializer.set_pretty_print(true); -+ serializer.Serialize(dict); - } - - void AXTreeFormatterBase::SetPropertyFilters( -diff --git a/ui/accessibility/platform/inspect/ax_tree_formatter_base.h b/ui/accessibility/platform/inspect/ax_tree_formatter_base.h -index b53da126acda..1dc4f4df5d79 100644 ---- a/ui/accessibility/platform/inspect/ax_tree_formatter_base.h -+++ b/ui/accessibility/platform/inspect/ax_tree_formatter_base.h -@@ -127,7 +127,7 @@ class AX_EXPORT AXTreeFormatterBase : public AXTreeFormatter { - std::vector node_filters_; - - // Whether or not node ids should be included in the dump. -- bool show_ids_ = false; -+ bool show_ids_ = true; - - DISALLOW_COPY_AND_ASSIGN(AXTreeFormatterBase); - }; diff --git a/testdata/source/convert_chromium_tree.py b/testdata/source/convert_chromium_tree.py deleted file mode 100644 index 78f9b9e08..000000000 --- a/testdata/source/convert_chromium_tree.py +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2021 The AccessKit Authors. All rights reserved. -# Licensed under the Apache License, Version 2.0 (found in -# the LICENSE-APACHE file) or the MIT license (found in -# the LICENSE-MIT file), at your option. - -# Converts the JSON tree dump produced by a DumpAccessibilityTree test -# in our modified version of Chromium into the AccessKit schema. - -import binascii -import json -import re -import sys -import uuid - -input_filename = sys.argv[1] -output_filename = sys.argv[2] - -# Work around a flaw in the Chromium JSON serializer we're using. -input_encoded = open(input_filename, "rb").read() -def sub_hex(m): - return binascii.unhexlify(m.group(1)) -input_encoded = re.sub(br"%([0-9A-F]{2})", sub_hex, input_encoded) -input_root = json.loads(input_encoded) - -nodes = [] - - -def translate_role(input_role): - renames = {"popUpButton": "popupButton"} - return renames.get(input_role, input_role) - - -def add_attr(input_node, node, input_name, *, converter=None): - renames = { - "display": "cssDisplay", - "role": "ariaRole", - "text-align": "textAlign", - "ariaCurrentState": "ariaCurrent", - "haspopup": "hasPopup", - "childTreeId": "childTree", - "tableHeaderId": "tableHeader", - "tableRowHeaderId": "tableRowHeader", - "tableColumnHeaderId": "tableColumnHeader", - "activedescendantId": "activeDescendant", - "errormessageId": "errorMessage", - "inPageLinkTargetId": "inPageLinkTarget", - "memberOfId": "memberOf", - "nextOnLineId": "nextOnLine", - "popupForId": "popupFor", - "previousOnLineId": "previousOnLine", - "color": "foregroundColor", - "textOverlineStyle": "overline", - "textStrikethroughStyle": "strikethrough", - "textUnderlineStyle": "underline", - "previousFocusId": "previousFocus", - "nextFocusId": "nextFocus", - "indirectChildIds": "indirectChildren", - "controlsIds": "controls", - "detailsIds": "details", - "describedbyIds": "describedBy", - "flowtoIds": "flowTo", - "labelledbyIds": "labelledBy", - "radioGroupIds": "radioGroups", - } - name = renames.get(input_name, input_name) - value = input_node[input_name] - if converter is not None: - value = converter(value) - node[name] = value - - -def convert_color(rgb_str): - # TODO: Is this correct? - return int(rgb_str, 16) - - -def process_node(input_node): - node = {"id": input_node["id"], "role": translate_role(input_node["internalRole"])} - nodes.append(node) - - rect = { - "left": input_node["boundsX"], - "top": input_node["boundsY"], - "width": input_node["boundsWidth"], - "height": input_node["boundsHeight"], - } - bounds = {"rect": rect} - if ( - input_node.get("boundsOffsetContainerId") - and input_node["boundsOffsetContainerId"] != nodes[0]["id"] - ): - bounds["offsetContainer"] = input_node["boundsOffsetContainerId"] - node["bounds"] = bounds - - if "actions" in input_node: - node["actions"] = input_node["actions"].split(",") - - for input_name in ( - "name", - "nameFrom", - "description", - "descriptionFrom", - "selected", - "grabbed", - "characterOffsets", - "accessKey", - "autoComplete", - "checkedState", - "checkedStateDescription", - "childTreeId", - "className", - "containerLiveRelevant", - "containerLiveStatus", - "display", - "fontFamily", - "htmlTag", - "innerHtml", - "inputType", - "keyShortcuts", - "language", - "liveRelevant", - "liveStatus", - "placeholder", - "role", - "roleDescription", - "tooltip", - "url", - "defaultActionVerb", - "sortDirection", - "ariaCurrentState", - "haspopup", - "listStyle", - "text-align", - "valueForRange", - "minValueForRange", - "maxValueForRange", - "stepValueForRange", - "fontSize", - "fontWeight", - "textIndent", - "indirectChildIds", - "controlsIds", - "detailsIds", - "describedbyIds", - "flowtoIds", - "labelledbyIds", - "radioGroupIds", - "textOverlineStyle", - "textStrikethroughStyle", - "textUnderlineStyle", - ): - if input_name in input_node: - add_attr(input_node, node, input_name) - - for input_name in ( - "value", - "autofillAvailable", - "default", - "editable", - "focusable", - "hovered", - "ignored", - "invisible", - "linked", - "multiline", - "multiselectable", - "protected", - "required", - "visited", - "busy", - "nonatomicTextFieldRoot", - "containerLiveAtomic", - "containerLiveBusy", - "liveAtomic", - "modal", - "canvasHasFallback", - "scrollable", - "clickable", - "clipsChildren", - "notUserSelectableStyle", - "selectedFromFocus", - "isLineBreakingObject", - "isPageBreakingObject", - "hasAriaAttribute", - "touchPassThrough", - ): - if input_node.get(input_name): - add_attr(input_node, node, input_name) - - for input_name in ( - "scrollX", - "scrollXMin", - "scrollXMax", - "scrollY", - "scrollYMin", - "scrollYMax", - "ariaColumnCount", - "ariaCellColumnIndex", - "ariaCellColumnSpan", - "ariaRowCount", - "ariaCellRowIndex", - "ariaCellRowSpan", - "tableRowCount", - "tableColumnCount", - "tableHeaderId", - "tableRowIndex", - "tableRowHeaderId", - "tableColumnIndex", - "tableColumnHeaderId", - "tableCellColumnIndex", - "tableCellColumnSpan", - "tableCellRowIndex", - "tableCellRowSpan", - "hierarchicalLevel", - "activedescendantId", - "errormessageId", - "inPageLinkTargetId", - "memberOfId", - "nextOnLineId", - "popupForId", - "previousOnLineId", - "setSize", - "posInSet", - "previousFocusId", - "nextFocusId", - ): - if input_name in input_node: - add_attr(input_node, node, input_name, converter=int) - - for input_name in ("colorValue", "backgroundColor", "color"): - if input_name in input_node: - add_attr(input_node, node, input_name, converter=convert_color) - - if input_node.get("expanded"): - node["expanded"] = True - elif input_node.get("collapsed"): - node["expanded"] = False - - for input_name in ("horizontal", "vertical"): - if input_node.get(input_name): - node["orientation"] = input_name - break - - if "invalidState" in input_node: - if input_node["invalidState"] == "other": - node["invalidState"] = {"other": input_node["ariaInvalidValue"]} - else: - add_attr(input_node, node, "invalidState") - - if "restriction" in input_node: - node[input_node["restriction"]] = True - - if "textStyle" in input_node: - text_style = int(input_node["textStyle"]) - if text_style & 2: - node["bold"] = True - if text_style & 4: - node["italic"] = True - - if "wordStarts" in input_node: - node["words"] = [] - for i, start in enumerate(input_node["wordStarts"]): - end = input_node["wordEnds"][i] - node["words"].append({"start": start, "end": end}) - - if input_node.get("children"): - node["children"] = [] - for input_child in input_node["children"]: - child = process_node(input_child) - node["children"].append(child["id"]) - - return node - - -root = process_node(input_root) -namespace_uuid = uuid.UUID("6a529f27-3bc6-4609-80a6-370f5fd07030") -tree = { - "id": str(uuid.uuid5(namespace_uuid, output_filename)), - "sourceStringEncoding": "utf16", -} -# TODO: Other tree attributes? -tree_update = {"nodes": nodes, "tree": tree, "root": root["id"]} -with open(output_filename, "w") as f: - json.dump(tree_update, f, indent=" ") diff --git a/testdata/web-page-sample-full-tree.json b/testdata/web-page-sample-full-tree.json deleted file mode 100644 index 1e8455733..000000000 --- a/testdata/web-page-sample-full-tree.json +++ /dev/null @@ -1,8326 +0,0 @@ -{ - "nodes": [ - { - "id": 1, - "role": "rootWebArea", - "bounds": { - "rect": { - "left": 0.0, - "top": 0.0, - "width": 800.0, - "height": 600.0 - } - }, - "children": [ - 2 - ], - "name": "Web Page Sample", - "nameFrom": "relatedElement", - "focusable": true, - "scrollable": true, - "clipsChildren": true, - "isLineBreakingObject": true, - "fontFamily": "Tinos", - "htmlTag": "#document", - "language": "en-US", - "url": "http://127.0.0.1:45415/accessibility/html/web-page-sample.html", - "scrollX": 0.0, - "scrollXMin": 0.0, - "scrollXMax": 0.0, - "scrollY": 0.0, - "scrollYMin": 0.0, - "scrollYMax": 646.0, - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 2, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 0.0, - "top": 0.0, - "width": 785.0, - "height": 1247.0 - } - }, - "children": [ - 3 - ], - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "html", - "foregroundColor": 0 - }, - { - "id": 3, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 21.0, - "width": 769.0, - "height": 1210.0 - } - }, - "children": [ - 27, - 9, - 28, - 29, - 4, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 18, - 42, - 43, - 44, - 45 - ], - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "body", - "foregroundColor": 0 - }, - { - "id": 27, - "role": "heading", - "bounds": { - "rect": { - "left": 8.0, - "top": 21.0, - "width": 769.0, - "height": 38.0 - } - }, - "children": [ - 46 - ], - "name": "Web Page Sample", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "h1", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "textAlign": "left", - "bold": true, - "fontSize": 32.0, - "fontWeight": 700.0 - }, - { - "id": 46, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 21.0, - "width": 246.0, - "height": 37.0 - } - }, - "children": [ - 47 - ], - "name": "Web Page Sample", - "nameFrom": "contents", - "cssDisplay": "block", - "foregroundColor": 0, - "bold": true, - "fontSize": 32.0, - "fontWeight": 700.0 - }, - { - "id": 47, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 46, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 246.0, - "height": 36.0 - } - }, - "name": "Web Page Sample", - "nameFrom": "contents", - "characterOffsets": [ - 30.0, - 44.0, - 62.0, - 70.0, - 90.0, - 106.0, - 122.0, - 136.0, - 144.0, - 162.0, - 178.0, - 205.0, - 223.0, - 232.0, - 246.0 - ], - "words": [ - { - "start": 0, - "end": 3 - }, - { - "start": 4, - "end": 8 - }, - { - "start": 9, - "end": 15 - } - ], - "cssDisplay": "block" - }, - { - "id": 9, - "role": "list", - "bounds": { - "rect": { - "left": 8.0, - "top": 79.0, - "width": 769.0, - "height": 81.0 - } - }, - "children": [ - 10, - 12, - 14, - 16 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "ul", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 10, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 79.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 11, - 48 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "disc", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 11, - "role": "listMarker", - "bounds": { - "rect": { - "left": 30.0, - "top": 79.0, - "width": 7.0, - "height": 21.0 - } - }, - "children": [ - 49 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 51, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 49, - "role": "staticText", - "bounds": { - "rect": { - "left": 30.0, - "top": 79.0, - "width": 7.0, - "height": 20.0 - } - }, - "children": [ - 52 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 51, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 52, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 49, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 7.0, - "height": 19.0 - } - }, - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 51, - "characterOffsets": [ - 7.0, - 7.0 - ], - "words": [ - { - "start": 0, - "end": 1 - } - ] - }, - { - "id": 48, - "role": "link", - "bounds": { - "rect": { - "left": 48.0, - "top": 79.0, - "width": 92.0, - "height": 20.0 - } - }, - "children": [ - 50 - ], - "name": "Form Controls", - "nameFrom": "contents", - "focusable": true, - "linked": true, - "inPageLinkTarget": 28, - "previousOnLine": 52, - "cssDisplay": "inline", - "htmlTag": "a", - "url": "http://127.0.0.1:45415/accessibility/html/web-page-sample.html#form-controls", - "defaultActionVerb": "jump", - "foregroundColor": 238, - "textAlign": "left", - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 50, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 79.0, - "width": 92.0, - "height": 20.0 - } - }, - "children": [ - 51 - ], - "name": "Form Controls", - "nameFrom": "contents", - "linked": true, - "previousOnLine": 52, - "cssDisplay": "inline", - "defaultActionVerb": "clickAncestor", - "foregroundColor": 238, - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 51, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 50, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 92.0, - "height": 19.0 - } - }, - "name": "Form Controls", - "nameFrom": "contents", - "previousOnLine": 52, - "characterOffsets": [ - 9.0, - 17.0, - 22.0, - 34.0, - 38.0, - 49.0, - 57.0, - 65.0, - 69.0, - 74.0, - 82.0, - 86.0, - 92.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 5, - "end": 13 - } - ], - "cssDisplay": "inline" - }, - { - "id": 12, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 99.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 13, - 53 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "disc", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 13, - "role": "listMarker", - "bounds": { - "rect": { - "left": 30.0, - "top": 99.0, - "width": 7.0, - "height": 21.0 - } - }, - "children": [ - 54 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 56, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 54, - "role": "staticText", - "bounds": { - "rect": { - "left": 30.0, - "top": 99.0, - "width": 7.0, - "height": 20.0 - } - }, - "children": [ - 57 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 56, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 57, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 54, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 7.0, - "height": 19.0 - } - }, - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 56, - "characterOffsets": [ - 7.0, - 7.0 - ], - "words": [ - { - "start": 0, - "end": 1 - } - ] - }, - { - "id": 53, - "role": "link", - "bounds": { - "rect": { - "left": 48.0, - "top": 99.0, - "width": 95.0, - "height": 20.0 - } - }, - "children": [ - 55 - ], - "name": "Numbered List", - "nameFrom": "contents", - "focusable": true, - "linked": true, - "inPageLinkTarget": 41, - "previousOnLine": 57, - "cssDisplay": "inline", - "htmlTag": "a", - "url": "http://127.0.0.1:45415/accessibility/html/web-page-sample.html#numbered-list", - "defaultActionVerb": "jump", - "foregroundColor": 238, - "textAlign": "left", - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 55, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 99.0, - "width": 95.0, - "height": 20.0 - } - }, - "children": [ - 56 - ], - "name": "Numbered List", - "nameFrom": "contents", - "linked": true, - "previousOnLine": 57, - "cssDisplay": "inline", - "defaultActionVerb": "clickAncestor", - "foregroundColor": 238, - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 56, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 55, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 95.0, - "height": 19.0 - } - }, - "name": "Numbered List", - "nameFrom": "contents", - "previousOnLine": 57, - "characterOffsets": [ - 12.0, - 20.0, - 32.0, - 40.0, - 47.0, - 52.0, - 59.0, - 67.0, - 71.0, - 81.0, - 85.0, - 91.0, - 95.0 - ], - "words": [ - { - "start": 0, - "end": 8 - }, - { - "start": 9, - "end": 13 - } - ], - "cssDisplay": "inline" - }, - { - "id": 14, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 119.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 15, - 58 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "disc", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 15, - "role": "listMarker", - "bounds": { - "rect": { - "left": 30.0, - "top": 119.0, - "width": 7.0, - "height": 21.0 - } - }, - "children": [ - 59 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 61, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 59, - "role": "staticText", - "bounds": { - "rect": { - "left": 30.0, - "top": 119.0, - "width": 7.0, - "height": 20.0 - } - }, - "children": [ - 62 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 61, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 62, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 59, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 7.0, - "height": 19.0 - } - }, - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 61, - "characterOffsets": [ - 7.0, - 7.0 - ], - "words": [ - { - "start": 0, - "end": 1 - } - ] - }, - { - "id": 58, - "role": "link", - "bounds": { - "rect": { - "left": 48.0, - "top": 119.0, - "width": 35.0, - "height": 20.0 - } - }, - "children": [ - 60 - ], - "name": "Table", - "nameFrom": "contents", - "focusable": true, - "linked": true, - "inPageLinkTarget": 42, - "previousOnLine": 62, - "cssDisplay": "inline", - "htmlTag": "a", - "url": "http://127.0.0.1:45415/accessibility/html/web-page-sample.html#table", - "defaultActionVerb": "jump", - "foregroundColor": 238, - "textAlign": "left", - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 60, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 119.0, - "width": 35.0, - "height": 20.0 - } - }, - "children": [ - 61 - ], - "name": "Table", - "nameFrom": "contents", - "linked": true, - "previousOnLine": 62, - "cssDisplay": "inline", - "defaultActionVerb": "clickAncestor", - "foregroundColor": 238, - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 61, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 60, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 35.0, - "height": 19.0 - } - }, - "name": "Table", - "nameFrom": "contents", - "previousOnLine": 62, - "characterOffsets": [ - 9.0, - 16.0, - 24.0, - 28.0, - 35.0 - ], - "words": [ - { - "start": 0, - "end": 5 - } - ], - "cssDisplay": "inline" - }, - { - "id": 16, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 139.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 17, - 63 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "disc", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 17, - "role": "listMarker", - "bounds": { - "rect": { - "left": 30.0, - "top": 139.0, - "width": 7.0, - "height": 21.0 - } - }, - "children": [ - 64 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 66, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 64, - "role": "staticText", - "bounds": { - "rect": { - "left": 30.0, - "top": 139.0, - "width": 7.0, - "height": 20.0 - } - }, - "children": [ - 67 - ], - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 66, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 67, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 64, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 7.0, - "height": 19.0 - } - }, - "name": "• ", - "nameFrom": "contents", - "nextOnLine": 66, - "characterOffsets": [ - 7.0, - 7.0 - ], - "words": [ - { - "start": 0, - "end": 1 - } - ] - }, - { - "id": 63, - "role": "link", - "bounds": { - "rect": { - "left": 48.0, - "top": 139.0, - "width": 28.0, - "height": 20.0 - } - }, - "children": [ - 65 - ], - "name": "Text", - "nameFrom": "contents", - "focusable": true, - "linked": true, - "inPageLinkTarget": 44, - "previousOnLine": 67, - "cssDisplay": "inline", - "htmlTag": "a", - "url": "http://127.0.0.1:45415/accessibility/html/web-page-sample.html#text", - "defaultActionVerb": "jump", - "foregroundColor": 238, - "textAlign": "left", - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 65, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 139.0, - "width": 28.0, - "height": 20.0 - } - }, - "children": [ - 66 - ], - "name": "Text", - "nameFrom": "contents", - "linked": true, - "previousOnLine": 67, - "cssDisplay": "inline", - "defaultActionVerb": "clickAncestor", - "foregroundColor": 238, - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 66, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 65, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 28.0, - "height": 19.0 - } - }, - "name": "Text", - "nameFrom": "contents", - "previousOnLine": 67, - "characterOffsets": [ - 9.0, - 16.0, - 24.0, - 28.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "inline" - }, - { - "id": 28, - "role": "heading", - "bounds": { - "rect": { - "left": 8.0, - "top": 179.0, - "width": 769.0, - "height": 28.0 - } - }, - "children": [ - 68 - ], - "name": "Form Controls", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "h2", - "hierarchicalLevel": 2, - "foregroundColor": 0, - "textAlign": "left", - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 68, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 179.0, - "width": 153.0, - "height": 27.0 - } - }, - "children": [ - 69 - ], - "name": "Form Controls", - "nameFrom": "contents", - "cssDisplay": "block", - "foregroundColor": 0, - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 69, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 68, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 153.0, - "height": 26.0 - } - }, - "name": "Form Controls", - "nameFrom": "contents", - "characterOffsets": [ - 15.0, - 27.0, - 38.0, - 58.0, - 64.0, - 81.0, - 93.0, - 106.0, - 114.0, - 125.0, - 137.0, - 144.0, - 153.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 5, - "end": 13 - } - ], - "cssDisplay": "block" - }, - { - "id": 29, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 226.0, - "width": 769.0, - "height": 23.0 - } - }, - "children": [ - 70 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 70, - "role": "labelText", - "bounds": { - "rect": { - "left": 8.0, - "top": 226.0, - "width": 245.0, - "height": 23.0 - } - }, - "children": [ - 71, - 72 - ], - "cssDisplay": "inline", - "htmlTag": "label", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 71, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 227.0, - "width": 60.0, - "height": 20.0 - } - }, - "children": [ - 73 - ], - "name": "Number: ", - "nameFrom": "contents", - "nextOnLine": 78, - "cssDisplay": "inline", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 73, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 71, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 60.0, - "height": 19.0 - } - }, - "name": "Number: ", - "nameFrom": "contents", - "nextOnLine": 78, - "characterOffsets": [ - 12.0, - 20.0, - 32.0, - 40.0, - 47.0, - 52.0, - 56.0, - 60.0 - ], - "words": [ - { - "start": 0, - "end": 6 - }, - { - "start": 6, - "end": 7 - } - ], - "cssDisplay": "inline" - }, - { - "id": 72, - "role": "spinButton", - "bounds": { - "rect": { - "left": 68.0, - "top": 226.0, - "width": 185.0, - "height": 23.0 - } - }, - "children": [ - 74 - ], - "actions": [ - "setValue" - ], - "name": "Number:", - "nameFrom": "relatedElement", - "value": "3", - "editable": true, - "focusable": true, - "previousOnLine": 73, - "labelledBy": [ - 70 - ], - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "number", - "defaultActionVerb": "activate", - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "valueForRange": 3.0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 74, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 72.0, - "top": 229.0, - "width": 177.0, - "height": 17.0 - } - }, - "children": [ - 75, - 79 - ], - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "div", - "foregroundColor": 0 - }, - { - "id": 75, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 72.0, - "top": 229.0, - "width": 162.0, - "height": 17.0 - } - }, - "children": [ - 76 - ], - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "div", - "foregroundColor": 0 - }, - { - "id": 76, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 72.0, - "top": 229.0, - "width": 162.0, - "height": 17.0 - } - }, - "children": [ - 77 - ], - "editable": true, - "clipsChildren": true, - "isLineBreakingObject": true, - "cssDisplay": "flow-root", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 77, - "role": "staticText", - "bounds": { - "offsetContainer": 76, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 7.0, - "height": 16.0 - } - }, - "children": [ - 78 - ], - "name": "3", - "nameFrom": "contents", - "editable": true, - "cssDisplay": "flow-root", - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 78, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 77, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 7.0, - "height": 16.0 - } - }, - "name": "3", - "nameFrom": "contents", - "editable": true, - "characterOffsets": [ - 7.0 - ], - "words": [ - { - "start": 0, - "end": 1 - } - ], - "cssDisplay": "flow-root" - }, - { - "id": 79, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 234.0, - "top": 229.0, - "width": 15.0, - "height": 17.0 - } - }, - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "div", - "foregroundColor": 0 - }, - { - "id": 4, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 248.0, - "width": 769.0, - "height": 23.0 - } - }, - "children": [ - 5 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 5, - "role": "labelText", - "bounds": { - "rect": { - "left": 8.0, - "top": 248.0, - "width": 254.0, - "height": 23.0 - } - }, - "children": [ - 80, - 6 - ], - "cssDisplay": "inline", - "htmlTag": "label", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 80, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 249.0, - "width": 69.0, - "height": 20.0 - } - }, - "children": [ - 81 - ], - "name": "Password: ", - "nameFrom": "contents", - "nextOnLine": 82, - "cssDisplay": "inline", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 81, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 80, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 69.0, - "height": 19.0 - } - }, - "name": "Password: ", - "nameFrom": "contents", - "nextOnLine": 82, - "characterOffsets": [ - 9.0, - 16.0, - 22.0, - 28.0, - 40.0, - 48.0, - 53.0, - 61.0, - 65.0, - 69.0 - ], - "words": [ - { - "start": 0, - "end": 8 - }, - { - "start": 8, - "end": 9 - } - ], - "cssDisplay": "inline" - }, - { - "id": 6, - "role": "textField", - "bounds": { - "rect": { - "left": 77.0, - "top": 248.0, - "width": 185.0, - "height": 23.0 - } - }, - "children": [ - 7 - ], - "actions": [ - "setValue" - ], - "name": "Password:", - "nameFrom": "relatedElement", - "value": "•••", - "editable": true, - "focusable": true, - "protected": true, - "previousOnLine": 81, - "labelledBy": [ - 5 - ], - "accessKey": "p", - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "password", - "keyShortcuts": "Alt+p", - "defaultActionVerb": "activate", - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 7, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 81.0, - "top": 251.0, - "width": 177.0, - "height": 17.0 - } - }, - "children": [ - 8 - ], - "editable": true, - "clipsChildren": true, - "isLineBreakingObject": true, - "cssDisplay": "flow-root", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 8, - "role": "staticText", - "bounds": { - "offsetContainer": 7, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 15.0, - "height": 16.0 - } - }, - "children": [ - 82 - ], - "name": "•••", - "nameFrom": "contents", - "editable": true, - "cssDisplay": "flow-root", - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 82, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 8, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 15.0, - "height": 16.0 - } - }, - "name": "•••", - "nameFrom": "contents", - "editable": true, - "characterOffsets": [ - 5.0, - 10.0, - 15.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "flow-root" - }, - { - "id": 30, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 270.0, - "width": 769.0, - "height": 23.0 - } - }, - "children": [ - 83 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 83, - "role": "labelText", - "bounds": { - "rect": { - "left": 8.0, - "top": 270.0, - "width": 221.0, - "height": 23.0 - } - }, - "children": [ - 84, - 85 - ], - "cssDisplay": "inline", - "htmlTag": "label", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 84, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 271.0, - "width": 36.0, - "height": 20.0 - } - }, - "children": [ - 86 - ], - "name": "Text: ", - "nameFrom": "contents", - "nextOnLine": 89, - "cssDisplay": "inline", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 86, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 84, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 36.0, - "height": 19.0 - } - }, - "name": "Text: ", - "nameFrom": "contents", - "nextOnLine": 89, - "characterOffsets": [ - 9.0, - 16.0, - 24.0, - 28.0, - 32.0, - 36.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 4, - "end": 5 - } - ], - "cssDisplay": "inline" - }, - { - "id": 85, - "role": "textField", - "bounds": { - "rect": { - "left": 44.0, - "top": 270.0, - "width": 185.0, - "height": 23.0 - } - }, - "children": [ - 87 - ], - "actions": [ - "setValue" - ], - "name": "Text:", - "nameFrom": "relatedElement", - "value": "just text", - "editable": true, - "focusable": true, - "previousOnLine": 86, - "labelledBy": [ - 83 - ], - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "text", - "defaultActionVerb": "activate", - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 87, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 48.0, - "top": 273.0, - "width": 177.0, - "height": 17.0 - } - }, - "children": [ - 88 - ], - "editable": true, - "clipsChildren": true, - "isLineBreakingObject": true, - "cssDisplay": "flow-root", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 88, - "role": "staticText", - "bounds": { - "offsetContainer": 87, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 47.0, - "height": 16.0 - } - }, - "children": [ - 89 - ], - "name": "just text", - "nameFrom": "contents", - "editable": true, - "cssDisplay": "flow-root", - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 89, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 88, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 47.0, - "height": 16.0 - } - }, - "name": "just text", - "nameFrom": "contents", - "editable": true, - "characterOffsets": [ - 3.0, - 10.0, - 17.0, - 21.0, - 25.0, - 29.0, - 36.0, - 43.0, - 47.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 5, - "end": 9 - } - ], - "cssDisplay": "flow-root" - }, - { - "id": 31, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 292.0, - "width": 769.0, - "height": 23.0 - } - }, - "children": [ - 90 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 90, - "role": "labelText", - "bounds": { - "rect": { - "left": 8.0, - "top": 292.0, - "width": 286.0, - "height": 23.0 - } - }, - "children": [ - 91, - 92 - ], - "cssDisplay": "inline", - "htmlTag": "label", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 91, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 293.0, - "width": 101.0, - "height": 20.0 - } - }, - "children": [ - 93 - ], - "name": "Read-only text: ", - "nameFrom": "contents", - "nextOnLine": 96, - "cssDisplay": "inline", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 93, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 91, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 101.0, - "height": 19.0 - } - }, - "name": "Read-only text: ", - "nameFrom": "contents", - "nextOnLine": 96, - "characterOffsets": [ - 11.0, - 18.0, - 25.0, - 33.0, - 38.0, - 46.0, - 54.0, - 58.0, - 66.0, - 70.0, - 74.0, - 81.0, - 89.0, - 93.0, - 97.0, - 101.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 4, - "end": 5 - }, - { - "start": 5, - "end": 9 - }, - { - "start": 10, - "end": 14 - }, - { - "start": 14, - "end": 15 - } - ], - "cssDisplay": "inline" - }, - { - "id": 92, - "role": "textField", - "bounds": { - "rect": { - "left": 109.0, - "top": 292.0, - "width": 185.0, - "height": 23.0 - } - }, - "children": [ - 94 - ], - "name": "Read-only text:", - "nameFrom": "relatedElement", - "value": "just text", - "editable": true, - "focusable": true, - "previousOnLine": 93, - "labelledBy": [ - 90 - ], - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "text", - "defaultActionVerb": "activate", - "readOnly": true, - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 94, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 113.0, - "top": 295.0, - "width": 177.0, - "height": 17.0 - } - }, - "children": [ - 95 - ], - "clipsChildren": true, - "isLineBreakingObject": true, - "cssDisplay": "flow-root", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 95, - "role": "staticText", - "bounds": { - "offsetContainer": 94, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 47.0, - "height": 16.0 - } - }, - "children": [ - 96 - ], - "name": "just text", - "nameFrom": "contents", - "cssDisplay": "flow-root", - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 96, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 95, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 47.0, - "height": 16.0 - } - }, - "name": "just text", - "nameFrom": "contents", - "characterOffsets": [ - 3.0, - 10.0, - 17.0, - 21.0, - 25.0, - 29.0, - 36.0, - 43.0, - 47.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 5, - "end": 9 - } - ], - "cssDisplay": "flow-root" - }, - { - "id": 32, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 314.0, - "width": 769.0, - "height": 23.0 - } - }, - "children": [ - 97 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 97, - "role": "labelText", - "bounds": { - "rect": { - "left": 8.0, - "top": 314.0, - "width": 276.0, - "height": 23.0 - } - }, - "children": [ - 98, - 99 - ], - "cssDisplay": "inline", - "htmlTag": "label", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 98, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 315.0, - "width": 91.0, - "height": 20.0 - } - }, - "children": [ - 100 - ], - "name": "Disabled text: ", - "nameFrom": "contents", - "nextOnLine": 103, - "cssDisplay": "inline", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 100, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 98, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 91.0, - "height": 19.0 - } - }, - "name": "Disabled text: ", - "nameFrom": "contents", - "nextOnLine": 103, - "characterOffsets": [ - 12.0, - 16.0, - 22.0, - 29.0, - 37.0, - 41.0, - 48.0, - 56.0, - 60.0, - 64.0, - 71.0, - 79.0, - 83.0, - 87.0, - 91.0 - ], - "words": [ - { - "start": 0, - "end": 8 - }, - { - "start": 9, - "end": 13 - }, - { - "start": 13, - "end": 14 - } - ], - "cssDisplay": "inline" - }, - { - "id": 99, - "role": "textField", - "bounds": { - "rect": { - "left": 99.0, - "top": 314.0, - "width": 185.0, - "height": 23.0 - } - }, - "children": [ - 101 - ], - "name": "Disabled text:", - "nameFrom": "relatedElement", - "value": "just text", - "editable": true, - "previousOnLine": 100, - "labelledBy": [ - 97 - ], - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "text", - "disabled": true, - "backgroundColor": 15724527, - "foregroundColor": 5526612, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 101, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 103.0, - "top": 317.0, - "width": 177.0, - "height": 17.0 - } - }, - "children": [ - 102 - ], - "clipsChildren": true, - "isLineBreakingObject": true, - "cssDisplay": "flow-root", - "htmlTag": "div", - "foregroundColor": 5526612, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 102, - "role": "staticText", - "bounds": { - "offsetContainer": 101, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 47.0, - "height": 16.0 - } - }, - "children": [ - 103 - ], - "name": "just text", - "nameFrom": "contents", - "cssDisplay": "flow-root", - "foregroundColor": 5526612, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 103, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 102, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 47.0, - "height": 16.0 - } - }, - "name": "just text", - "nameFrom": "contents", - "characterOffsets": [ - 3.0, - 10.0, - 17.0, - 21.0, - 25.0, - 29.0, - 36.0, - 43.0, - 47.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 5, - "end": 9 - } - ], - "cssDisplay": "flow-root" - }, - { - "id": 33, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 336.0, - "width": 769.0, - "height": 76.0 - } - }, - "children": [ - 104 - ], - "isLineBreakingObject": true, - "className": "myClass", - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 104, - "role": "textField", - "bounds": { - "rect": { - "left": 8.0, - "top": 336.0, - "width": 406.0, - "height": 71.0 - } - }, - "children": [ - 105 - ], - "actions": [ - "setValue" - ], - "value": "The \ntextarea tag defines a multi-line text input control.\n", - "editable": true, - "focusable": true, - "multiline": true, - "clipsChildren": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Cousine", - "htmlTag": "textarea", - "defaultActionVerb": "activate", - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 105, - "role": "genericContainer", - "bounds": { - "offsetContainer": 104, - "rect": { - "left": 3.0, - "top": 3.0, - "width": 400.0, - "height": 64.0 - } - }, - "children": [ - 106, - 107 - ], - "editable": true, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 106, - "role": "staticText", - "bounds": { - "offsetContainer": 104, - "rect": { - "left": 3.0, - "top": 3.0, - "width": 368.0, - "height": 48.0 - } - }, - "children": [ - 108, - 109, - 110, - 111, - 112, - 113 - ], - "name": "The \ntextarea tag defines a multi-line text input control.\n", - "nameFrom": "contents", - "editable": true, - "isLineBreakingObject": true, - "cssDisplay": "block", - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 108, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 106, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 16.0 - } - }, - "name": "The ", - "nameFrom": "contents", - "editable": true, - "nextOnLine": 109, - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "block" - }, - { - "id": 109, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 106, - "rect": { - "left": 32.0, - "top": 0.0, - "width": 0.0, - "height": 16.0 - } - }, - "name": "\n", - "nameFrom": "contents", - "editable": true, - "isLineBreakingObject": true, - "previousOnLine": 108, - "characterOffsets": [ - 0.0 - ], - "cssDisplay": "block" - }, - { - "id": 110, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 106, - "rect": { - "left": 0.0, - "top": 16.0, - "width": 360.0, - "height": 16.0 - } - }, - "name": "textarea tag defines a multi-line text input", - "nameFrom": "contents", - "editable": true, - "nextOnLine": 111, - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0, - 40.0, - 48.0, - 56.0, - 64.0, - 72.0, - 80.0, - 88.0, - 96.0, - 104.0, - 112.0, - 120.0, - 128.0, - 136.0, - 144.0, - 152.0, - 160.0, - 168.0, - 176.0, - 184.0, - 192.0, - 200.0, - 208.0, - 216.0, - 224.0, - 232.0, - 240.0, - 248.0, - 256.0, - 264.0, - 272.0, - 280.0, - 288.0, - 296.0, - 304.0, - 312.0, - 320.0, - 328.0, - 336.0, - 344.0, - 352.0, - 360.0 - ], - "words": [ - { - "start": 0, - "end": 8 - }, - { - "start": 9, - "end": 12 - }, - { - "start": 14, - "end": 21 - }, - { - "start": 22, - "end": 23 - }, - { - "start": 24, - "end": 29 - }, - { - "start": 29, - "end": 30 - }, - { - "start": 30, - "end": 34 - }, - { - "start": 35, - "end": 39 - }, - { - "start": 40, - "end": 45 - } - ], - "cssDisplay": "block" - }, - { - "id": 111, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 106, - "rect": { - "left": 360.0, - "top": 16.0, - "width": 8.0, - "height": 16.0 - } - }, - "name": " ", - "nameFrom": "contents", - "editable": true, - "previousOnLine": 110, - "characterOffsets": [ - 8.0 - ], - "cssDisplay": "block" - }, - { - "id": 112, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 106, - "rect": { - "left": 0.0, - "top": 32.0, - "width": 64.0, - "height": 16.0 - } - }, - "name": "control.", - "nameFrom": "contents", - "editable": true, - "nextOnLine": 113, - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0, - 40.0, - 48.0, - 56.0, - 64.0 - ], - "words": [ - { - "start": 0, - "end": 7 - }, - { - "start": 7, - "end": 8 - } - ], - "cssDisplay": "block" - }, - { - "id": 113, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 106, - "rect": { - "left": 64.0, - "top": 32.0, - "width": 0.0, - "height": 16.0 - } - }, - "name": "\n", - "nameFrom": "contents", - "editable": true, - "isLineBreakingObject": true, - "previousOnLine": 112, - "characterOffsets": [ - 0.0 - ], - "cssDisplay": "block" - }, - { - "id": 107, - "role": "lineBreak", - "bounds": { - "offsetContainer": 104, - "rect": { - "left": 3.0, - "top": 3.0, - "width": 0.0, - "height": 0.0 - } - }, - "children": [ - 114 - ], - "name": "\n", - "nameFrom": "contents", - "editable": true, - "isLineBreakingObject": true, - "cssDisplay": "inline", - "htmlTag": "br", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 114, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 107, - "rect": { - "left": 0.0, - "top": 48.0, - "width": 0.0, - "height": 16.0 - } - }, - "name": "\n", - "nameFrom": "contents", - "editable": true, - "isLineBreakingObject": true, - "characterOffsets": [ - 0.0 - ], - "cssDisplay": "inline", - "htmlTag": "br" - }, - { - "id": 34, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 411.0, - "width": 769.0, - "height": 23.0 - } - }, - "children": [ - 115, - 116 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 115, - "role": "button", - "bounds": { - "rect": { - "left": 8.0, - "top": 411.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 117 - ], - "name": "Button", - "nameFrom": "value", - "focusable": true, - "notUserSelectableStyle": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "button", - "defaultActionVerb": "press", - "backgroundColor": 15724527, - "foregroundColor": 0, - "textAlign": "center", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 117, - "role": "staticText", - "bounds": { - "rect": { - "left": 16.0, - "top": 414.0, - "width": 38.0, - "height": 17.0 - } - }, - "children": [ - 118 - ], - "name": "Button", - "nameFrom": "contents", - "notUserSelectableStyle": true, - "cssDisplay": "inline-block", - "backgroundColor": 15724527, - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 118, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 117, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 38.0, - "height": 16.0 - } - }, - "name": "Button", - "nameFrom": "contents", - "characterOffsets": [ - 9.0, - 16.0, - 20.0, - 24.0, - 31.0, - 38.0 - ], - "words": [ - { - "start": 0, - "end": 6 - } - ], - "cssDisplay": "inline-block" - }, - { - "id": 116, - "role": "button", - "bounds": { - "rect": { - "left": 66.0, - "top": 411.0, - "width": 81.0, - "height": 23.0 - } - }, - "children": [ - 119 - ], - "name": "Name", - "nameFrom": "attribute", - "description": "Description", - "descriptionFrom": "buttonLabel", - "focusable": true, - "notUserSelectableStyle": true, - "hasAriaAttribute": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "button", - "defaultActionVerb": "press", - "backgroundColor": 15724527, - "foregroundColor": 0, - "textAlign": "center", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 119, - "role": "staticText", - "bounds": { - "rect": { - "left": 74.0, - "top": 414.0, - "width": 65.0, - "height": 17.0 - } - }, - "children": [ - 120 - ], - "name": "Description", - "nameFrom": "contents", - "notUserSelectableStyle": true, - "cssDisplay": "inline-block", - "backgroundColor": 15724527, - "foregroundColor": 0, - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 120, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 119, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 65.0, - "height": 16.0 - } - }, - "name": "Description", - "nameFrom": "contents", - "characterOffsets": [ - 9.0, - 16.0, - 23.0, - 30.0, - 34.0, - 37.0, - 44.0, - 48.0, - 51.0, - 58.0, - 65.0 - ], - "words": [ - { - "start": 0, - "end": 11 - } - ], - "cssDisplay": "inline-block" - }, - { - "id": 35, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 433.0, - "width": 769.0, - "height": 21.0 - } - }, - "children": [ - 121 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 121, - "role": "popupButton", - "bounds": { - "rect": { - "left": 8.0, - "top": 433.0, - "width": 129.0, - "height": 21.0 - } - }, - "children": [ - 122 - ], - "value": "Placeholder option", - "expanded": false, - "focusable": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "select", - "defaultActionVerb": "open", - "backgroundColor": 14540253, - "foregroundColor": 0, - "hasPopup": "menu", - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 122, - "role": "menuListPopup", - "bounds": { - "rect": { - "left": 0.0, - "top": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "children": [ - 123, - 124, - 125 - ], - "invisible": true, - "foregroundColor": 0 - }, - { - "id": 123, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 433.0, - "width": 129.0, - "height": 21.0 - } - }, - "name": "Placeholder option", - "nameFrom": "contents", - "focusable": true, - "selected": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 124, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 433.0, - "width": 129.0, - "height": 21.0 - } - }, - "name": "Option 1", - "nameFrom": "contents", - "focusable": true, - "invisible": true, - "selected": false, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 125, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 433.0, - "width": 129.0, - "height": 21.0 - } - }, - "name": "Option 2", - "nameFrom": "contents", - "focusable": true, - "invisible": true, - "selected": false, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 36, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 453.0, - "width": 769.0, - "height": 21.0 - } - }, - "children": [ - 126 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 126, - "role": "popupButton", - "bounds": { - "rect": { - "left": 8.0, - "top": 453.0, - "width": 71.0, - "height": 21.0 - } - }, - "children": [ - 127 - ], - "value": "Option 2", - "expanded": false, - "focusable": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "select", - "defaultActionVerb": "open", - "backgroundColor": 14540253, - "foregroundColor": 0, - "hasPopup": "menu", - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 127, - "role": "menuListPopup", - "bounds": { - "rect": { - "left": 0.0, - "top": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "children": [ - 128, - 129, - 130 - ], - "invisible": true, - "foregroundColor": 0 - }, - { - "id": 128, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 453.0, - "width": 71.0, - "height": 21.0 - } - }, - "name": "Option 1", - "nameFrom": "contents", - "focusable": true, - "invisible": true, - "selected": false, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 129, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 453.0, - "width": 71.0, - "height": 21.0 - } - }, - "name": "Option 2", - "nameFrom": "contents", - "focusable": true, - "selected": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 130, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 453.0, - "width": 71.0, - "height": 21.0 - } - }, - "name": "Option 3", - "nameFrom": "contents", - "focusable": true, - "invisible": true, - "selected": false, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 37, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 473.0, - "width": 769.0, - "height": 21.0 - } - }, - "children": [ - 131 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 131, - "role": "popupButton", - "bounds": { - "rect": { - "left": 8.0, - "top": 473.0, - "width": 71.0, - "height": 21.0 - } - }, - "children": [ - 132 - ], - "value": "Option 1", - "expanded": false, - "focusable": true, - "required": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "select", - "defaultActionVerb": "open", - "backgroundColor": 14540253, - "foregroundColor": 0, - "hasPopup": "menu", - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 132, - "role": "menuListPopup", - "bounds": { - "rect": { - "left": 0.0, - "top": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "children": [ - 133, - 134, - 135 - ], - "invisible": true, - "foregroundColor": 0 - }, - { - "id": 133, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 473.0, - "width": 71.0, - "height": 21.0 - } - }, - "name": "Option 1", - "nameFrom": "contents", - "focusable": true, - "selected": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 134, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 473.0, - "width": 71.0, - "height": 21.0 - } - }, - "name": "Option 2", - "nameFrom": "contents", - "focusable": true, - "invisible": true, - "selected": false, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 135, - "role": "menuListOption", - "bounds": { - "rect": { - "left": 8.0, - "top": 473.0, - "width": 71.0, - "height": 21.0 - } - }, - "name": "Option 3", - "nameFrom": "contents", - "focusable": true, - "invisible": true, - "selected": false, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0 - }, - { - "id": 38, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 493.0, - "width": 769.0, - "height": 72.0 - } - }, - "children": [ - 136 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 136, - "role": "listBox", - "bounds": { - "rect": { - "left": 8.0, - "top": 493.0, - "width": 70.0, - "height": 71.0 - } - }, - "children": [ - 137 - ], - "focusable": true, - "orientation": "vertical", - "multiselectable": true, - "clipsChildren": true, - "isLineBreakingObject": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "select", - "defaultActionVerb": "click", - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 137, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 493.0, - "width": 70.0, - "height": 11.0 - } - }, - "children": [ - 138, - 139, - 140 - ], - "ignored": true, - "clipsChildren": true, - "htmlTag": "slot", - "foregroundColor": 0 - }, - { - "id": 138, - "role": "listBoxOption", - "bounds": { - "offsetContainer": 136, - "rect": { - "left": 1.0, - "top": 1.0, - "width": 53.0, - "height": 17.0 - } - }, - "name": "Option 1", - "nameFrom": "contents", - "focusable": true, - "selected": true, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "backgroundColor": 13553358, - "foregroundColor": 1052688, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 139, - "role": "listBoxOption", - "bounds": { - "offsetContainer": 136, - "rect": { - "left": 1.0, - "top": 18.0, - "width": 53.0, - "height": 17.0 - } - }, - "name": "Option 2", - "nameFrom": "contents", - "focusable": true, - "selected": false, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 140, - "role": "listBoxOption", - "bounds": { - "offsetContainer": 136, - "rect": { - "left": 1.0, - "top": 35.0, - "width": 53.0, - "height": 17.0 - } - }, - "name": "Option 3", - "nameFrom": "contents", - "focusable": true, - "selected": true, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "backgroundColor": 13553358, - "foregroundColor": 1052688, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 39, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 564.0, - "width": 769.0, - "height": 55.0 - } - }, - "children": [ - 141 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "div", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 141, - "role": "listBox", - "bounds": { - "rect": { - "left": 8.0, - "top": 564.0, - "width": 70.0, - "height": 54.0 - } - }, - "children": [ - 142 - ], - "focusable": true, - "orientation": "vertical", - "clipsChildren": true, - "isLineBreakingObject": true, - "invalidState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "select", - "defaultActionVerb": "click", - "backgroundColor": 16777215, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 142, - "role": "genericContainer", - "bounds": { - "rect": { - "left": 8.0, - "top": 564.0, - "width": 70.0, - "height": 11.0 - } - }, - "children": [ - 143, - 144, - 145 - ], - "ignored": true, - "clipsChildren": true, - "htmlTag": "slot", - "foregroundColor": 0 - }, - { - "id": 143, - "role": "listBoxOption", - "bounds": { - "offsetContainer": 141, - "rect": { - "left": 1.0, - "top": 1.0, - "width": 53.0, - "height": 17.0 - } - }, - "name": "Option 1", - "nameFrom": "contents", - "focusable": true, - "selected": false, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 144, - "role": "listBoxOption", - "bounds": { - "offsetContainer": 141, - "rect": { - "left": 1.0, - "top": 18.0, - "width": 53.0, - "height": 17.0 - } - }, - "name": "Option 2", - "nameFrom": "contents", - "focusable": true, - "selected": true, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "backgroundColor": 13553358, - "foregroundColor": 1052688, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 145, - "role": "listBoxOption", - "bounds": { - "offsetContainer": 141, - "rect": { - "left": 1.0, - "top": 35.0, - "width": 53.0, - "height": 17.0 - } - }, - "name": "Option 3", - "nameFrom": "contents", - "focusable": true, - "selected": false, - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "option", - "defaultActionVerb": "select", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 40, - "role": "form", - "bounds": { - "rect": { - "left": 8.0, - "top": 618.0, - "width": 769.0, - "height": 22.0 - } - }, - "children": [ - 147, - 148, - 150, - 151 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "form", - "ariaRole": "form", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 147, - "role": "radioButton", - "bounds": { - "rect": { - "left": 13.0, - "top": 621.0, - "width": 13.0, - "height": 14.0 - } - }, - "name": "Radio1", - "nameFrom": "relatedElement", - "focusable": true, - "nextOnLine": 148, - "labelledBy": [ - 146 - ], - "radioGroups": [ - 147, - 150 - ], - "invalidState": "false", - "checkedState": "false", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "radio", - "defaultActionVerb": "check", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 148, - "role": "staticText", - "bounds": { - "rect": { - "left": 29.0, - "top": 619.0, - "width": 46.0, - "height": 20.0 - } - }, - "name": "Radio1", - "nameFrom": "contents", - "ignored": true, - "foregroundColor": 0 - }, - { - "id": 150, - "role": "radioButton", - "bounds": { - "rect": { - "left": 84.0, - "top": 621.0, - "width": 13.0, - "height": 14.0 - } - }, - "name": "Radio2", - "nameFrom": "relatedElement", - "focusable": true, - "nextOnLine": 151, - "labelledBy": [ - 149 - ], - "radioGroups": [ - 147, - 150 - ], - "invalidState": "false", - "checkedState": "true", - "cssDisplay": "inline-block", - "fontFamily": "Arimo", - "htmlTag": "input", - "inputType": "radio", - "defaultActionVerb": "uncheck", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 13.333333, - "fontWeight": 400.0 - }, - { - "id": 151, - "role": "staticText", - "bounds": { - "rect": { - "left": 100.0, - "top": 619.0, - "width": 46.0, - "height": 20.0 - } - }, - "name": "Radio2", - "nameFrom": "contents", - "ignored": true, - "foregroundColor": 0 - }, - { - "id": 41, - "role": "heading", - "bounds": { - "rect": { - "left": 8.0, - "top": 659.0, - "width": 769.0, - "height": 28.0 - } - }, - "children": [ - 152 - ], - "name": "Numbered List", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "h2", - "hierarchicalLevel": 2, - "foregroundColor": 0, - "textAlign": "left", - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 152, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 659.0, - "width": 155.0, - "height": 27.0 - } - }, - "children": [ - 153 - ], - "name": "Numbered List", - "nameFrom": "contents", - "cssDisplay": "block", - "foregroundColor": 0, - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 153, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 152, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 155.0, - "height": 26.0 - } - }, - "name": "Numbered List", - "nameFrom": "contents", - "characterOffsets": [ - 17.0, - 30.0, - 50.0, - 63.0, - 74.0, - 85.0, - 96.0, - 109.0, - 115.0, - 131.0, - 138.0, - 147.0, - 155.0 - ], - "words": [ - { - "start": 0, - "end": 8 - }, - { - "start": 9, - "end": 13 - } - ], - "cssDisplay": "block" - }, - { - "id": 18, - "role": "list", - "bounds": { - "rect": { - "left": 8.0, - "top": 706.0, - "width": 769.0, - "height": 81.0 - } - }, - "children": [ - 19, - 21, - 23, - 25 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "ol", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 19, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 706.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 20, - 154 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "numeric", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 20, - "role": "listMarker", - "bounds": { - "rect": { - "left": 32.0, - "top": 706.0, - "width": 16.0, - "height": 21.0 - } - }, - "children": [ - 155 - ], - "name": "1. ", - "nameFrom": "contents", - "nextOnLine": 156, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 155, - "role": "staticText", - "bounds": { - "rect": { - "left": 32.0, - "top": 706.0, - "width": 16.0, - "height": 20.0 - } - }, - "children": [ - 157 - ], - "name": "1. ", - "nameFrom": "contents", - "nextOnLine": 156, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 157, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 155, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 16.0, - "height": 19.0 - } - }, - "name": "1. ", - "nameFrom": "contents", - "nextOnLine": 156, - "characterOffsets": [ - 8.0, - 12.0, - 16.0 - ], - "words": [ - { - "start": 0, - "end": 1 - }, - { - "start": 1, - "end": 2 - } - ] - }, - { - "id": 154, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 706.0, - "width": 113.0, - "height": 20.0 - } - }, - "children": [ - 156 - ], - "name": "Finish the schema", - "nameFrom": "contents", - "previousOnLine": 157, - "cssDisplay": "list-item", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 156, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 154, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 113.0, - "height": 19.0 - } - }, - "name": "Finish the schema", - "nameFrom": "contents", - "previousOnLine": 157, - "characterOffsets": [ - 9.0, - 13.0, - 21.0, - 25.0, - 31.0, - 39.0, - 43.0, - 47.0, - 55.0, - 62.0, - 66.0, - 72.0, - 79.0, - 87.0, - 94.0, - 106.0, - 113.0 - ], - "words": [ - { - "start": 0, - "end": 6 - }, - { - "start": 7, - "end": 10 - }, - { - "start": 11, - "end": 17 - } - ], - "cssDisplay": "list-item" - }, - { - "id": 21, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 726.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 22, - 158 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "numeric", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 22, - "role": "listMarker", - "bounds": { - "rect": { - "left": 32.0, - "top": 726.0, - "width": 16.0, - "height": 21.0 - } - }, - "children": [ - 159 - ], - "name": "2. ", - "nameFrom": "contents", - "nextOnLine": 160, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 159, - "role": "staticText", - "bounds": { - "rect": { - "left": 32.0, - "top": 726.0, - "width": 16.0, - "height": 20.0 - } - }, - "children": [ - 161 - ], - "name": "2. ", - "nameFrom": "contents", - "nextOnLine": 160, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 161, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 159, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 16.0, - "height": 19.0 - } - }, - "name": "2. ", - "nameFrom": "contents", - "nextOnLine": 160, - "characterOffsets": [ - 8.0, - 12.0, - 16.0 - ], - "words": [ - { - "start": 0, - "end": 1 - }, - { - "start": 1, - "end": 2 - } - ] - }, - { - "id": 158, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 726.0, - "width": 147.0, - "height": 20.0 - } - }, - "children": [ - 160 - ], - "name": "Write platform adapters", - "nameFrom": "contents", - "previousOnLine": 161, - "cssDisplay": "list-item", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 160, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 158, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 147.0, - "height": 19.0 - } - }, - "name": "Write platform adapters", - "nameFrom": "contents", - "previousOnLine": 161, - "characterOffsets": [ - 14.0, - 19.0, - 23.0, - 27.0, - 34.0, - 38.0, - 46.0, - 50.0, - 57.0, - 61.0, - 66.0, - 74.0, - 79.0, - 91.0, - 95.0, - 102.0, - 110.0, - 117.0, - 125.0, - 129.0, - 136.0, - 141.0, - 147.0 - ], - "words": [ - { - "start": 0, - "end": 5 - }, - { - "start": 6, - "end": 14 - }, - { - "start": 15, - "end": 23 - } - ], - "cssDisplay": "list-item" - }, - { - "id": 23, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 746.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 24, - 162 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "numeric", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 24, - "role": "listMarker", - "bounds": { - "rect": { - "left": 32.0, - "top": 746.0, - "width": 16.0, - "height": 21.0 - } - }, - "children": [ - 163 - ], - "name": "3. ", - "nameFrom": "contents", - "nextOnLine": 164, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 163, - "role": "staticText", - "bounds": { - "rect": { - "left": 32.0, - "top": 746.0, - "width": 16.0, - "height": 20.0 - } - }, - "children": [ - 165 - ], - "name": "3. ", - "nameFrom": "contents", - "nextOnLine": 164, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 165, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 163, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 16.0, - "height": 19.0 - } - }, - "name": "3. ", - "nameFrom": "contents", - "nextOnLine": 164, - "characterOffsets": [ - 8.0, - 12.0, - 16.0 - ], - "words": [ - { - "start": 0, - "end": 1 - }, - { - "start": 1, - "end": 2 - } - ] - }, - { - "id": 162, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 746.0, - "width": 153.0, - "height": 20.0 - } - }, - "children": [ - 164 - ], - "name": "Write language bindings", - "nameFrom": "contents", - "previousOnLine": 165, - "cssDisplay": "list-item", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 164, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 162, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 153.0, - "height": 19.0 - } - }, - "name": "Write language bindings", - "nameFrom": "contents", - "previousOnLine": 165, - "characterOffsets": [ - 14.0, - 19.0, - 23.0, - 27.0, - 34.0, - 38.0, - 42.0, - 49.0, - 57.0, - 65.0, - 73.0, - 80.0, - 88.0, - 95.0, - 99.0, - 107.0, - 111.0, - 119.0, - 127.0, - 131.0, - 139.0, - 147.0, - 153.0 - ], - "words": [ - { - "start": 0, - "end": 5 - }, - { - "start": 6, - "end": 14 - }, - { - "start": 15, - "end": 23 - } - ], - "cssDisplay": "list-item" - }, - { - "id": 25, - "role": "listItem", - "bounds": { - "rect": { - "left": 48.0, - "top": 766.0, - "width": 729.0, - "height": 21.0 - } - }, - "children": [ - 26, - 166, - 168, - 169 - ], - "isLineBreakingObject": true, - "cssDisplay": "list-item", - "htmlTag": "li", - "hierarchicalLevel": 1, - "foregroundColor": 0, - "listStyle": "numeric", - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 26, - "role": "listMarker", - "bounds": { - "rect": { - "left": 32.0, - "top": 766.0, - "width": 16.0, - "height": 21.0 - } - }, - "children": [ - 170 - ], - "name": "4. ", - "nameFrom": "contents", - "nextOnLine": 171, - "cssDisplay": "inline-block", - "htmlTag": "::marker", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 170, - "role": "staticText", - "bounds": { - "rect": { - "left": 32.0, - "top": 766.0, - "width": 16.0, - "height": 20.0 - } - }, - "children": [ - 172 - ], - "name": "4. ", - "nameFrom": "contents", - "nextOnLine": 171, - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 172, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 170, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 16.0, - "height": 19.0 - } - }, - "name": "4. ", - "nameFrom": "contents", - "nextOnLine": 171, - "characterOffsets": [ - 8.0, - 12.0, - 16.0 - ], - "words": [ - { - "start": 0, - "end": 1 - }, - { - "start": 1, - "end": 2 - } - ] - }, - { - "id": 166, - "role": "staticText", - "bounds": { - "rect": { - "left": 48.0, - "top": 766.0, - "width": 38.0, - "height": 20.0 - } - }, - "children": [ - 171 - ], - "name": "Write ", - "nameFrom": "contents", - "nextOnLine": 173, - "previousOnLine": 172, - "cssDisplay": "list-item", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 171, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 166, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 38.0, - "height": 19.0 - } - }, - "name": "Write ", - "nameFrom": "contents", - "nextOnLine": 173, - "previousOnLine": 172, - "characterOffsets": [ - 14.0, - 19.0, - 23.0, - 27.0, - 34.0, - 38.0 - ], - "words": [ - { - "start": 0, - "end": 5 - } - ], - "cssDisplay": "list-item" - }, - { - "id": 168, - "role": "staticText", - "bounds": { - "rect": { - "left": 86.0, - "top": 766.0, - "width": 22.0, - "height": 20.0 - } - }, - "children": [ - 173 - ], - "name": "lots", - "nameFrom": "contents", - "nextOnLine": 174, - "previousOnLine": 171, - "cssDisplay": "inline", - "foregroundColor": 0, - "italic": true, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 173, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 168, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 22.0, - "height": 19.0 - } - }, - "name": "lots", - "nameFrom": "contents", - "nextOnLine": 174, - "previousOnLine": 171, - "characterOffsets": [ - 4.0, - 12.0, - 16.0, - 22.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "inline" - }, - { - "id": 169, - "role": "staticText", - "bounds": { - "rect": { - "left": 108.0, - "top": 766.0, - "width": 50.0, - "height": 20.0 - } - }, - "children": [ - 174 - ], - "name": " of docs", - "nameFrom": "contents", - "previousOnLine": 173, - "cssDisplay": "list-item", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 174, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 169, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 50.0, - "height": 19.0 - } - }, - "name": " of docs", - "nameFrom": "contents", - "previousOnLine": 173, - "characterOffsets": [ - 4.0, - 12.0, - 17.0, - 21.0, - 29.0, - 37.0, - 44.0, - 50.0 - ], - "words": [ - { - "start": 1, - "end": 3 - }, - { - "start": 4, - "end": 8 - } - ], - "cssDisplay": "list-item" - }, - { - "id": 42, - "role": "heading", - "bounds": { - "rect": { - "left": 8.0, - "top": 806.0, - "width": 769.0, - "height": 28.0 - } - }, - "children": [ - 175 - ], - "name": "Table", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "h2", - "hierarchicalLevel": 2, - "foregroundColor": 0, - "textAlign": "left", - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 175, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 806.0, - "width": 57.0, - "height": 27.0 - } - }, - "children": [ - 176 - ], - "name": "Table", - "nameFrom": "contents", - "cssDisplay": "block", - "foregroundColor": 0, - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 176, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 175, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 57.0, - "height": 26.0 - } - }, - "name": "Table", - "nameFrom": "contents", - "characterOffsets": [ - 14.0, - 26.0, - 39.0, - 46.0, - 57.0 - ], - "words": [ - { - "start": 0, - "end": 5 - } - ], - "cssDisplay": "block" - }, - { - "id": 43, - "role": "table", - "bounds": { - "rect": { - "left": 8.0, - "top": 853.0, - "width": 231.0, - "height": 191.0 - } - }, - "children": [ - 177, - 178 - ], - "isLineBreakingObject": true, - "cssDisplay": "table", - "htmlTag": "table", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 177, - "role": "rowGroup", - "bounds": { - "rect": { - "left": 10.0, - "top": 855.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 179 - ], - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "thead", - "foregroundColor": 0 - }, - { - "id": 179, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 855.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 180, - 181, - 182, - 183 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 180, - "role": "columnHeader", - "bounds": { - "rect": { - "left": 10.0, - "top": 855.0, - "width": 34.0, - "height": 23.0 - } - }, - "children": [ - 184 - ], - "name": "Year", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "th", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "center", - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 184, - "role": "staticText", - "bounds": { - "rect": { - "left": 11.0, - "top": 856.0, - "width": 32.0, - "height": 20.0 - } - }, - "children": [ - 185 - ], - "name": "Year", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 185, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 184, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 19.0 - } - }, - "name": "Year", - "nameFrom": "contents", - "characterOffsets": [ - 10.0, - 17.0, - 25.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 181, - "role": "columnHeader", - "bounds": { - "rect": { - "left": 46.0, - "top": 855.0, - "width": 59.0, - "height": 23.0 - } - }, - "children": [ - 186 - ], - "name": "Month", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "th", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "center", - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 186, - "role": "staticText", - "bounds": { - "rect": { - "left": 52.0, - "top": 856.0, - "width": 47.0, - "height": 20.0 - } - }, - "children": [ - 187 - ], - "name": "Month", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 187, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 186, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 46.0, - "height": 19.0 - } - }, - "name": "Month", - "nameFrom": "contents", - "characterOffsets": [ - 15.0, - 23.0, - 32.0, - 37.0, - 46.0 - ], - "words": [ - { - "start": 0, - "end": 5 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 182, - "role": "columnHeader", - "bounds": { - "rect": { - "left": 107.0, - "top": 855.0, - "width": 74.0, - "height": 23.0 - } - }, - "children": [ - 188 - ], - "name": "Code Base", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "th", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "center", - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 188, - "role": "staticText", - "bounds": { - "rect": { - "left": 108.0, - "top": 856.0, - "width": 72.0, - "height": 20.0 - } - }, - "children": [ - 189 - ], - "name": "Code Base", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 189, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 188, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 72.0, - "height": 19.0 - } - }, - "name": "Code Base", - "nameFrom": "contents", - "characterOffsets": [ - 12.0, - 20.0, - 29.0, - 36.0, - 40.0, - 51.0, - 59.0, - 65.0, - 72.0 - ], - "words": [ - { - "start": 0, - "end": 4 - }, - { - "start": 5, - "end": 9 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 183, - "role": "columnHeader", - "bounds": { - "rect": { - "left": 183.0, - "top": 855.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 190 - ], - "name": "Version", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "th", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "center", - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 190, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 856.0, - "width": 52.0, - "height": 20.0 - } - }, - "children": [ - 191 - ], - "name": "Version", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 191, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 190, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 52.0, - "height": 19.0 - } - }, - "name": "Version", - "nameFrom": "contents", - "characterOffsets": [ - 11.0, - 18.0, - 25.0, - 31.0, - 35.0, - 43.0, - 52.0 - ], - "words": [ - { - "start": 0, - "end": 7 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 178, - "role": "rowGroup", - "bounds": { - "rect": { - "left": 10.0, - "top": 879.0, - "width": 227.0, - "height": 163.0 - } - }, - "children": [ - 192, - 193, - 194, - 195, - 196, - 197 - ], - "ignored": true, - "isLineBreakingObject": true, - "htmlTag": "tbody", - "foregroundColor": 0 - }, - { - "id": 192, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 879.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 198, - 199, - 200, - 201 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 198, - "role": "cell", - "bounds": { - "rect": { - "left": 10.0, - "top": 879.0, - "width": 34.0, - "height": 47.0 - } - }, - "children": [ - 202 - ], - "name": "2002", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 2, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 202, - "role": "staticText", - "bounds": { - "rect": { - "left": 11.0, - "top": 892.0, - "width": 32.0, - "height": 20.0 - } - }, - "children": [ - 203 - ], - "name": "2002", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 203, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 202, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 19.0 - } - }, - "name": "2002", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 199, - "role": "cell", - "bounds": { - "rect": { - "left": 46.0, - "top": 879.0, - "width": 59.0, - "height": 23.0 - } - }, - "children": [ - 204 - ], - "name": "February", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 204, - "role": "staticText", - "bounds": { - "rect": { - "left": 47.0, - "top": 880.0, - "width": 57.0, - "height": 20.0 - } - }, - "children": [ - 205 - ], - "name": "February", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 205, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 204, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 57.0, - "height": 19.0 - } - }, - "name": "February", - "nameFrom": "contents", - "characterOffsets": [ - 9.0, - 16.0, - 24.0, - 29.0, - 37.0, - 44.0, - 49.0, - 57.0 - ], - "words": [ - { - "start": 0, - "end": 8 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 200, - "role": "cell", - "bounds": { - "rect": { - "left": 107.0, - "top": 879.0, - "width": 74.0, - "height": 71.0 - } - }, - "children": [ - 206 - ], - "name": "Classic", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 3, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 206, - "role": "staticText", - "bounds": { - "rect": { - "left": 108.0, - "top": 904.0, - "width": 45.0, - "height": 20.0 - } - }, - "children": [ - 207 - ], - "name": "Classic", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 207, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 206, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 45.0, - "height": 19.0 - } - }, - "name": "Classic", - "nameFrom": "contents", - "characterOffsets": [ - 11.0, - 15.0, - 22.0, - 28.0, - 34.0, - 38.0, - 45.0 - ], - "words": [ - { - "start": 0, - "end": 7 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 201, - "role": "cell", - "bounds": { - "rect": { - "left": 183.0, - "top": 879.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 208 - ], - "name": "1.0", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 208, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 880.0, - "width": 20.0, - "height": 20.0 - } - }, - "children": [ - 209 - ], - "name": "1.0", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 209, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 208, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 20.0, - "height": 19.0 - } - }, - "name": "1.0", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 12.0, - 20.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 193, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 903.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 210, - 211 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 210, - "role": "cell", - "bounds": { - "rect": { - "left": 46.0, - "top": 903.0, - "width": 59.0, - "height": 23.0 - } - }, - "children": [ - 212 - ], - "name": "July", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 212, - "role": "staticText", - "bounds": { - "rect": { - "left": 47.0, - "top": 904.0, - "width": 26.0, - "height": 20.0 - } - }, - "children": [ - 213 - ], - "name": "July", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 213, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 212, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 26.0, - "height": 19.0 - } - }, - "name": "July", - "nameFrom": "contents", - "characterOffsets": [ - 6.0, - 14.0, - 18.0, - 26.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 211, - "role": "cell", - "bounds": { - "rect": { - "left": 183.0, - "top": 903.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 214 - ], - "name": "1.1", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 214, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 904.0, - "width": 20.0, - "height": 20.0 - } - }, - "children": [ - 215 - ], - "name": "1.1", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 215, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 214, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 20.0, - "height": 19.0 - } - }, - "name": "1.1", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 12.0, - 20.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 194, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 927.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 216, - 217, - 218 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 216, - "role": "cell", - "bounds": { - "rect": { - "left": 10.0, - "top": 927.0, - "width": 34.0, - "height": 23.0 - } - }, - "children": [ - 219 - ], - "name": "2003", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 219, - "role": "staticText", - "bounds": { - "rect": { - "left": 11.0, - "top": 928.0, - "width": 32.0, - "height": 20.0 - } - }, - "children": [ - 220 - ], - "name": "2003", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 220, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 219, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 19.0 - } - }, - "name": "2003", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 217, - "role": "cell", - "bounds": { - "rect": { - "left": 46.0, - "top": 927.0, - "width": 59.0, - "height": 23.0 - } - }, - "children": [ - 221 - ], - "name": "April", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 221, - "role": "staticText", - "bounds": { - "rect": { - "left": 47.0, - "top": 928.0, - "width": 33.0, - "height": 20.0 - } - }, - "children": [ - 222 - ], - "name": "April", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 222, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 221, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 33.0, - "height": 19.0 - } - }, - "name": "April", - "nameFrom": "contents", - "characterOffsets": [ - 12.0, - 20.0, - 25.0, - 29.0, - 33.0 - ], - "words": [ - { - "start": 0, - "end": 5 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 218, - "role": "cell", - "bounds": { - "rect": { - "left": 183.0, - "top": 927.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 223 - ], - "name": "1.2", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 223, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 928.0, - "width": 20.0, - "height": 20.0 - } - }, - "children": [ - 224 - ], - "name": "1.2", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 224, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 223, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 20.0, - "height": 19.0 - } - }, - "name": "1.2", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 12.0, - 20.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 195, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 951.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 225, - 226, - 227, - 228 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 225, - "role": "cell", - "bounds": { - "rect": { - "left": 10.0, - "top": 951.0, - "width": 34.0, - "height": 23.0 - } - }, - "children": [ - 229 - ], - "name": "2004", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 229, - "role": "staticText", - "bounds": { - "rect": { - "left": 11.0, - "top": 952.0, - "width": 32.0, - "height": 20.0 - } - }, - "children": [ - 230 - ], - "name": "2004", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 230, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 229, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 19.0 - } - }, - "name": "2004", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 226, - "role": "cell", - "bounds": { - "rect": { - "left": 46.0, - "top": 951.0, - "width": 59.0, - "height": 23.0 - } - }, - "children": [ - 231 - ], - "name": "July", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 231, - "role": "staticText", - "bounds": { - "rect": { - "left": 47.0, - "top": 952.0, - "width": 26.0, - "height": 20.0 - } - }, - "children": [ - 232 - ], - "name": "July", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 232, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 231, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 26.0, - "height": 19.0 - } - }, - "name": "July", - "nameFrom": "contents", - "characterOffsets": [ - 6.0, - 14.0, - 18.0, - 26.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 227, - "role": "cell", - "bounds": { - "rect": { - "left": 107.0, - "top": 951.0, - "width": 74.0, - "height": 47.0 - } - }, - "children": [ - 233 - ], - "name": "2", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 2, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 233, - "role": "staticText", - "bounds": { - "rect": { - "left": 108.0, - "top": 964.0, - "width": 8.0, - "height": 20.0 - } - }, - "children": [ - 234 - ], - "name": "2", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 234, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 233, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 8.0, - "height": 19.0 - } - }, - "name": "2", - "nameFrom": "contents", - "characterOffsets": [ - 8.0 - ], - "words": [ - { - "start": 0, - "end": 1 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 228, - "role": "cell", - "bounds": { - "rect": { - "left": 183.0, - "top": 951.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 235 - ], - "name": "2.0", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 235, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 952.0, - "width": 20.0, - "height": 20.0 - } - }, - "children": [ - 236 - ], - "name": "2.0", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 236, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 235, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 20.0, - "height": 19.0 - } - }, - "name": "2.0", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 12.0, - 20.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 196, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 975.0, - "width": 227.0, - "height": 23.0 - } - }, - "children": [ - 237, - 238, - 239 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 237, - "role": "cell", - "bounds": { - "rect": { - "left": 10.0, - "top": 975.0, - "width": 34.0, - "height": 23.0 - } - }, - "children": [ - 240 - ], - "name": "2005", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 240, - "role": "staticText", - "bounds": { - "rect": { - "left": 11.0, - "top": 976.0, - "width": 32.0, - "height": 20.0 - } - }, - "children": [ - 241 - ], - "name": "2005", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 241, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 240, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 19.0 - } - }, - "name": "2005", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 16.0, - 24.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 238, - "role": "cell", - "bounds": { - "rect": { - "left": 46.0, - "top": 975.0, - "width": 59.0, - "height": 23.0 - } - }, - "children": [ - 242 - ], - "name": "June", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 242, - "role": "staticText", - "bounds": { - "rect": { - "left": 47.0, - "top": 976.0, - "width": 29.0, - "height": 20.0 - } - }, - "children": [ - 243 - ], - "name": "June", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 243, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 242, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 29.0, - "height": 19.0 - } - }, - "name": "June", - "nameFrom": "contents", - "characterOffsets": [ - 6.0, - 14.0, - 22.0, - 29.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 239, - "role": "cell", - "bounds": { - "rect": { - "left": 183.0, - "top": 975.0, - "width": 54.0, - "height": 23.0 - } - }, - "children": [ - 244 - ], - "name": "2.2", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 244, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 976.0, - "width": 20.0, - "height": 20.0 - } - }, - "children": [ - 245 - ], - "name": "2.2", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 245, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 244, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 20.0, - "height": 19.0 - } - }, - "name": "2.2", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 12.0, - 20.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 197, - "role": "row", - "bounds": { - "rect": { - "left": 10.0, - "top": 999.0, - "width": 227.0, - "height": 43.0 - } - }, - "children": [ - 246, - 247, - 248 - ], - "isLineBreakingObject": true, - "cssDisplay": "table-row", - "htmlTag": "tr", - "tableRowHeader": 246, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 246, - "role": "rowHeader", - "bounds": { - "rect": { - "left": 10.0, - "top": 999.0, - "width": 95.0, - "height": 43.0 - } - }, - "children": [ - 249, - 250, - 251 - ], - "name": "Next version:", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "th", - "tableCellColumnSpan": 2, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "center", - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 249, - "role": "staticText", - "bounds": { - "rect": { - "left": 41.0, - "top": 1000.0, - "width": 33.0, - "height": 20.0 - } - }, - "children": [ - 252 - ], - "name": "Next", - "nameFrom": "contents", - "nextOnLine": 253, - "cssDisplay": "table-cell", - "foregroundColor": 0, - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 252, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 249, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 32.0, - "height": 19.0 - } - }, - "name": "Next", - "nameFrom": "contents", - "nextOnLine": 253, - "characterOffsets": [ - 12.0, - 19.0, - 27.0, - 32.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 250, - "role": "lineBreak", - "bounds": { - "rect": { - "left": 10.0, - "top": 999.0, - "width": 0.0, - "height": 0.0 - } - }, - "children": [ - 253 - ], - "name": "\n", - "nameFrom": "contents", - "isLineBreakingObject": true, - "previousOnLine": 252, - "cssDisplay": "inline", - "htmlTag": "br", - "foregroundColor": 0, - "textAlign": "center", - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 253, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 250, - "rect": { - "left": 63.0, - "top": 1.0, - "width": 0.0, - "height": 19.0 - } - }, - "name": "\n", - "nameFrom": "contents", - "isLineBreakingObject": true, - "previousOnLine": 252, - "characterOffsets": [ - 0.0 - ], - "cssDisplay": "inline", - "htmlTag": "br" - }, - { - "id": 251, - "role": "staticText", - "bounds": { - "rect": { - "left": 30.0, - "top": 1020.0, - "width": 55.0, - "height": 20.0 - } - }, - "children": [ - 254 - ], - "name": "version:", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "bold": true, - "fontSize": 16.0, - "fontWeight": 700.0 - }, - { - "id": 254, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 251, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 54.0, - "height": 19.0 - } - }, - "name": "version:", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 15.0, - 22.0, - 28.0, - 32.0, - 40.0, - 49.0, - 54.0 - ], - "words": [ - { - "start": 0, - "end": 7 - }, - { - "start": 7, - "end": 8 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 247, - "role": "cell", - "bounds": { - "rect": { - "left": 107.0, - "top": 999.0, - "width": 74.0, - "height": 43.0 - } - }, - "children": [ - 255 - ], - "name": " ", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 255, - "role": "staticText", - "bounds": { - "rect": { - "left": 108.0, - "top": 1010.0, - "width": 4.0, - "height": 20.0 - } - }, - "children": [ - 256 - ], - "name": " ", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 256, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 255, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 4.0, - "height": 19.0 - } - }, - "name": " ", - "nameFrom": "contents", - "characterOffsets": [ - 4.0 - ], - "cssDisplay": "table-cell" - }, - { - "id": 248, - "role": "cell", - "bounds": { - "rect": { - "left": 183.0, - "top": 999.0, - "width": 54.0, - "height": 43.0 - } - }, - "children": [ - 257 - ], - "name": "2.3", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "table-cell", - "htmlTag": "td", - "tableCellColumnSpan": 1, - "tableCellRowSpan": 1, - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 257, - "role": "staticText", - "bounds": { - "rect": { - "left": 184.0, - "top": 1010.0, - "width": 20.0, - "height": 20.0 - } - }, - "children": [ - 258 - ], - "name": "2.3", - "nameFrom": "contents", - "cssDisplay": "table-cell", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 258, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 257, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 20.0, - "height": 19.0 - } - }, - "name": "2.3", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 12.0, - 20.0 - ], - "words": [ - { - "start": 0, - "end": 3 - } - ], - "cssDisplay": "table-cell" - }, - { - "id": 44, - "role": "heading", - "bounds": { - "rect": { - "left": 8.0, - "top": 1063.0, - "width": 769.0, - "height": 28.0 - } - }, - "children": [ - 259 - ], - "name": "Text", - "nameFrom": "contents", - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "h2", - "hierarchicalLevel": 2, - "foregroundColor": 0, - "textAlign": "left", - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 259, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 1063.0, - "width": 45.0, - "height": 27.0 - } - }, - "children": [ - 260 - ], - "name": "Text", - "nameFrom": "contents", - "cssDisplay": "block", - "foregroundColor": 0, - "bold": true, - "fontSize": 24.0, - "fontWeight": 700.0 - }, - { - "id": 260, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 259, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 45.0, - "height": 26.0 - } - }, - "name": "Text", - "nameFrom": "contents", - "characterOffsets": [ - 14.0, - 25.0, - 37.0, - 45.0 - ], - "words": [ - { - "start": 0, - "end": 4 - } - ], - "cssDisplay": "block" - }, - { - "id": 45, - "role": "paragraph", - "bounds": { - "rect": { - "left": 8.0, - "top": 1110.0, - "width": 769.0, - "height": 121.0 - } - }, - "children": [ - 261, - 262 - ], - "isLineBreakingObject": true, - "cssDisplay": "block", - "htmlTag": "p", - "foregroundColor": 0, - "textAlign": "left", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 261, - "role": "link", - "bounds": { - "rect": { - "left": 8.0, - "top": 1110.0, - "width": 84.0, - "height": 20.0 - } - }, - "children": [ - 263 - ], - "name": "Lorem ipsum", - "nameFrom": "contents", - "focusable": true, - "linked": true, - "nextOnLine": 264, - "cssDisplay": "inline", - "htmlTag": "a", - "url": "https://lipsum.com/", - "defaultActionVerb": "jump", - "foregroundColor": 238, - "textAlign": "left", - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 263, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 1110.0, - "width": 84.0, - "height": 20.0 - } - }, - "children": [ - 270 - ], - "name": "Lorem ipsum", - "nameFrom": "contents", - "linked": true, - "nextOnLine": 264, - "cssDisplay": "inline", - "defaultActionVerb": "clickAncestor", - "foregroundColor": 238, - "underline": "solid", - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 270, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 263, - "rect": { - "left": 0.0, - "top": 0.0, - "width": 84.0, - "height": 19.0 - } - }, - "name": "Lorem ipsum", - "nameFrom": "contents", - "nextOnLine": 264, - "characterOffsets": [ - 10.0, - 18.0, - 23.0, - 30.0, - 42.0, - 46.0, - 50.0, - 58.0, - 64.0, - 72.0, - 84.0 - ], - "words": [ - { - "start": 0, - "end": 5 - }, - { - "start": 6, - "end": 11 - } - ], - "cssDisplay": "inline" - }, - { - "id": 262, - "role": "staticText", - "bounds": { - "rect": { - "left": 8.0, - "top": 1110.0, - "width": 768.0, - "height": 120.0 - } - }, - "children": [ - 264, - 265, - 266, - 267, - 268, - 269 - ], - "name": " dolor sit amet, consectetur adipiscing elit. Ut facilisis nisl vel eleifend vehicula. Quisque ipsum mi, lobortis sit amet lacinia non, fringilla bibendum ante. Vivamus dictum lorem ut diam bibendum, eget lobortis neque commodo. Integer mauris nibh, luctus sed ligula in, suscipit rutrum arcu. Aliquam dignissim nunc in justo lobortis molestie. Donec scelerisque ut leo et congue. Praesent turpis eros, mollis vel lacinia ac, ullamcorper a tortor. Proin id interdum tellus. Cras pellentesque urna felis, sed condimentum dui pretium vitae. Suspendisse sed enim tristique, tempor nunc vel, laoreet lacus. Quisque neque turpis, tincidunt id risus id, rutrum elementum sem. Praesent sit amet ante et metus consectetur auctor.", - "nameFrom": "contents", - "previousOnLine": 270, - "cssDisplay": "block", - "foregroundColor": 0, - "fontSize": 16.0, - "fontWeight": 400.0 - }, - { - "id": 264, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 262, - "rect": { - "left": 84.0, - "top": 0.0, - "width": 672.0, - "height": 19.0 - } - }, - "name": " dolor sit amet, consectetur adipiscing elit. Ut facilisis nisl vel eleifend vehicula. Quisque ipsum mi, lobortis ", - "nameFrom": "contents", - "previousOnLine": 270, - "characterOffsets": [ - 4.0, - 12.0, - 20.0, - 24.0, - 32.0, - 37.0, - 41.0, - 47.0, - 51.0, - 55.0, - 59.0, - 66.0, - 78.0, - 85.0, - 89.0, - 93.0, - 97.0, - 104.0, - 112.0, - 120.0, - 126.0, - 133.0, - 140.0, - 144.0, - 151.0, - 155.0, - 163.0, - 168.0, - 172.0, - 179.0, - 187.0, - 191.0, - 199.0, - 203.0, - 209.0, - 216.0, - 220.0, - 228.0, - 236.0, - 240.0, - 247.0, - 251.0, - 255.0, - 259.0, - 263.0, - 267.0, - 279.0, - 283.0, - 287.0, - 292.0, - 299.0, - 306.0, - 310.0, - 314.0, - 318.0, - 324.0, - 328.0, - 334.0, - 338.0, - 346.0, - 350.0, - 356.0, - 360.0, - 364.0, - 372.0, - 379.0, - 383.0, - 387.0, - 394.0, - 398.0, - 405.0, - 409.0, - 414.0, - 421.0, - 429.0, - 437.0, - 441.0, - 449.0, - 456.0, - 464.0, - 468.0, - 475.0, - 483.0, - 487.0, - 494.0, - 498.0, - 502.0, - 514.0, - 522.0, - 526.0, - 532.0, - 540.0, - 548.0, - 555.0, - 559.0, - 563.0, - 571.0, - 577.0, - 585.0, - 597.0, - 601.0, - 613.0, - 617.0, - 621.0, - 625.0, - 629.0, - 637.0, - 645.0, - 653.0, - 658.0, - 662.0, - 666.0, - 672.0, - 672.0 - ], - "words": [ - { - "start": 1, - "end": 6 - }, - { - "start": 7, - "end": 10 - }, - { - "start": 11, - "end": 15 - }, - { - "start": 15, - "end": 16 - }, - { - "start": 17, - "end": 28 - }, - { - "start": 29, - "end": 39 - }, - { - "start": 40, - "end": 44 - }, - { - "start": 44, - "end": 45 - }, - { - "start": 46, - "end": 48 - }, - { - "start": 49, - "end": 58 - }, - { - "start": 59, - "end": 63 - }, - { - "start": 64, - "end": 67 - }, - { - "start": 68, - "end": 76 - }, - { - "start": 77, - "end": 85 - }, - { - "start": 85, - "end": 86 - }, - { - "start": 87, - "end": 94 - }, - { - "start": 95, - "end": 100 - }, - { - "start": 101, - "end": 103 - }, - { - "start": 103, - "end": 104 - }, - { - "start": 105, - "end": 113 - } - ], - "cssDisplay": "block" - }, - { - "id": 265, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 262, - "rect": { - "left": 0.0, - "top": 20.0, - "width": 742.0, - "height": 19.0 - } - }, - "name": "sit amet lacinia non, fringilla bibendum ante. Vivamus dictum lorem ut diam bibendum, eget lobortis neque commodo. ", - "nameFrom": "contents", - "characterOffsets": [ - 6.0, - 10.0, - 14.0, - 18.0, - 25.0, - 37.0, - 44.0, - 48.0, - 52.0, - 56.0, - 63.0, - 70.0, - 74.0, - 82.0, - 86.0, - 93.0, - 97.0, - 105.0, - 113.0, - 121.0, - 125.0, - 129.0, - 134.0, - 139.0, - 143.0, - 151.0, - 159.0, - 163.0, - 167.0, - 171.0, - 178.0, - 182.0, - 190.0, - 194.0, - 202.0, - 209.0, - 217.0, - 225.0, - 233.0, - 245.0, - 249.0, - 256.0, - 264.0, - 268.0, - 275.0, - 279.0, - 283.0, - 294.0, - 298.0, - 306.0, - 313.0, - 325.0, - 333.0, - 339.0, - 343.0, - 351.0, - 355.0, - 362.0, - 366.0, - 374.0, - 386.0, - 390.0, - 394.0, - 402.0, - 407.0, - 414.0, - 426.0, - 430.0, - 438.0, - 442.0, - 446.0, - 454.0, - 458.0, - 465.0, - 477.0, - 481.0, - 489.0, - 493.0, - 501.0, - 508.0, - 516.0, - 524.0, - 532.0, - 544.0, - 548.0, - 552.0, - 559.0, - 567.0, - 574.0, - 578.0, - 582.0, - 586.0, - 594.0, - 602.0, - 610.0, - 615.0, - 619.0, - 623.0, - 629.0, - 633.0, - 641.0, - 648.0, - 656.0, - 664.0, - 671.0, - 675.0, - 682.0, - 690.0, - 702.0, - 714.0, - 722.0, - 730.0, - 738.0, - 742.0, - 742.0 - ], - "words": [ - { - "start": 0, - "end": 3 - }, - { - "start": 4, - "end": 8 - }, - { - "start": 9, - "end": 16 - }, - { - "start": 17, - "end": 20 - }, - { - "start": 20, - "end": 21 - }, - { - "start": 22, - "end": 31 - }, - { - "start": 32, - "end": 40 - }, - { - "start": 41, - "end": 45 - }, - { - "start": 45, - "end": 46 - }, - { - "start": 47, - "end": 54 - }, - { - "start": 55, - "end": 61 - }, - { - "start": 62, - "end": 67 - }, - { - "start": 68, - "end": 70 - }, - { - "start": 71, - "end": 75 - }, - { - "start": 76, - "end": 84 - }, - { - "start": 84, - "end": 85 - }, - { - "start": 86, - "end": 90 - }, - { - "start": 91, - "end": 99 - }, - { - "start": 100, - "end": 105 - }, - { - "start": 106, - "end": 113 - }, - { - "start": 113, - "end": 114 - } - ], - "cssDisplay": "block" - }, - { - "id": 266, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 262, - "rect": { - "left": 0.0, - "top": 40.0, - "width": 747.0, - "height": 19.0 - } - }, - "name": "Integer mauris nibh, luctus sed ligula in, suscipit rutrum arcu. Aliquam dignissim nunc in justo lobortis molestie. Donec ", - "nameFrom": "contents", - "characterOffsets": [ - 5.0, - 13.0, - 17.0, - 24.0, - 32.0, - 39.0, - 44.0, - 48.0, - 60.0, - 67.0, - 75.0, - 80.0, - 84.0, - 90.0, - 94.0, - 102.0, - 106.0, - 114.0, - 122.0, - 126.0, - 130.0, - 134.0, - 142.0, - 149.0, - 153.0, - 161.0, - 167.0, - 171.0, - 177.0, - 184.0, - 192.0, - 196.0, - 200.0, - 204.0, - 212.0, - 220.0, - 224.0, - 231.0, - 235.0, - 239.0, - 247.0, - 251.0, - 255.0, - 261.0, - 269.0, - 275.0, - 282.0, - 286.0, - 294.0, - 298.0, - 302.0, - 306.0, - 311.0, - 319.0, - 323.0, - 328.0, - 336.0, - 348.0, - 352.0, - 359.0, - 364.0, - 371.0, - 379.0, - 383.0, - 386.0, - 398.0, - 402.0, - 406.0, - 414.0, - 422.0, - 429.0, - 441.0, - 445.0, - 453.0, - 457.0, - 465.0, - 473.0, - 477.0, - 483.0, - 489.0, - 493.0, - 505.0, - 509.0, - 517.0, - 525.0, - 533.0, - 540.0, - 544.0, - 548.0, - 556.0, - 560.0, - 564.0, - 572.0, - 578.0, - 582.0, - 590.0, - 594.0, - 598.0, - 606.0, - 614.0, - 622.0, - 627.0, - 631.0, - 635.0, - 641.0, - 645.0, - 657.0, - 665.0, - 669.0, - 676.0, - 682.0, - 686.0, - 690.0, - 697.0, - 701.0, - 705.0, - 717.0, - 725.0, - 733.0, - 740.0, - 747.0, - 747.0 - ], - "words": [ - { - "start": 0, - "end": 7 - }, - { - "start": 8, - "end": 14 - }, - { - "start": 15, - "end": 19 - }, - { - "start": 19, - "end": 20 - }, - { - "start": 21, - "end": 27 - }, - { - "start": 28, - "end": 31 - }, - { - "start": 32, - "end": 38 - }, - { - "start": 39, - "end": 41 - }, - { - "start": 41, - "end": 42 - }, - { - "start": 43, - "end": 51 - }, - { - "start": 52, - "end": 58 - }, - { - "start": 59, - "end": 63 - }, - { - "start": 63, - "end": 64 - }, - { - "start": 65, - "end": 72 - }, - { - "start": 73, - "end": 82 - }, - { - "start": 83, - "end": 87 - }, - { - "start": 88, - "end": 90 - }, - { - "start": 91, - "end": 96 - }, - { - "start": 97, - "end": 105 - }, - { - "start": 106, - "end": 114 - }, - { - "start": 114, - "end": 115 - }, - { - "start": 116, - "end": 121 - } - ], - "cssDisplay": "block" - }, - { - "id": 267, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 262, - "rect": { - "left": 0.0, - "top": 60.0, - "width": 758.0, - "height": 19.0 - } - }, - "name": "scelerisque ut leo et congue. Praesent turpis eros, mollis vel lacinia ac, ullamcorper a tortor. Proin id interdum tellus. Cras ", - "nameFrom": "contents", - "characterOffsets": [ - 6.0, - 13.0, - 20.0, - 24.0, - 31.0, - 36.0, - 40.0, - 46.0, - 54.0, - 62.0, - 69.0, - 73.0, - 81.0, - 85.0, - 89.0, - 93.0, - 100.0, - 108.0, - 112.0, - 119.0, - 123.0, - 127.0, - 134.0, - 142.0, - 150.0, - 158.0, - 166.0, - 173.0, - 177.0, - 181.0, - 190.0, - 195.0, - 202.0, - 209.0, - 215.0, - 222.0, - 230.0, - 234.0, - 238.0, - 242.0, - 250.0, - 255.0, - 263.0, - 267.0, - 273.0, - 277.0, - 284.0, - 289.0, - 297.0, - 303.0, - 307.0, - 311.0, - 323.0, - 331.0, - 335.0, - 339.0, - 343.0, - 349.0, - 353.0, - 361.0, - 368.0, - 372.0, - 376.0, - 380.0, - 387.0, - 394.0, - 398.0, - 406.0, - 410.0, - 417.0, - 421.0, - 428.0, - 435.0, - 439.0, - 443.0, - 451.0, - 455.0, - 459.0, - 466.0, - 478.0, - 485.0, - 493.0, - 498.0, - 506.0, - 513.0, - 518.0, - 522.0, - 529.0, - 533.0, - 537.0, - 545.0, - 550.0, - 554.0, - 562.0, - 566.0, - 570.0, - 574.0, - 583.0, - 588.0, - 596.0, - 600.0, - 608.0, - 612.0, - 616.0, - 624.0, - 628.0, - 632.0, - 640.0, - 644.0, - 651.0, - 656.0, - 664.0, - 672.0, - 684.0, - 688.0, - 692.0, - 699.0, - 703.0, - 707.0, - 715.0, - 721.0, - 725.0, - 729.0, - 740.0, - 745.0, - 752.0, - 758.0, - 758.0 - ], - "words": [ - { - "start": 0, - "end": 11 - }, - { - "start": 12, - "end": 14 - }, - { - "start": 15, - "end": 18 - }, - { - "start": 19, - "end": 21 - }, - { - "start": 22, - "end": 28 - }, - { - "start": 28, - "end": 29 - }, - { - "start": 30, - "end": 38 - }, - { - "start": 39, - "end": 45 - }, - { - "start": 46, - "end": 50 - }, - { - "start": 50, - "end": 51 - }, - { - "start": 52, - "end": 58 - }, - { - "start": 59, - "end": 62 - }, - { - "start": 63, - "end": 70 - }, - { - "start": 71, - "end": 73 - }, - { - "start": 73, - "end": 74 - }, - { - "start": 75, - "end": 86 - }, - { - "start": 87, - "end": 88 - }, - { - "start": 89, - "end": 95 - }, - { - "start": 95, - "end": 96 - }, - { - "start": 97, - "end": 102 - }, - { - "start": 103, - "end": 105 - }, - { - "start": 106, - "end": 114 - }, - { - "start": 115, - "end": 121 - }, - { - "start": 121, - "end": 122 - }, - { - "start": 123, - "end": 127 - } - ], - "cssDisplay": "block" - }, - { - "id": 268, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 262, - "rect": { - "left": 0.0, - "top": 80.0, - "width": 768.0, - "height": 19.0 - } - }, - "name": "pellentesque urna felis, sed condimentum dui pretium vitae. Suspendisse sed enim tristique, tempor nunc vel, laoreet lacus. ", - "nameFrom": "contents", - "characterOffsets": [ - 8.0, - 15.0, - 19.0, - 23.0, - 30.0, - 38.0, - 42.0, - 49.0, - 55.0, - 63.0, - 71.0, - 78.0, - 82.0, - 90.0, - 95.0, - 103.0, - 110.0, - 114.0, - 119.0, - 126.0, - 130.0, - 134.0, - 140.0, - 144.0, - 148.0, - 154.0, - 161.0, - 169.0, - 173.0, - 180.0, - 188.0, - 196.0, - 204.0, - 208.0, - 220.0, - 227.0, - 235.0, - 239.0, - 247.0, - 259.0, - 263.0, - 271.0, - 279.0, - 283.0, - 287.0, - 295.0, - 300.0, - 307.0, - 311.0, - 315.0, - 323.0, - 335.0, - 339.0, - 347.0, - 351.0, - 355.0, - 362.0, - 369.0, - 373.0, - 377.0, - 386.0, - 394.0, - 400.0, - 408.0, - 415.0, - 423.0, - 431.0, - 435.0, - 441.0, - 447.0, - 454.0, - 458.0, - 464.0, - 471.0, - 479.0, - 483.0, - 490.0, - 498.0, - 502.0, - 514.0, - 518.0, - 522.0, - 527.0, - 531.0, - 537.0, - 541.0, - 545.0, - 553.0, - 561.0, - 568.0, - 572.0, - 576.0, - 580.0, - 587.0, - 599.0, - 607.0, - 615.0, - 620.0, - 624.0, - 632.0, - 640.0, - 648.0, - 655.0, - 659.0, - 667.0, - 674.0, - 678.0, - 682.0, - 686.0, - 690.0, - 697.0, - 705.0, - 710.0, - 717.0, - 724.0, - 728.0, - 732.0, - 736.0, - 743.0, - 750.0, - 758.0, - 764.0, - 768.0, - 768.0 - ], - "words": [ - { - "start": 0, - "end": 12 - }, - { - "start": 13, - "end": 17 - }, - { - "start": 18, - "end": 23 - }, - { - "start": 23, - "end": 24 - }, - { - "start": 25, - "end": 28 - }, - { - "start": 29, - "end": 40 - }, - { - "start": 41, - "end": 44 - }, - { - "start": 45, - "end": 52 - }, - { - "start": 53, - "end": 58 - }, - { - "start": 58, - "end": 59 - }, - { - "start": 60, - "end": 71 - }, - { - "start": 72, - "end": 75 - }, - { - "start": 76, - "end": 80 - }, - { - "start": 81, - "end": 90 - }, - { - "start": 90, - "end": 91 - }, - { - "start": 92, - "end": 98 - }, - { - "start": 99, - "end": 103 - }, - { - "start": 104, - "end": 107 - }, - { - "start": 107, - "end": 108 - }, - { - "start": 109, - "end": 116 - }, - { - "start": 117, - "end": 122 - }, - { - "start": 122, - "end": 123 - } - ], - "cssDisplay": "block" - }, - { - "id": 269, - "role": "inlineTextBox", - "bounds": { - "offsetContainer": 262, - "rect": { - "left": 0.0, - "top": 100.0, - "width": 734.0, - "height": 19.0 - } - }, - "name": "Quisque neque turpis, tincidunt id risus id, rutrum elementum sem. Praesent sit amet ante et metus consectetur auctor.", - "nameFrom": "contents", - "characterOffsets": [ - 12.0, - 20.0, - 24.0, - 30.0, - 38.0, - 46.0, - 53.0, - 57.0, - 65.0, - 72.0, - 80.0, - 88.0, - 95.0, - 99.0, - 103.0, - 111.0, - 116.0, - 124.0, - 128.0, - 134.0, - 138.0, - 142.0, - 146.0, - 150.0, - 158.0, - 165.0, - 169.0, - 177.0, - 185.0, - 193.0, - 197.0, - 201.0, - 205.0, - 213.0, - 217.0, - 222.0, - 226.0, - 232.0, - 240.0, - 246.0, - 250.0, - 254.0, - 262.0, - 266.0, - 270.0, - 275.0, - 283.0, - 287.0, - 292.0, - 300.0, - 312.0, - 316.0, - 323.0, - 327.0, - 334.0, - 346.0, - 353.0, - 361.0, - 365.0, - 373.0, - 385.0, - 389.0, - 395.0, - 402.0, - 414.0, - 418.0, - 422.0, - 431.0, - 436.0, - 443.0, - 450.0, - 456.0, - 463.0, - 471.0, - 475.0, - 479.0, - 485.0, - 489.0, - 493.0, - 497.0, - 504.0, - 516.0, - 523.0, - 527.0, - 531.0, - 538.0, - 546.0, - 550.0, - 557.0, - 561.0, - 568.0, - 572.0, - 576.0, - 588.0, - 595.0, - 599.0, - 607.0, - 613.0, - 617.0, - 624.0, - 632.0, - 640.0, - 646.0, - 653.0, - 660.0, - 664.0, - 671.0, - 675.0, - 683.0, - 688.0, - 692.0, - 699.0, - 707.0, - 714.0, - 718.0, - 726.0, - 730.0, - 734.0 - ], - "words": [ - { - "start": 0, - "end": 7 - }, - { - "start": 8, - "end": 13 - }, - { - "start": 14, - "end": 20 - }, - { - "start": 20, - "end": 21 - }, - { - "start": 22, - "end": 31 - }, - { - "start": 32, - "end": 34 - }, - { - "start": 35, - "end": 40 - }, - { - "start": 41, - "end": 43 - }, - { - "start": 43, - "end": 44 - }, - { - "start": 45, - "end": 51 - }, - { - "start": 52, - "end": 61 - }, - { - "start": 62, - "end": 65 - }, - { - "start": 65, - "end": 66 - }, - { - "start": 67, - "end": 75 - }, - { - "start": 76, - "end": 79 - }, - { - "start": 80, - "end": 84 - }, - { - "start": 85, - "end": 89 - }, - { - "start": 90, - "end": 92 - }, - { - "start": 93, - "end": 98 - }, - { - "start": 99, - "end": 110 - }, - { - "start": 111, - "end": 117 - }, - { - "start": 117, - "end": 118 - } - ], - "cssDisplay": "block" - } - ], - "tree": { - "id": "ab4f7a2a-b3c0-51cf-8dbc-88acb6eddea3", - "sourceStringEncoding": "utf16" - }, - "root": 1 -} diff --git a/testdata/web-page-sample.html b/testdata/web-page-sample.html deleted file mode 100644 index 8e9d90175..000000000 --- a/testdata/web-page-sample.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - Web Page Sample - - -

Web Page Sample

- -

Form Controls

-
-
-
-
-
-
-
- - - -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- - -
-

Numbered List

-
    -
  1. Finish the schema
  2. -
  3. Write platform adapters
  4. -
  5. Write language bindings
  6. -
  7. Write lots of docs
  8. -
-

Table

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
YearMonthCode BaseVersion
2002FebruaryClassic1.0
July1.1
2003April1.2
2004July22.0
2005June2.2
Next
version:
 2.3
-

Text

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut facilisis nisl vel eleifend vehicula. Quisque ipsum mi, lobortis sit amet lacinia non, fringilla bibendum ante. Vivamus dictum lorem ut diam bibendum, eget lobortis neque commodo. Integer mauris nibh, luctus sed ligula in, suscipit rutrum arcu. Aliquam dignissim nunc in justo lobortis molestie. Donec scelerisque ut leo et congue. Praesent turpis eros, mollis vel lacinia ac, ullamcorper a tortor. Proin id interdum tellus. Cras pellentesque urna felis, sed condimentum dui pretium vitae. Suspendisse sed enim tristique, tempor nunc vel, laoreet lacus. Quisque neque turpis, tincidunt id risus id, rutrum elementum sem. Praesent sit amet ante et metus consectetur auctor.

- -